10 #include "fetch-pack.h"
12 #include "run-command.h"
14 #include "transport.h"
16 #include "prio-queue.h"
17 #include "sha1-array.h"
20 static int transfer_unpack_limit
= -1;
21 static int fetch_unpack_limit
= -1;
22 static int unpack_limit
= 100;
23 static int prefer_ofs_delta
= 1;
25 static int fetch_fsck_objects
= -1;
26 static int transfer_fsck_objects
= -1;
27 static int agent_supported
;
28 static struct lock_file shallow_lock
;
29 static const char *alternate_shallow_file
;
31 /* Remember to update object flag allocation in object.h */
32 #define COMPLETE (1U << 0)
33 #define COMMON (1U << 1)
34 #define COMMON_REF (1U << 2)
35 #define SEEN (1U << 3)
36 #define POPPED (1U << 4)
41 * After sending this many "have"s if we do not get any new ACK , we
42 * give up traversing our history.
44 #define MAX_IN_VAIN 256
46 static struct prio_queue rev_list
= { compare_commits_by_commit_date
};
47 static int non_common_revs
, multi_ack
, use_sideband
;
48 /* Allow specifying sha1 if it is a ref tip. */
49 #define ALLOW_TIP_SHA1 01
50 /* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
51 #define ALLOW_REACHABLE_SHA1 02
52 static unsigned int allow_unadvertised_object_request
;
54 static void rev_list_push(struct commit
*commit
, int mark
)
56 if (!(commit
->object
.flags
& mark
)) {
57 commit
->object
.flags
|= mark
;
59 if (parse_commit(commit
))
62 prio_queue_put(&rev_list
, commit
);
64 if (!(commit
->object
.flags
& COMMON
))
69 static int rev_list_insert_ref(const char *refname
, const unsigned char *sha1
)
71 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
73 if (o
&& o
->type
== OBJ_COMMIT
)
74 rev_list_push((struct commit
*)o
, SEEN
);
79 static int rev_list_insert_ref_oid(const char *refname
, const struct object_id
*oid
,
80 int flag
, void *cb_data
)
82 return rev_list_insert_ref(refname
, oid
->hash
);
85 static int clear_marks(const char *refname
, const struct object_id
*oid
,
86 int flag
, void *cb_data
)
88 struct object
*o
= deref_tag(parse_object(oid
->hash
), refname
, 0);
90 if (o
&& o
->type
== OBJ_COMMIT
)
91 clear_commit_marks((struct commit
*)o
,
92 COMMON
| COMMON_REF
| SEEN
| POPPED
);
97 This function marks a rev and its ancestors as common.
98 In some cases, it is desirable to mark only the ancestors (for example
99 when only the server does not yet know that they are common).
102 static void mark_common(struct commit
*commit
,
103 int ancestors_only
, int dont_parse
)
105 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
106 struct object
*o
= (struct object
*)commit
;
111 if (!(o
->flags
& SEEN
))
112 rev_list_push(commit
, SEEN
);
114 struct commit_list
*parents
;
116 if (!ancestors_only
&& !(o
->flags
& POPPED
))
118 if (!o
->parsed
&& !dont_parse
)
119 if (parse_commit(commit
))
122 for (parents
= commit
->parents
;
124 parents
= parents
->next
)
125 mark_common(parents
->item
, 0, dont_parse
);
131 Get the next rev to send, ignoring the common.
134 static const unsigned char *get_rev(void)
136 struct commit
*commit
= NULL
;
138 while (commit
== NULL
) {
140 struct commit_list
*parents
;
142 if (rev_list
.nr
== 0 || non_common_revs
== 0)
145 commit
= prio_queue_get(&rev_list
);
146 parse_commit(commit
);
147 parents
= commit
->parents
;
149 commit
->object
.flags
|= POPPED
;
150 if (!(commit
->object
.flags
& COMMON
))
153 if (commit
->object
.flags
& COMMON
) {
154 /* do not send "have", and ignore ancestors */
156 mark
= COMMON
| SEEN
;
157 } else if (commit
->object
.flags
& COMMON_REF
)
158 /* send "have", and ignore ancestors */
159 mark
= COMMON
| SEEN
;
161 /* send "have", also for its ancestors */
165 if (!(parents
->item
->object
.flags
& SEEN
))
166 rev_list_push(parents
->item
, mark
);
168 mark_common(parents
->item
, 1, 0);
169 parents
= parents
->next
;
173 return commit
->object
.oid
.hash
;
184 static void consume_shallow_list(struct fetch_pack_args
*args
, int fd
)
186 if (args
->stateless_rpc
&& args
->depth
> 0) {
187 /* If we sent a depth we will get back "duplicate"
188 * shallow and unshallow commands every time there
189 * is a block of have lines exchanged.
192 while ((line
= packet_read_line(fd
, NULL
))) {
193 if (starts_with(line
, "shallow "))
195 if (starts_with(line
, "unshallow "))
197 die("git fetch-pack: expected shallow list");
202 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
205 char *line
= packet_read_line(fd
, &len
);
209 die("git fetch-pack: expected ACK/NAK, got EOF");
210 if (!strcmp(line
, "NAK"))
212 if (skip_prefix(line
, "ACK ", &arg
)) {
213 if (!get_sha1_hex(arg
, result_sha1
)) {
218 if (strstr(arg
, "continue"))
220 if (strstr(arg
, "common"))
222 if (strstr(arg
, "ready"))
227 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
230 static void send_request(struct fetch_pack_args
*args
,
231 int fd
, struct strbuf
*buf
)
233 if (args
->stateless_rpc
) {
234 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
237 write_or_die(fd
, buf
->buf
, buf
->len
);
240 static void insert_one_alternate_ref(const struct ref
*ref
, void *unused
)
242 rev_list_insert_ref(NULL
, ref
->old_oid
.hash
);
245 #define INITIAL_FLUSH 16
246 #define PIPESAFE_FLUSH 32
247 #define LARGE_FLUSH 1024
249 static int next_flush(struct fetch_pack_args
*args
, int count
)
251 int flush_limit
= args
->stateless_rpc
? LARGE_FLUSH
: PIPESAFE_FLUSH
;
253 if (count
< flush_limit
)
256 count
+= flush_limit
;
260 static int find_common(struct fetch_pack_args
*args
,
261 int fd
[2], unsigned char *result_sha1
,
265 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
266 const unsigned char *sha1
;
267 unsigned in_vain
= 0;
268 int got_continue
= 0;
270 struct strbuf req_buf
= STRBUF_INIT
;
271 size_t state_len
= 0;
273 if (args
->stateless_rpc
&& multi_ack
== 1)
274 die("--stateless-rpc requires multi_ack_detailed");
276 for_each_ref(clear_marks
, NULL
);
279 for_each_ref(rev_list_insert_ref_oid
, NULL
);
280 for_each_alternate_ref(insert_one_alternate_ref
, NULL
);
283 for ( ; refs
; refs
= refs
->next
) {
284 unsigned char *remote
= refs
->old_oid
.hash
;
285 const char *remote_hex
;
289 * If that object is complete (i.e. it is an ancestor of a
290 * local ref), we tell them we have it but do not have to
291 * tell them about its ancestors, which they already know
294 * We use lookup_object here because we are only
295 * interested in the case we *know* the object is
296 * reachable and we have already scanned it.
298 if (((o
= lookup_object(remote
)) != NULL
) &&
299 (o
->flags
& COMPLETE
)) {
303 remote_hex
= sha1_to_hex(remote
);
305 struct strbuf c
= STRBUF_INIT
;
306 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
307 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
308 if (no_done
) strbuf_addstr(&c
, " no-done");
309 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
310 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
311 if (args
->use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
312 if (args
->no_progress
) strbuf_addstr(&c
, " no-progress");
313 if (args
->include_tag
) strbuf_addstr(&c
, " include-tag");
314 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
315 if (agent_supported
) strbuf_addf(&c
, " agent=%s",
316 git_user_agent_sanitized());
317 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
320 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
325 strbuf_release(&req_buf
);
330 if (is_repository_shallow())
331 write_shallow_commits(&req_buf
, 1, NULL
);
333 packet_buf_write(&req_buf
, "deepen %d", args
->depth
);
334 packet_buf_flush(&req_buf
);
335 state_len
= req_buf
.len
;
337 if (args
->depth
> 0) {
340 unsigned char sha1
[20];
342 send_request(args
, fd
[1], &req_buf
);
343 while ((line
= packet_read_line(fd
[0], NULL
))) {
344 if (skip_prefix(line
, "shallow ", &arg
)) {
345 if (get_sha1_hex(arg
, sha1
))
346 die("invalid shallow line: %s", line
);
347 register_shallow(sha1
);
350 if (skip_prefix(line
, "unshallow ", &arg
)) {
351 if (get_sha1_hex(arg
, sha1
))
352 die("invalid unshallow line: %s", line
);
353 if (!lookup_object(sha1
))
354 die("object not found: %s", line
);
355 /* make sure that it is parsed as shallow */
356 if (!parse_object(sha1
))
357 die("error in object: %s", line
);
358 if (unregister_shallow(sha1
))
359 die("no shallow found: %s", line
);
362 die("expected shallow/unshallow, got %s", line
);
364 } else if (!args
->stateless_rpc
)
365 send_request(args
, fd
[1], &req_buf
);
367 if (!args
->stateless_rpc
) {
368 /* If we aren't using the stateless-rpc interface
369 * we don't need to retain the headers.
371 strbuf_setlen(&req_buf
, 0);
377 while ((sha1
= get_rev())) {
378 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
380 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
382 if (flush_at
<= ++count
) {
385 packet_buf_flush(&req_buf
);
386 send_request(args
, fd
[1], &req_buf
);
387 strbuf_setlen(&req_buf
, state_len
);
389 flush_at
= next_flush(args
, count
);
392 * We keep one window "ahead" of the other side, and
393 * will wait for an ACK only on the next one
395 if (!args
->stateless_rpc
&& count
== INITIAL_FLUSH
)
398 consume_shallow_list(args
, fd
[0]);
400 ack
= get_ack(fd
[0], result_sha1
);
401 if (args
->verbose
&& ack
)
402 fprintf(stderr
, "got ack %d %s\n", ack
,
403 sha1_to_hex(result_sha1
));
413 struct commit
*commit
=
414 lookup_commit(result_sha1
);
416 die("invalid commit %s", sha1_to_hex(result_sha1
));
417 if (args
->stateless_rpc
419 && !(commit
->object
.flags
& COMMON
)) {
420 /* We need to replay the have for this object
421 * on the next RPC request so the peer knows
422 * it is in common with us.
424 const char *hex
= sha1_to_hex(result_sha1
);
425 packet_buf_write(&req_buf
, "have %s\n", hex
);
426 state_len
= req_buf
.len
;
428 mark_common(commit
, 0, 1);
432 if (ack
== ACK_ready
) {
433 clear_prio_queue(&rev_list
);
441 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
443 fprintf(stderr
, "giving up\n");
449 if (!got_ready
|| !no_done
) {
450 packet_buf_write(&req_buf
, "done\n");
451 send_request(args
, fd
[1], &req_buf
);
454 fprintf(stderr
, "done\n");
459 strbuf_release(&req_buf
);
461 if (!got_ready
|| !no_done
)
462 consume_shallow_list(args
, fd
[0]);
463 while (flushes
|| multi_ack
) {
464 int ack
= get_ack(fd
[0], result_sha1
);
467 fprintf(stderr
, "got ack (%d) %s\n", ack
,
468 sha1_to_hex(result_sha1
));
476 /* it is no error to fetch into a completely empty repo */
477 return count
? retval
: 0;
480 static struct commit_list
*complete
;
482 static int mark_complete(const unsigned char *sha1
)
484 struct object
*o
= parse_object(sha1
);
486 while (o
&& o
->type
== OBJ_TAG
) {
487 struct tag
*t
= (struct tag
*) o
;
489 break; /* broken repository */
490 o
->flags
|= COMPLETE
;
491 o
= parse_object(t
->tagged
->oid
.hash
);
493 if (o
&& o
->type
== OBJ_COMMIT
) {
494 struct commit
*commit
= (struct commit
*)o
;
495 if (!(commit
->object
.flags
& COMPLETE
)) {
496 commit
->object
.flags
|= COMPLETE
;
497 commit_list_insert(commit
, &complete
);
503 static int mark_complete_oid(const char *refname
, const struct object_id
*oid
,
504 int flag
, void *cb_data
)
506 return mark_complete(oid
->hash
);
509 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
510 unsigned long cutoff
)
512 while (complete
&& cutoff
<= complete
->item
->date
) {
514 fprintf(stderr
, "Marking %s as complete\n",
515 oid_to_hex(&complete
->item
->object
.oid
));
516 pop_most_recent_commit(&complete
, COMPLETE
);
520 static void filter_refs(struct fetch_pack_args
*args
,
522 struct ref
**sought
, int nr_sought
)
524 struct ref
*newlist
= NULL
;
525 struct ref
**newtail
= &newlist
;
526 struct ref
*ref
, *next
;
530 for (ref
= *refs
; ref
; ref
= next
) {
534 if (starts_with(ref
->name
, "refs/") &&
535 check_refname_format(ref
->name
, 0))
538 while (i
< nr_sought
) {
539 int cmp
= strcmp(ref
->name
, sought
[i
]->name
);
541 break; /* definitely do not have it */
543 keep
= 1; /* definitely have it */
544 sought
[i
]->matched
= 1;
550 if (!keep
&& args
->fetch_all
&&
551 (!args
->depth
|| !starts_with(ref
->name
, "refs/tags/")))
557 newtail
= &ref
->next
;
563 /* Append unmatched requests to the list */
564 if ((allow_unadvertised_object_request
&
565 (ALLOW_TIP_SHA1
| ALLOW_REACHABLE_SHA1
))) {
566 for (i
= 0; i
< nr_sought
; i
++) {
567 unsigned char sha1
[20];
572 if (get_sha1_hex(ref
->name
, sha1
) ||
573 ref
->name
[40] != '\0' ||
574 hashcmp(sha1
, ref
->old_oid
.hash
))
578 *newtail
= copy_ref(ref
);
579 newtail
= &(*newtail
)->next
;
585 static void mark_alternate_complete(const struct ref
*ref
, void *unused
)
587 mark_complete(ref
->old_oid
.hash
);
590 static int everything_local(struct fetch_pack_args
*args
,
592 struct ref
**sought
, int nr_sought
)
596 unsigned long cutoff
= 0;
598 save_commit_buffer
= 0;
600 for (ref
= *refs
; ref
; ref
= ref
->next
) {
603 if (!has_object_file(&ref
->old_oid
))
606 o
= parse_object(ref
->old_oid
.hash
);
610 /* We already have it -- which may mean that we were
611 * in sync with the other side at some time after
612 * that (it is OK if we guess wrong here).
614 if (o
->type
== OBJ_COMMIT
) {
615 struct commit
*commit
= (struct commit
*)o
;
616 if (!cutoff
|| cutoff
< commit
->date
)
617 cutoff
= commit
->date
;
622 for_each_ref(mark_complete_oid
, NULL
);
623 for_each_alternate_ref(mark_alternate_complete
, NULL
);
624 commit_list_sort_by_date(&complete
);
626 mark_recent_complete_commits(args
, cutoff
);
630 * Mark all complete remote refs as common refs.
631 * Don't mark them common yet; the server has to be told so first.
633 for (ref
= *refs
; ref
; ref
= ref
->next
) {
634 struct object
*o
= deref_tag(lookup_object(ref
->old_oid
.hash
),
637 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
640 if (!(o
->flags
& SEEN
)) {
641 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
643 mark_common((struct commit
*)o
, 1, 1);
647 filter_refs(args
, refs
, sought
, nr_sought
);
649 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
650 const unsigned char *remote
= ref
->old_oid
.hash
;
653 o
= lookup_object(remote
);
654 if (!o
|| !(o
->flags
& COMPLETE
)) {
659 "want %s (%s)\n", sha1_to_hex(remote
),
666 "already have %s (%s)\n", sha1_to_hex(remote
),
672 static int sideband_demux(int in
, int out
, void *data
)
677 sigchain_push(SIGPIPE
, SIG_IGN
);
678 ret
= recv_sideband("fetch-pack", xd
[0], out
);
680 sigchain_pop(SIGPIPE
);
684 static int get_pack(struct fetch_pack_args
*args
,
685 int xd
[2], char **pack_lockfile
)
688 int do_keep
= args
->keep_pack
;
689 const char *cmd_name
;
690 struct pack_header header
;
692 struct child_process cmd
= CHILD_PROCESS_INIT
;
695 memset(&demux
, 0, sizeof(demux
));
697 /* xd[] is talking with upload-pack; subprocess reads from
698 * xd[0], spits out band#2 to stderr, and feeds us band#1
699 * through demux->out.
701 demux
.proc
= sideband_demux
;
704 if (start_async(&demux
))
705 die("fetch-pack: unable to fork off sideband"
711 if (!args
->keep_pack
&& unpack_limit
) {
713 if (read_pack_header(demux
.out
, &header
))
714 die("protocol error: bad pack header");
716 if (ntohl(header
.hdr_entries
) < unpack_limit
)
722 if (alternate_shallow_file
) {
723 argv_array_push(&cmd
.args
, "--shallow-file");
724 argv_array_push(&cmd
.args
, alternate_shallow_file
);
730 cmd_name
= "index-pack";
731 argv_array_push(&cmd
.args
, cmd_name
);
732 argv_array_push(&cmd
.args
, "--stdin");
733 if (!args
->quiet
&& !args
->no_progress
)
734 argv_array_push(&cmd
.args
, "-v");
735 if (args
->use_thin_pack
)
736 argv_array_push(&cmd
.args
, "--fix-thin");
737 if (args
->lock_pack
|| unpack_limit
) {
739 if (gethostname(hostname
, sizeof(hostname
)))
740 xsnprintf(hostname
, sizeof(hostname
), "localhost");
741 argv_array_pushf(&cmd
.args
,
742 "--keep=fetch-pack %"PRIuMAX
" on %s",
743 (uintmax_t)getpid(), hostname
);
745 if (args
->check_self_contained_and_connected
)
746 argv_array_push(&cmd
.args
, "--check-self-contained-and-connected");
749 cmd_name
= "unpack-objects";
750 argv_array_push(&cmd
.args
, cmd_name
);
751 if (args
->quiet
|| args
->no_progress
)
752 argv_array_push(&cmd
.args
, "-q");
753 args
->check_self_contained_and_connected
= 0;
757 argv_array_pushf(&cmd
.args
, "--pack_header=%"PRIu32
",%"PRIu32
,
758 ntohl(header
.hdr_version
),
759 ntohl(header
.hdr_entries
));
760 if (fetch_fsck_objects
>= 0
762 : transfer_fsck_objects
>= 0
763 ? transfer_fsck_objects
765 argv_array_push(&cmd
.args
, "--strict");
769 if (start_command(&cmd
))
770 die("fetch-pack: unable to fork off %s", cmd_name
);
771 if (do_keep
&& pack_lockfile
) {
772 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
777 /* Closed by start_command() */
780 ret
= finish_command(&cmd
);
781 if (!ret
|| (args
->check_self_contained_and_connected
&& ret
== 1))
782 args
->self_contained_and_connected
=
783 args
->check_self_contained_and_connected
&&
786 die("%s failed", cmd_name
);
787 if (use_sideband
&& finish_async(&demux
))
788 die("error in sideband demultiplexer");
792 static int cmp_ref_by_name(const void *a_
, const void *b_
)
794 const struct ref
*a
= *((const struct ref
**)a_
);
795 const struct ref
*b
= *((const struct ref
**)b_
);
796 return strcmp(a
->name
, b
->name
);
799 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
801 const struct ref
*orig_ref
,
802 struct ref
**sought
, int nr_sought
,
803 struct shallow_info
*si
,
804 char **pack_lockfile
)
806 struct ref
*ref
= copy_ref_list(orig_ref
);
807 unsigned char sha1
[20];
808 const char *agent_feature
;
811 sort_ref_list(&ref
, ref_compare_name
);
812 qsort(sought
, nr_sought
, sizeof(*sought
), cmp_ref_by_name
);
814 if ((args
->depth
> 0 || is_repository_shallow()) && !server_supports("shallow"))
815 die("Server does not support shallow clients");
816 if (server_supports("multi_ack_detailed")) {
818 fprintf(stderr
, "Server supports multi_ack_detailed\n");
820 if (server_supports("no-done")) {
822 fprintf(stderr
, "Server supports no-done\n");
823 if (args
->stateless_rpc
)
827 else if (server_supports("multi_ack")) {
829 fprintf(stderr
, "Server supports multi_ack\n");
832 if (server_supports("side-band-64k")) {
834 fprintf(stderr
, "Server supports side-band-64k\n");
837 else if (server_supports("side-band")) {
839 fprintf(stderr
, "Server supports side-band\n");
842 if (server_supports("allow-tip-sha1-in-want")) {
844 fprintf(stderr
, "Server supports allow-tip-sha1-in-want\n");
845 allow_unadvertised_object_request
|= ALLOW_TIP_SHA1
;
847 if (server_supports("allow-reachable-sha1-in-want")) {
849 fprintf(stderr
, "Server supports allow-reachable-sha1-in-want\n");
850 allow_unadvertised_object_request
|= ALLOW_REACHABLE_SHA1
;
852 if (!server_supports("thin-pack"))
853 args
->use_thin_pack
= 0;
854 if (!server_supports("no-progress"))
855 args
->no_progress
= 0;
856 if (!server_supports("include-tag"))
857 args
->include_tag
= 0;
858 if (server_supports("ofs-delta")) {
860 fprintf(stderr
, "Server supports ofs-delta\n");
862 prefer_ofs_delta
= 0;
864 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
866 if (args
->verbose
&& agent_len
)
867 fprintf(stderr
, "Server version is %.*s\n",
868 agent_len
, agent_feature
);
871 if (everything_local(args
, &ref
, sought
, nr_sought
)) {
875 if (find_common(args
, fd
, sha1
, ref
) < 0)
876 if (!args
->keep_pack
)
877 /* When cloning, it is not unusual to have
880 warning("no common commits");
882 if (args
->stateless_rpc
)
885 setup_alternate_shallow(&shallow_lock
, &alternate_shallow_file
,
887 else if (si
->nr_ours
|| si
->nr_theirs
)
888 alternate_shallow_file
= setup_temporary_shallow(si
->shallow
);
890 alternate_shallow_file
= NULL
;
891 if (get_pack(args
, fd
, pack_lockfile
))
892 die("git fetch-pack: fetch failed.");
898 static void fetch_pack_config(void)
900 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit
);
901 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit
);
902 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta
);
903 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects
);
904 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects
);
906 git_config(git_default_config
, NULL
);
909 static void fetch_pack_setup(void)
911 static int did_setup
;
915 if (0 <= transfer_unpack_limit
)
916 unpack_limit
= transfer_unpack_limit
;
917 else if (0 <= fetch_unpack_limit
)
918 unpack_limit
= fetch_unpack_limit
;
922 static int remove_duplicates_in_refs(struct ref
**ref
, int nr
)
924 struct string_list names
= STRING_LIST_INIT_NODUP
;
927 for (src
= dst
= 0; src
< nr
; src
++) {
928 struct string_list_item
*item
;
929 item
= string_list_insert(&names
, ref
[src
]->name
);
931 continue; /* already have it */
932 item
->util
= ref
[src
];
937 for (src
= dst
; src
< nr
; src
++)
939 string_list_clear(&names
, 0);
943 static void update_shallow(struct fetch_pack_args
*args
,
944 struct ref
**sought
, int nr_sought
,
945 struct shallow_info
*si
)
947 struct sha1_array ref
= SHA1_ARRAY_INIT
;
951 if (args
->depth
> 0 && alternate_shallow_file
) {
952 if (*alternate_shallow_file
== '\0') { /* --unshallow */
953 unlink_or_warn(git_path_shallow());
954 rollback_lock_file(&shallow_lock
);
956 commit_lock_file(&shallow_lock
);
960 if (!si
->shallow
|| !si
->shallow
->nr
)
965 * remote is shallow, but this is a clone, there are
966 * no objects in repo to worry about. Accept any
967 * shallow points that exist in the pack (iow in repo
968 * after get_pack() and reprepare_packed_git())
970 struct sha1_array extra
= SHA1_ARRAY_INIT
;
971 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
972 for (i
= 0; i
< si
->shallow
->nr
; i
++)
973 if (has_sha1_file(sha1
[i
]))
974 sha1_array_append(&extra
, sha1
[i
]);
976 setup_alternate_shallow(&shallow_lock
,
977 &alternate_shallow_file
,
979 commit_lock_file(&shallow_lock
);
981 sha1_array_clear(&extra
);
985 if (!si
->nr_ours
&& !si
->nr_theirs
)
988 remove_nonexistent_theirs_shallow(si
);
989 if (!si
->nr_ours
&& !si
->nr_theirs
)
991 for (i
= 0; i
< nr_sought
; i
++)
992 sha1_array_append(&ref
, sought
[i
]->old_oid
.hash
);
995 if (args
->update_shallow
) {
997 * remote is also shallow, .git/shallow may be updated
998 * so all refs can be accepted. Make sure we only add
999 * shallow roots that are actually reachable from new
1002 struct sha1_array extra
= SHA1_ARRAY_INIT
;
1003 unsigned char (*sha1
)[20] = si
->shallow
->sha1
;
1004 assign_shallow_commits_to_refs(si
, NULL
, NULL
);
1005 if (!si
->nr_ours
&& !si
->nr_theirs
) {
1006 sha1_array_clear(&ref
);
1009 for (i
= 0; i
< si
->nr_ours
; i
++)
1010 sha1_array_append(&extra
, sha1
[si
->ours
[i
]]);
1011 for (i
= 0; i
< si
->nr_theirs
; i
++)
1012 sha1_array_append(&extra
, sha1
[si
->theirs
[i
]]);
1013 setup_alternate_shallow(&shallow_lock
,
1014 &alternate_shallow_file
,
1016 commit_lock_file(&shallow_lock
);
1017 sha1_array_clear(&extra
);
1018 sha1_array_clear(&ref
);
1023 * remote is also shallow, check what ref is safe to update
1024 * without updating .git/shallow
1026 status
= xcalloc(nr_sought
, sizeof(*status
));
1027 assign_shallow_commits_to_refs(si
, NULL
, status
);
1028 if (si
->nr_ours
|| si
->nr_theirs
) {
1029 for (i
= 0; i
< nr_sought
; i
++)
1031 sought
[i
]->status
= REF_STATUS_REJECT_SHALLOW
;
1034 sha1_array_clear(&ref
);
1037 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
1038 int fd
[], struct child_process
*conn
,
1039 const struct ref
*ref
,
1041 struct ref
**sought
, int nr_sought
,
1042 struct sha1_array
*shallow
,
1043 char **pack_lockfile
)
1045 struct ref
*ref_cpy
;
1046 struct shallow_info si
;
1050 nr_sought
= remove_duplicates_in_refs(sought
, nr_sought
);
1053 packet_flush(fd
[1]);
1054 die("no matching remote head");
1056 prepare_shallow_info(&si
, shallow
);
1057 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, nr_sought
,
1058 &si
, pack_lockfile
);
1059 reprepare_packed_git();
1060 update_shallow(args
, sought
, nr_sought
, &si
);
1061 clear_shallow_info(&si
);