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 * Reset in_vain because an ack
433 * for this commit has not been
437 } else if (!args
->stateless_rpc
438 || ack
!= ACK_common
)
440 mark_common(commit
, 0, 1);
443 if (ack
== ACK_ready
) {
444 clear_prio_queue(&rev_list
);
452 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
454 fprintf(stderr
, "giving up\n");
460 if (!got_ready
|| !no_done
) {
461 packet_buf_write(&req_buf
, "done\n");
462 send_request(args
, fd
[1], &req_buf
);
465 fprintf(stderr
, "done\n");
470 strbuf_release(&req_buf
);
472 if (!got_ready
|| !no_done
)
473 consume_shallow_list(args
, fd
[0]);
474 while (flushes
|| multi_ack
) {
475 int ack
= get_ack(fd
[0], result_sha1
);
478 fprintf(stderr
, "got ack (%d) %s\n", ack
,
479 sha1_to_hex(result_sha1
));
487 /* it is no error to fetch into a completely empty repo */
488 return count
? retval
: 0;
491 static struct commit_list
*complete
;
493 static int mark_complete(const unsigned char *sha1
)
495 struct object
*o
= parse_object(sha1
);
497 while (o
&& o
->type
== OBJ_TAG
) {
498 struct tag
*t
= (struct tag
*) o
;
500 break; /* broken repository */
501 o
->flags
|= COMPLETE
;
502 o
= parse_object(t
->tagged
->oid
.hash
);
504 if (o
&& o
->type
== OBJ_COMMIT
) {
505 struct commit
*commit
= (struct commit
*)o
;
506 if (!(commit
->object
.flags
& COMPLETE
)) {
507 commit
->object
.flags
|= COMPLETE
;
508 commit_list_insert(commit
, &complete
);
514 static int mark_complete_oid(const char *refname
, const struct object_id
*oid
,
515 int flag
, void *cb_data
)
517 return mark_complete(oid
->hash
);
520 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
521 unsigned long cutoff
)
523 while (complete
&& cutoff
<= complete
->item
->date
) {
525 fprintf(stderr
, "Marking %s as complete\n",
526 oid_to_hex(&complete
->item
->object
.oid
));
527 pop_most_recent_commit(&complete
, COMPLETE
);
531 static void filter_refs(struct fetch_pack_args
*args
,
533 struct ref
**sought
, int nr_sought
)
535 struct ref
*newlist
= NULL
;
536 struct ref
**newtail
= &newlist
;
537 struct ref
*ref
, *next
;
541 for (ref
= *refs
; ref
; ref
= next
) {
545 if (starts_with(ref
->name
, "refs/") &&
546 check_refname_format(ref
->name
, 0))
549 while (i
< nr_sought
) {
550 int cmp
= strcmp(ref
->name
, sought
[i
]->name
);
552 break; /* definitely do not have it */
554 keep
= 1; /* definitely have it */
555 sought
[i
]->matched
= 1;
561 if (!keep
&& args
->fetch_all
&&
562 (!args
->depth
|| !starts_with(ref
->name
, "refs/tags/")))
568 newtail
= &ref
->next
;
574 /* Append unmatched requests to the list */
575 if ((allow_unadvertised_object_request
&
576 (ALLOW_TIP_SHA1
| ALLOW_REACHABLE_SHA1
))) {
577 for (i
= 0; i
< nr_sought
; i
++) {
578 unsigned char sha1
[20];
583 if (get_sha1_hex(ref
->name
, sha1
) ||
584 ref
->name
[40] != '\0' ||
585 hashcmp(sha1
, ref
->old_oid
.hash
))
589 *newtail
= copy_ref(ref
);
590 newtail
= &(*newtail
)->next
;
596 static void mark_alternate_complete(const struct ref
*ref
, void *unused
)
598 mark_complete(ref
->old_oid
.hash
);
601 static int everything_local(struct fetch_pack_args
*args
,
603 struct ref
**sought
, int nr_sought
)
607 unsigned long cutoff
= 0;
609 save_commit_buffer
= 0;
611 for (ref
= *refs
; ref
; ref
= ref
->next
) {
614 if (!has_object_file(&ref
->old_oid
))
617 o
= parse_object(ref
->old_oid
.hash
);
621 /* We already have it -- which may mean that we were
622 * in sync with the other side at some time after
623 * that (it is OK if we guess wrong here).
625 if (o
->type
== OBJ_COMMIT
) {
626 struct commit
*commit
= (struct commit
*)o
;
627 if (!cutoff
|| cutoff
< commit
->date
)
628 cutoff
= commit
->date
;
633 for_each_ref(mark_complete_oid
, NULL
);
634 for_each_alternate_ref(mark_alternate_complete
, NULL
);
635 commit_list_sort_by_date(&complete
);
637 mark_recent_complete_commits(args
, cutoff
);
641 * Mark all complete remote refs as common refs.
642 * Don't mark them common yet; the server has to be told so first.
644 for (ref
= *refs
; ref
; ref
= ref
->next
) {
645 struct object
*o
= deref_tag(lookup_object(ref
->old_oid
.hash
),
648 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
651 if (!(o
->flags
& SEEN
)) {
652 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
654 mark_common((struct commit
*)o
, 1, 1);
658 filter_refs(args
, refs
, sought
, nr_sought
);
660 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
661 const unsigned char *remote
= ref
->old_oid
.hash
;
664 o
= lookup_object(remote
);
665 if (!o
|| !(o
->flags
& COMPLETE
)) {
670 "want %s (%s)\n", sha1_to_hex(remote
),
677 "already have %s (%s)\n", sha1_to_hex(remote
),
683 static int sideband_demux(int in
, int out
, void *data
)
688 ret
= recv_sideband("fetch-pack", xd
[0], out
);
693 static int get_pack(struct fetch_pack_args
*args
,
694 int xd
[2], char **pack_lockfile
)
697 int do_keep
= args
->keep_pack
;
698 const char *cmd_name
;
699 struct pack_header header
;
701 struct child_process cmd
= CHILD_PROCESS_INIT
;
704 memset(&demux
, 0, sizeof(demux
));
706 /* xd[] is talking with upload-pack; subprocess reads from
707 * xd[0], spits out band#2 to stderr, and feeds us band#1
708 * through demux->out.
710 demux
.proc
= sideband_demux
;
713 demux
.isolate_sigpipe
= 1;
714 if (start_async(&demux
))
715 die("fetch-pack: unable to fork off sideband"
721 if (!args
->keep_pack
&& unpack_limit
) {
723 if (read_pack_header(demux
.out
, &header
))
724 die("protocol error: bad pack header");
726 if (ntohl(header
.hdr_entries
) < unpack_limit
)
732 if (alternate_shallow_file
) {
733 argv_array_push(&cmd
.args
, "--shallow-file");
734 argv_array_push(&cmd
.args
, alternate_shallow_file
);
740 cmd_name
= "index-pack";
741 argv_array_push(&cmd
.args
, cmd_name
);
742 argv_array_push(&cmd
.args
, "--stdin");
743 if (!args
->quiet
&& !args
->no_progress
)
744 argv_array_push(&cmd
.args
, "-v");
745 if (args
->use_thin_pack
)
746 argv_array_push(&cmd
.args
, "--fix-thin");
747 if (args
->lock_pack
|| unpack_limit
) {
749 if (gethostname(hostname
, sizeof(hostname
)))
750 xsnprintf(hostname
, sizeof(hostname
), "localhost");
751 argv_array_pushf(&cmd
.args
,
752 "--keep=fetch-pack %"PRIuMAX
" on %s",
753 (uintmax_t)getpid(), hostname
);
755 if (args
->check_self_contained_and_connected
)
756 argv_array_push(&cmd
.args
, "--check-self-contained-and-connected");
759 cmd_name
= "unpack-objects";
760 argv_array_push(&cmd
.args
, cmd_name
);
761 if (args
->quiet
|| args
->no_progress
)
762 argv_array_push(&cmd
.args
, "-q");
763 args
->check_self_contained_and_connected
= 0;
767 argv_array_pushf(&cmd
.args
, "--pack_header=%"PRIu32
",%"PRIu32
,
768 ntohl(header
.hdr_version
),
769 ntohl(header
.hdr_entries
));
770 if (fetch_fsck_objects
>= 0
772 : transfer_fsck_objects
>= 0
773 ? transfer_fsck_objects
775 argv_array_push(&cmd
.args
, "--strict");
779 if (start_command(&cmd
))
780 die("fetch-pack: unable to fork off %s", cmd_name
);
781 if (do_keep
&& pack_lockfile
) {
782 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
787 /* Closed by start_command() */
790 ret
= finish_command(&cmd
);
791 if (!ret
|| (args
->check_self_contained_and_connected
&& ret
== 1))
792 args
->self_contained_and_connected
=
793 args
->check_self_contained_and_connected
&&
796 die("%s failed", cmd_name
);
797 if (use_sideband
&& finish_async(&demux
))
798 die("error in sideband demultiplexer");
802 static int cmp_ref_by_name(const void *a_
, const void *b_
)
804 const struct ref
*a
= *((const struct ref
**)a_
);
805 const struct ref
*b
= *((const struct ref
**)b_
);
806 return strcmp(a
->name
, b
->name
);
809 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
811 const struct ref
*orig_ref
,
812 struct ref
**sought
, int nr_sought
,
813 struct shallow_info
*si
,
814 char **pack_lockfile
)
816 struct ref
*ref
= copy_ref_list(orig_ref
);
817 unsigned char sha1
[20];
818 const char *agent_feature
;
821 sort_ref_list(&ref
, ref_compare_name
);
822 qsort(sought
, nr_sought
, sizeof(*sought
), cmp_ref_by_name
);
824 if ((args
->depth
> 0 || is_repository_shallow()) && !server_supports("shallow"))
825 die("Server does not support shallow clients");
826 if (server_supports("multi_ack_detailed")) {
828 fprintf(stderr
, "Server supports multi_ack_detailed\n");
830 if (server_supports("no-done")) {
832 fprintf(stderr
, "Server supports no-done\n");
833 if (args
->stateless_rpc
)
837 else if (server_supports("multi_ack")) {
839 fprintf(stderr
, "Server supports multi_ack\n");
842 if (server_supports("side-band-64k")) {
844 fprintf(stderr
, "Server supports side-band-64k\n");
847 else if (server_supports("side-band")) {
849 fprintf(stderr
, "Server supports side-band\n");
852 if (server_supports("allow-tip-sha1-in-want")) {
854 fprintf(stderr
, "Server supports allow-tip-sha1-in-want\n");
855 allow_unadvertised_object_request
|= ALLOW_TIP_SHA1
;
857 if (server_supports("allow-reachable-sha1-in-want")) {
859 fprintf(stderr
, "Server supports allow-reachable-sha1-in-want\n");
860 allow_unadvertised_object_request
|= ALLOW_REACHABLE_SHA1
;
862 if (!server_supports("thin-pack"))
863 args
->use_thin_pack
= 0;
864 if (!server_supports("no-progress"))
865 args
->no_progress
= 0;
866 if (!server_supports("include-tag"))
867 args
->include_tag
= 0;
868 if (server_supports("ofs-delta")) {
870 fprintf(stderr
, "Server supports ofs-delta\n");
872 prefer_ofs_delta
= 0;
874 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
876 if (args
->verbose
&& agent_len
)
877 fprintf(stderr
, "Server version is %.*s\n",
878 agent_len
, agent_feature
);
881 if (everything_local(args
, &ref
, sought
, nr_sought
)) {
885 if (find_common(args
, fd
, sha1
, ref
) < 0)
886 if (!args
->keep_pack
)
887 /* When cloning, it is not unusual to have
890 warning("no common commits");
892 if (args
->stateless_rpc
)
895 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
897 else if (si
->nr_ours
|| si
->nr_theirs
)
898 alternate_shallow_file
= setup_temporary_shallow(si
->shallow
);
900 alternate_shallow_file
= NULL
;
901 if (get_pack(args
, fd
, pack_lockfile
))
902 die("git fetch-pack: fetch failed.");
908 static void fetch_pack_config(void)
910 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit
);
911 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit
);
912 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta
);
913 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects
);
914 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects
);
916 git_config(git_default_config
, NULL
);
919 static void fetch_pack_setup(void)
921 static int did_setup
;
925 if (0 <= transfer_unpack_limit
)
926 unpack_limit
= transfer_unpack_limit
;
927 else if (0 <= fetch_unpack_limit
)
928 unpack_limit
= fetch_unpack_limit
;
932 static int remove_duplicates_in_refs(struct ref
**ref
, int nr
)
934 struct string_list names
= STRING_LIST_INIT_NODUP
;
937 for (src
= dst
= 0; src
< nr
; src
++) {
938 struct string_list_item
*item
;
939 item
= string_list_insert(&names
, ref
[src
]->name
);
941 continue; /* already have it */
942 item
->util
= ref
[src
];
947 for (src
= dst
; src
< nr
; src
++)
949 string_list_clear(&names
, 0);
953 static void update_shallow(struct fetch_pack_args
*args
,
954 struct ref
**sought
, int nr_sought
,
955 struct shallow_info
*si
)
957 struct sha1_array ref
= SHA1_ARRAY_INIT
;
961 if (args
->depth
> 0 && alternate_shallow_file
) {
962 if (*alternate_shallow_file
== '\0') { /* --unshallow */
963 unlink_or_warn(git_path_shallow());
964 rollback_lock_file(&shallow_lock
);
966 commit_lock_file(&shallow_lock
);
970 if (!si
->shallow
|| !si
->shallow
->nr
)
975 * remote is shallow, but this is a clone, there are
976 * no objects in repo to worry about. Accept any
977 * shallow points that exist in the pack (iow in repo
978 * after get_pack() and reprepare_packed_git())
980 struct sha1_array extra
= SHA1_ARRAY_INIT
;
981 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
982 for (i
= 0; i
< si
->shallow
->nr
; i
++)
983 if (has_sha1_file(sha1
[i
]))
984 sha1_array_append(&extra
, sha1
[i
]);
986 setup_alternate_shallow(&shallow_lock
,
987 &alternate_shallow_file
,
989 commit_lock_file(&shallow_lock
);
991 sha1_array_clear(&extra
);
995 if (!si
->nr_ours
&& !si
->nr_theirs
)
998 remove_nonexistent_theirs_shallow(si
);
999 if (!si
->nr_ours
&& !si
->nr_theirs
)
1001 for (i
= 0; i
< nr_sought
; i
++)
1002 sha1_array_append(&ref
, sought
[i
]->old_oid
.hash
);
1005 if (args
->update_shallow
) {
1007 * remote is also shallow, .git/shallow may be updated
1008 * so all refs can be accepted. Make sure we only add
1009 * shallow roots that are actually reachable from new
1012 struct sha1_array extra
= SHA1_ARRAY_INIT
;
1013 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
1014 assign_shallow_commits_to_refs(si
, NULL
, NULL
);
1015 if (!si
->nr_ours
&& !si
->nr_theirs
) {
1016 sha1_array_clear(&ref
);
1019 for (i
= 0; i
< si
->nr_ours
; i
++)
1020 sha1_array_append(&extra
, sha1
[si
->ours
[i
]]);
1021 for (i
= 0; i
< si
->nr_theirs
; i
++)
1022 sha1_array_append(&extra
, sha1
[si
->theirs
[i
]]);
1023 setup_alternate_shallow(&shallow_lock
,
1024 &alternate_shallow_file
,
1026 commit_lock_file(&shallow_lock
);
1027 sha1_array_clear(&extra
);
1028 sha1_array_clear(&ref
);
1033 * remote is also shallow, check what ref is safe to update
1034 * without updating .git/shallow
1036 status
= xcalloc(nr_sought
, sizeof(*status
));
1037 assign_shallow_commits_to_refs(si
, NULL
, status
);
1038 if (si
->nr_ours
|| si
->nr_theirs
) {
1039 for (i
= 0; i
< nr_sought
; i
++)
1041 sought
[i
]->status
= REF_STATUS_REJECT_SHALLOW
;
1044 sha1_array_clear(&ref
);
1047 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
1048 int fd
[], struct child_process
*conn
,
1049 const struct ref
*ref
,
1051 struct ref
**sought
, int nr_sought
,
1052 struct sha1_array
*shallow
,
1053 char **pack_lockfile
)
1055 struct ref
*ref_cpy
;
1056 struct shallow_info si
;
1060 nr_sought
= remove_duplicates_in_refs(sought
, nr_sought
);
1063 packet_flush(fd
[1]);
1064 die("no matching remote head");
1066 prepare_shallow_info(&si
, shallow
);
1067 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, nr_sought
,
1068 &si
, pack_lockfile
);
1069 reprepare_packed_git();
1070 update_shallow(args
, sought
, nr_sought
, &si
);
1071 clear_shallow_info(&si
);