10 #include "fetch-pack.h"
12 #include "run-command.h"
14 #include "transport.h"
16 #include "prio-queue.h"
17 #include "sha1-array.h"
19 static int transfer_unpack_limit
= -1;
20 static int fetch_unpack_limit
= -1;
21 static int unpack_limit
= 100;
22 static int prefer_ofs_delta
= 1;
24 static int fetch_fsck_objects
= -1;
25 static int transfer_fsck_objects
= -1;
26 static int agent_supported
;
27 static struct lock_file shallow_lock
;
28 static const char *alternate_shallow_file
;
30 /* Remember to update object flag allocation in object.h */
31 #define COMPLETE (1U << 0)
32 #define COMMON (1U << 1)
33 #define COMMON_REF (1U << 2)
34 #define SEEN (1U << 3)
35 #define POPPED (1U << 4)
40 * After sending this many "have"s if we do not get any new ACK , we
41 * give up traversing our history.
43 #define MAX_IN_VAIN 256
45 static struct prio_queue rev_list
= { compare_commits_by_commit_date
};
46 static int non_common_revs
, multi_ack
, use_sideband
;
47 /* Allow specifying sha1 if it is a ref tip. */
48 #define ALLOW_TIP_SHA1 01
49 /* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
50 #define ALLOW_REACHABLE_SHA1 02
51 static unsigned int allow_unadvertised_object_request
;
53 static void rev_list_push(struct commit
*commit
, int mark
)
55 if (!(commit
->object
.flags
& mark
)) {
56 commit
->object
.flags
|= mark
;
58 if (parse_commit(commit
))
61 prio_queue_put(&rev_list
, commit
);
63 if (!(commit
->object
.flags
& COMMON
))
68 static int rev_list_insert_ref(const char *refname
, const unsigned char *sha1
)
70 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
72 if (o
&& o
->type
== OBJ_COMMIT
)
73 rev_list_push((struct commit
*)o
, SEEN
);
78 static int rev_list_insert_ref_oid(const char *refname
, const struct object_id
*oid
,
79 int flag
, void *cb_data
)
81 return rev_list_insert_ref(refname
, oid
->hash
);
84 static int clear_marks(const char *refname
, const struct object_id
*oid
,
85 int flag
, void *cb_data
)
87 struct object
*o
= deref_tag(parse_object(oid
->hash
), refname
, 0);
89 if (o
&& o
->type
== OBJ_COMMIT
)
90 clear_commit_marks((struct commit
*)o
,
91 COMMON
| COMMON_REF
| SEEN
| POPPED
);
96 This function marks a rev and its ancestors as common.
97 In some cases, it is desirable to mark only the ancestors (for example
98 when only the server does not yet know that they are common).
101 static void mark_common(struct commit
*commit
,
102 int ancestors_only
, int dont_parse
)
104 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
105 struct object
*o
= (struct object
*)commit
;
110 if (!(o
->flags
& SEEN
))
111 rev_list_push(commit
, SEEN
);
113 struct commit_list
*parents
;
115 if (!ancestors_only
&& !(o
->flags
& POPPED
))
117 if (!o
->parsed
&& !dont_parse
)
118 if (parse_commit(commit
))
121 for (parents
= commit
->parents
;
123 parents
= parents
->next
)
124 mark_common(parents
->item
, 0, dont_parse
);
130 Get the next rev to send, ignoring the common.
133 static const unsigned char *get_rev(void)
135 struct commit
*commit
= NULL
;
137 while (commit
== NULL
) {
139 struct commit_list
*parents
;
141 if (rev_list
.nr
== 0 || non_common_revs
== 0)
144 commit
= prio_queue_get(&rev_list
);
145 parse_commit(commit
);
146 parents
= commit
->parents
;
148 commit
->object
.flags
|= POPPED
;
149 if (!(commit
->object
.flags
& COMMON
))
152 if (commit
->object
.flags
& COMMON
) {
153 /* do not send "have", and ignore ancestors */
155 mark
= COMMON
| SEEN
;
156 } else if (commit
->object
.flags
& COMMON_REF
)
157 /* send "have", and ignore ancestors */
158 mark
= COMMON
| SEEN
;
160 /* send "have", also for its ancestors */
164 if (!(parents
->item
->object
.flags
& SEEN
))
165 rev_list_push(parents
->item
, mark
);
167 mark_common(parents
->item
, 1, 0);
168 parents
= parents
->next
;
172 return commit
->object
.oid
.hash
;
183 static void consume_shallow_list(struct fetch_pack_args
*args
, int fd
)
185 if (args
->stateless_rpc
&& args
->depth
> 0) {
186 /* If we sent a depth we will get back "duplicate"
187 * shallow and unshallow commands every time there
188 * is a block of have lines exchanged.
191 while ((line
= packet_read_line(fd
, NULL
))) {
192 if (starts_with(line
, "shallow "))
194 if (starts_with(line
, "unshallow "))
196 die("git fetch-pack: expected shallow list");
201 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
204 char *line
= packet_read_line(fd
, &len
);
208 die("git fetch-pack: expected ACK/NAK, got EOF");
209 if (!strcmp(line
, "NAK"))
211 if (skip_prefix(line
, "ACK ", &arg
)) {
212 if (!get_sha1_hex(arg
, result_sha1
)) {
217 if (strstr(arg
, "continue"))
219 if (strstr(arg
, "common"))
221 if (strstr(arg
, "ready"))
226 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
229 static void send_request(struct fetch_pack_args
*args
,
230 int fd
, struct strbuf
*buf
)
232 if (args
->stateless_rpc
) {
233 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
236 write_or_die(fd
, buf
->buf
, buf
->len
);
239 static void insert_one_alternate_ref(const struct ref
*ref
, void *unused
)
241 rev_list_insert_ref(NULL
, ref
->old_oid
.hash
);
244 #define INITIAL_FLUSH 16
245 #define PIPESAFE_FLUSH 32
246 #define LARGE_FLUSH 16384
248 static int next_flush(struct fetch_pack_args
*args
, int count
)
250 if (args
->stateless_rpc
) {
251 if (count
< LARGE_FLUSH
)
254 count
= count
* 11 / 10;
256 if (count
< PIPESAFE_FLUSH
)
259 count
+= PIPESAFE_FLUSH
;
264 static int find_common(struct fetch_pack_args
*args
,
265 int fd
[2], unsigned char *result_sha1
,
269 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
270 const unsigned char *sha1
;
271 unsigned in_vain
= 0;
272 int got_continue
= 0;
274 struct strbuf req_buf
= STRBUF_INIT
;
275 size_t state_len
= 0;
277 if (args
->stateless_rpc
&& multi_ack
== 1)
278 die("--stateless-rpc requires multi_ack_detailed");
280 for_each_ref(clear_marks
, NULL
);
283 for_each_ref(rev_list_insert_ref_oid
, NULL
);
284 for_each_alternate_ref(insert_one_alternate_ref
, NULL
);
287 for ( ; refs
; refs
= refs
->next
) {
288 unsigned char *remote
= refs
->old_oid
.hash
;
289 const char *remote_hex
;
293 * If that object is complete (i.e. it is an ancestor of a
294 * local ref), we tell them we have it but do not have to
295 * tell them about its ancestors, which they already know
298 * We use lookup_object here because we are only
299 * interested in the case we *know* the object is
300 * reachable and we have already scanned it.
302 if (((o
= lookup_object(remote
)) != NULL
) &&
303 (o
->flags
& COMPLETE
)) {
307 remote_hex
= sha1_to_hex(remote
);
309 struct strbuf c
= STRBUF_INIT
;
310 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
311 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
312 if (no_done
) strbuf_addstr(&c
, " no-done");
313 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
314 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
315 if (args
->use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
316 if (args
->no_progress
) strbuf_addstr(&c
, " no-progress");
317 if (args
->include_tag
) strbuf_addstr(&c
, " include-tag");
318 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
319 if (agent_supported
) strbuf_addf(&c
, " agent=%s",
320 git_user_agent_sanitized());
321 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
324 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
329 strbuf_release(&req_buf
);
334 if (is_repository_shallow())
335 write_shallow_commits(&req_buf
, 1, NULL
);
337 packet_buf_write(&req_buf
, "deepen %d", args
->depth
);
338 packet_buf_flush(&req_buf
);
339 state_len
= req_buf
.len
;
341 if (args
->depth
> 0) {
344 unsigned char sha1
[20];
346 send_request(args
, fd
[1], &req_buf
);
347 while ((line
= packet_read_line(fd
[0], NULL
))) {
348 if (skip_prefix(line
, "shallow ", &arg
)) {
349 if (get_sha1_hex(arg
, sha1
))
350 die("invalid shallow line: %s", line
);
351 register_shallow(sha1
);
354 if (skip_prefix(line
, "unshallow ", &arg
)) {
355 if (get_sha1_hex(arg
, sha1
))
356 die("invalid unshallow line: %s", line
);
357 if (!lookup_object(sha1
))
358 die("object not found: %s", line
);
359 /* make sure that it is parsed as shallow */
360 if (!parse_object(sha1
))
361 die("error in object: %s", line
);
362 if (unregister_shallow(sha1
))
363 die("no shallow found: %s", line
);
366 die("expected shallow/unshallow, got %s", line
);
368 } else if (!args
->stateless_rpc
)
369 send_request(args
, fd
[1], &req_buf
);
371 if (!args
->stateless_rpc
) {
372 /* If we aren't using the stateless-rpc interface
373 * we don't need to retain the headers.
375 strbuf_setlen(&req_buf
, 0);
381 while ((sha1
= get_rev())) {
382 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
384 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
386 if (flush_at
<= ++count
) {
389 packet_buf_flush(&req_buf
);
390 send_request(args
, fd
[1], &req_buf
);
391 strbuf_setlen(&req_buf
, state_len
);
393 flush_at
= next_flush(args
, count
);
396 * We keep one window "ahead" of the other side, and
397 * will wait for an ACK only on the next one
399 if (!args
->stateless_rpc
&& count
== INITIAL_FLUSH
)
402 consume_shallow_list(args
, fd
[0]);
404 ack
= get_ack(fd
[0], result_sha1
);
405 if (args
->verbose
&& ack
)
406 fprintf(stderr
, "got ack %d %s\n", ack
,
407 sha1_to_hex(result_sha1
));
417 struct commit
*commit
=
418 lookup_commit(result_sha1
);
420 die("invalid commit %s", sha1_to_hex(result_sha1
));
421 if (args
->stateless_rpc
423 && !(commit
->object
.flags
& COMMON
)) {
424 /* We need to replay the have for this object
425 * on the next RPC request so the peer knows
426 * it is in common with us.
428 const char *hex
= sha1_to_hex(result_sha1
);
429 packet_buf_write(&req_buf
, "have %s\n", hex
);
430 state_len
= req_buf
.len
;
432 mark_common(commit
, 0, 1);
436 if (ack
== ACK_ready
) {
437 clear_prio_queue(&rev_list
);
445 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
447 fprintf(stderr
, "giving up\n");
453 if (!got_ready
|| !no_done
) {
454 packet_buf_write(&req_buf
, "done\n");
455 send_request(args
, fd
[1], &req_buf
);
458 fprintf(stderr
, "done\n");
463 strbuf_release(&req_buf
);
465 if (!got_ready
|| !no_done
)
466 consume_shallow_list(args
, fd
[0]);
467 while (flushes
|| multi_ack
) {
468 int ack
= get_ack(fd
[0], result_sha1
);
471 fprintf(stderr
, "got ack (%d) %s\n", ack
,
472 sha1_to_hex(result_sha1
));
480 /* it is no error to fetch into a completely empty repo */
481 return count
? retval
: 0;
484 static struct commit_list
*complete
;
486 static int mark_complete(const unsigned char *sha1
)
488 struct object
*o
= parse_object(sha1
);
490 while (o
&& o
->type
== OBJ_TAG
) {
491 struct tag
*t
= (struct tag
*) o
;
493 break; /* broken repository */
494 o
->flags
|= COMPLETE
;
495 o
= parse_object(t
->tagged
->oid
.hash
);
497 if (o
&& o
->type
== OBJ_COMMIT
) {
498 struct commit
*commit
= (struct commit
*)o
;
499 if (!(commit
->object
.flags
& COMPLETE
)) {
500 commit
->object
.flags
|= COMPLETE
;
501 commit_list_insert(commit
, &complete
);
507 static int mark_complete_oid(const char *refname
, const struct object_id
*oid
,
508 int flag
, void *cb_data
)
510 return mark_complete(oid
->hash
);
513 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
514 unsigned long cutoff
)
516 while (complete
&& cutoff
<= complete
->item
->date
) {
518 fprintf(stderr
, "Marking %s as complete\n",
519 oid_to_hex(&complete
->item
->object
.oid
));
520 pop_most_recent_commit(&complete
, COMPLETE
);
524 static void filter_refs(struct fetch_pack_args
*args
,
526 struct ref
**sought
, int nr_sought
)
528 struct ref
*newlist
= NULL
;
529 struct ref
**newtail
= &newlist
;
530 struct ref
*ref
, *next
;
534 for (ref
= *refs
; ref
; ref
= next
) {
538 if (starts_with(ref
->name
, "refs/") &&
539 check_refname_format(ref
->name
, 0))
542 while (i
< nr_sought
) {
543 int cmp
= strcmp(ref
->name
, sought
[i
]->name
);
545 break; /* definitely do not have it */
547 keep
= 1; /* definitely have it */
548 sought
[i
]->matched
= 1;
554 if (!keep
&& args
->fetch_all
&&
555 (!args
->depth
|| !starts_with(ref
->name
, "refs/tags/")))
561 newtail
= &ref
->next
;
567 /* Append unmatched requests to the list */
568 if ((allow_unadvertised_object_request
&
569 (ALLOW_TIP_SHA1
| ALLOW_REACHABLE_SHA1
))) {
570 for (i
= 0; i
< nr_sought
; i
++) {
571 unsigned char sha1
[20];
576 if (get_sha1_hex(ref
->name
, sha1
) ||
577 ref
->name
[40] != '\0' ||
578 hashcmp(sha1
, ref
->old_oid
.hash
))
582 *newtail
= copy_ref(ref
);
583 newtail
= &(*newtail
)->next
;
589 static void mark_alternate_complete(const struct ref
*ref
, void *unused
)
591 mark_complete(ref
->old_oid
.hash
);
594 static int everything_local(struct fetch_pack_args
*args
,
596 struct ref
**sought
, int nr_sought
)
600 unsigned long cutoff
= 0;
602 save_commit_buffer
= 0;
604 for (ref
= *refs
; ref
; ref
= ref
->next
) {
607 if (!has_object_file(&ref
->old_oid
))
610 o
= parse_object(ref
->old_oid
.hash
);
614 /* We already have it -- which may mean that we were
615 * in sync with the other side at some time after
616 * that (it is OK if we guess wrong here).
618 if (o
->type
== OBJ_COMMIT
) {
619 struct commit
*commit
= (struct commit
*)o
;
620 if (!cutoff
|| cutoff
< commit
->date
)
621 cutoff
= commit
->date
;
626 for_each_ref(mark_complete_oid
, NULL
);
627 for_each_alternate_ref(mark_alternate_complete
, NULL
);
628 commit_list_sort_by_date(&complete
);
630 mark_recent_complete_commits(args
, cutoff
);
634 * Mark all complete remote refs as common refs.
635 * Don't mark them common yet; the server has to be told so first.
637 for (ref
= *refs
; ref
; ref
= ref
->next
) {
638 struct object
*o
= deref_tag(lookup_object(ref
->old_oid
.hash
),
641 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
644 if (!(o
->flags
& SEEN
)) {
645 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
647 mark_common((struct commit
*)o
, 1, 1);
651 filter_refs(args
, refs
, sought
, nr_sought
);
653 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
654 const unsigned char *remote
= ref
->old_oid
.hash
;
657 o
= lookup_object(remote
);
658 if (!o
|| !(o
->flags
& COMPLETE
)) {
663 "want %s (%s)\n", sha1_to_hex(remote
),
670 "already have %s (%s)\n", sha1_to_hex(remote
),
676 static int sideband_demux(int in
, int out
, void *data
)
681 ret
= recv_sideband("fetch-pack", xd
[0], out
);
686 static int get_pack(struct fetch_pack_args
*args
,
687 int xd
[2], char **pack_lockfile
)
690 int do_keep
= args
->keep_pack
;
691 const char *cmd_name
;
692 struct pack_header header
;
694 struct child_process cmd
= CHILD_PROCESS_INIT
;
697 memset(&demux
, 0, sizeof(demux
));
699 /* xd[] is talking with upload-pack; subprocess reads from
700 * xd[0], spits out band#2 to stderr, and feeds us band#1
701 * through demux->out.
703 demux
.proc
= sideband_demux
;
706 demux
.isolate_sigpipe
= 1;
707 if (start_async(&demux
))
708 die("fetch-pack: unable to fork off sideband"
714 if (!args
->keep_pack
&& unpack_limit
) {
716 if (read_pack_header(demux
.out
, &header
))
717 die("protocol error: bad pack header");
719 if (ntohl(header
.hdr_entries
) < unpack_limit
)
725 if (alternate_shallow_file
) {
726 argv_array_push(&cmd
.args
, "--shallow-file");
727 argv_array_push(&cmd
.args
, alternate_shallow_file
);
733 cmd_name
= "index-pack";
734 argv_array_push(&cmd
.args
, cmd_name
);
735 argv_array_push(&cmd
.args
, "--stdin");
736 if (!args
->quiet
&& !args
->no_progress
)
737 argv_array_push(&cmd
.args
, "-v");
738 if (args
->use_thin_pack
)
739 argv_array_push(&cmd
.args
, "--fix-thin");
740 if (args
->lock_pack
|| unpack_limit
) {
742 if (gethostname(hostname
, sizeof(hostname
)))
743 xsnprintf(hostname
, sizeof(hostname
), "localhost");
744 argv_array_pushf(&cmd
.args
,
745 "--keep=fetch-pack %"PRIuMAX
" on %s",
746 (uintmax_t)getpid(), hostname
);
748 if (args
->check_self_contained_and_connected
)
749 argv_array_push(&cmd
.args
, "--check-self-contained-and-connected");
752 cmd_name
= "unpack-objects";
753 argv_array_push(&cmd
.args
, cmd_name
);
754 if (args
->quiet
|| args
->no_progress
)
755 argv_array_push(&cmd
.args
, "-q");
756 args
->check_self_contained_and_connected
= 0;
760 argv_array_pushf(&cmd
.args
, "--pack_header=%"PRIu32
",%"PRIu32
,
761 ntohl(header
.hdr_version
),
762 ntohl(header
.hdr_entries
));
763 if (fetch_fsck_objects
>= 0
765 : transfer_fsck_objects
>= 0
766 ? transfer_fsck_objects
768 argv_array_push(&cmd
.args
, "--strict");
772 if (start_command(&cmd
))
773 die("fetch-pack: unable to fork off %s", cmd_name
);
774 if (do_keep
&& pack_lockfile
) {
775 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
780 /* Closed by start_command() */
783 ret
= finish_command(&cmd
);
784 if (!ret
|| (args
->check_self_contained_and_connected
&& ret
== 1))
785 args
->self_contained_and_connected
=
786 args
->check_self_contained_and_connected
&&
789 die("%s failed", cmd_name
);
790 if (use_sideband
&& finish_async(&demux
))
791 die("error in sideband demultiplexer");
795 static int cmp_ref_by_name(const void *a_
, const void *b_
)
797 const struct ref
*a
= *((const struct ref
**)a_
);
798 const struct ref
*b
= *((const struct ref
**)b_
);
799 return strcmp(a
->name
, b
->name
);
802 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
804 const struct ref
*orig_ref
,
805 struct ref
**sought
, int nr_sought
,
806 struct shallow_info
*si
,
807 char **pack_lockfile
)
809 struct ref
*ref
= copy_ref_list(orig_ref
);
810 unsigned char sha1
[20];
811 const char *agent_feature
;
814 sort_ref_list(&ref
, ref_compare_name
);
815 qsort(sought
, nr_sought
, sizeof(*sought
), cmp_ref_by_name
);
817 if ((args
->depth
> 0 || is_repository_shallow()) && !server_supports("shallow"))
818 die("Server does not support shallow clients");
819 if (server_supports("multi_ack_detailed")) {
821 fprintf(stderr
, "Server supports multi_ack_detailed\n");
823 if (server_supports("no-done")) {
825 fprintf(stderr
, "Server supports no-done\n");
826 if (args
->stateless_rpc
)
830 else if (server_supports("multi_ack")) {
832 fprintf(stderr
, "Server supports multi_ack\n");
835 if (server_supports("side-band-64k")) {
837 fprintf(stderr
, "Server supports side-band-64k\n");
840 else if (server_supports("side-band")) {
842 fprintf(stderr
, "Server supports side-band\n");
845 if (server_supports("allow-tip-sha1-in-want")) {
847 fprintf(stderr
, "Server supports allow-tip-sha1-in-want\n");
848 allow_unadvertised_object_request
|= ALLOW_TIP_SHA1
;
850 if (server_supports("allow-reachable-sha1-in-want")) {
852 fprintf(stderr
, "Server supports allow-reachable-sha1-in-want\n");
853 allow_unadvertised_object_request
|= ALLOW_REACHABLE_SHA1
;
855 if (!server_supports("thin-pack"))
856 args
->use_thin_pack
= 0;
857 if (!server_supports("no-progress"))
858 args
->no_progress
= 0;
859 if (!server_supports("include-tag"))
860 args
->include_tag
= 0;
861 if (server_supports("ofs-delta")) {
863 fprintf(stderr
, "Server supports ofs-delta\n");
865 prefer_ofs_delta
= 0;
867 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
869 if (args
->verbose
&& agent_len
)
870 fprintf(stderr
, "Server version is %.*s\n",
871 agent_len
, agent_feature
);
874 if (everything_local(args
, &ref
, sought
, nr_sought
)) {
878 if (find_common(args
, fd
, sha1
, ref
) < 0)
879 if (!args
->keep_pack
)
880 /* When cloning, it is not unusual to have
883 warning("no common commits");
885 if (args
->stateless_rpc
)
888 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
890 else if (si
->nr_ours
|| si
->nr_theirs
)
891 alternate_shallow_file
= setup_temporary_shallow(si
->shallow
);
893 alternate_shallow_file
= NULL
;
894 if (get_pack(args
, fd
, pack_lockfile
))
895 die("git fetch-pack: fetch failed.");
901 static void fetch_pack_config(void)
903 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit
);
904 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit
);
905 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta
);
906 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects
);
907 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects
);
909 git_config(git_default_config
, NULL
);
912 static void fetch_pack_setup(void)
914 static int did_setup
;
918 if (0 <= transfer_unpack_limit
)
919 unpack_limit
= transfer_unpack_limit
;
920 else if (0 <= fetch_unpack_limit
)
921 unpack_limit
= fetch_unpack_limit
;
925 static int remove_duplicates_in_refs(struct ref
**ref
, int nr
)
927 struct string_list names
= STRING_LIST_INIT_NODUP
;
930 for (src
= dst
= 0; src
< nr
; src
++) {
931 struct string_list_item
*item
;
932 item
= string_list_insert(&names
, ref
[src
]->name
);
934 continue; /* already have it */
935 item
->util
= ref
[src
];
940 for (src
= dst
; src
< nr
; src
++)
942 string_list_clear(&names
, 0);
946 static void update_shallow(struct fetch_pack_args
*args
,
947 struct ref
**sought
, int nr_sought
,
948 struct shallow_info
*si
)
950 struct sha1_array ref
= SHA1_ARRAY_INIT
;
954 if (args
->depth
> 0 && alternate_shallow_file
) {
955 if (*alternate_shallow_file
== '\0') { /* --unshallow */
956 unlink_or_warn(git_path_shallow());
957 rollback_lock_file(&shallow_lock
);
959 commit_lock_file(&shallow_lock
);
963 if (!si
->shallow
|| !si
->shallow
->nr
)
968 * remote is shallow, but this is a clone, there are
969 * no objects in repo to worry about. Accept any
970 * shallow points that exist in the pack (iow in repo
971 * after get_pack() and reprepare_packed_git())
973 struct sha1_array extra
= SHA1_ARRAY_INIT
;
974 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
975 for (i
= 0; i
< si
->shallow
->nr
; i
++)
976 if (has_sha1_file(sha1
[i
]))
977 sha1_array_append(&extra
, sha1
[i
]);
979 setup_alternate_shallow(&shallow_lock
,
980 &alternate_shallow_file
,
982 commit_lock_file(&shallow_lock
);
984 sha1_array_clear(&extra
);
988 if (!si
->nr_ours
&& !si
->nr_theirs
)
991 remove_nonexistent_theirs_shallow(si
);
992 if (!si
->nr_ours
&& !si
->nr_theirs
)
994 for (i
= 0; i
< nr_sought
; i
++)
995 sha1_array_append(&ref
, sought
[i
]->old_oid
.hash
);
998 if (args
->update_shallow
) {
1000 * remote is also shallow, .git/shallow may be updated
1001 * so all refs can be accepted. Make sure we only add
1002 * shallow roots that are actually reachable from new
1005 struct sha1_array extra
= SHA1_ARRAY_INIT
;
1006 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
1007 assign_shallow_commits_to_refs(si
, NULL
, NULL
);
1008 if (!si
->nr_ours
&& !si
->nr_theirs
) {
1009 sha1_array_clear(&ref
);
1012 for (i
= 0; i
< si
->nr_ours
; i
++)
1013 sha1_array_append(&extra
, sha1
[si
->ours
[i
]]);
1014 for (i
= 0; i
< si
->nr_theirs
; i
++)
1015 sha1_array_append(&extra
, sha1
[si
->theirs
[i
]]);
1016 setup_alternate_shallow(&shallow_lock
,
1017 &alternate_shallow_file
,
1019 commit_lock_file(&shallow_lock
);
1020 sha1_array_clear(&extra
);
1021 sha1_array_clear(&ref
);
1026 * remote is also shallow, check what ref is safe to update
1027 * without updating .git/shallow
1029 status
= xcalloc(nr_sought
, sizeof(*status
));
1030 assign_shallow_commits_to_refs(si
, NULL
, status
);
1031 if (si
->nr_ours
|| si
->nr_theirs
) {
1032 for (i
= 0; i
< nr_sought
; i
++)
1034 sought
[i
]->status
= REF_STATUS_REJECT_SHALLOW
;
1037 sha1_array_clear(&ref
);
1040 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
1041 int fd
[], struct child_process
*conn
,
1042 const struct ref
*ref
,
1044 struct ref
**sought
, int nr_sought
,
1045 struct sha1_array
*shallow
,
1046 char **pack_lockfile
)
1048 struct ref
*ref_cpy
;
1049 struct shallow_info si
;
1053 nr_sought
= remove_duplicates_in_refs(sought
, nr_sought
);
1056 packet_flush(fd
[1]);
1057 die("no matching remote head");
1059 prepare_shallow_info(&si
, shallow
);
1060 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, nr_sought
,
1061 &si
, pack_lockfile
);
1062 reprepare_packed_git();
1063 update_shallow(args
, sought
, nr_sought
, &si
);
1064 clear_shallow_info(&si
);