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 deepen_since_ok;
25 static int deepen_not_ok;
26 static int fetch_fsck_objects = -1;
27 static int transfer_fsck_objects = -1;
28 static int agent_supported;
29 static struct lock_file shallow_lock;
30 static const char *alternate_shallow_file;
32 /* Remember to update object flag allocation in object.h */
33 #define COMPLETE (1U << 0)
34 #define COMMON (1U << 1)
35 #define COMMON_REF (1U << 2)
36 #define SEEN (1U << 3)
37 #define POPPED (1U << 4)
42 * After sending this many "have"s if we do not get any new ACK , we
43 * give up traversing our history.
45 #define MAX_IN_VAIN 256
47 static struct prio_queue rev_list = { compare_commits_by_commit_date };
48 static int non_common_revs, multi_ack, use_sideband;
49 /* Allow specifying sha1 if it is a ref tip. */
50 #define ALLOW_TIP_SHA1 01
51 /* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
52 #define ALLOW_REACHABLE_SHA1 02
53 static unsigned int allow_unadvertised_object_request;
55 __attribute__((format (printf, 2, 3)))
56 static inline void print_verbose(const struct fetch_pack_args *args,
64 va_start(params, fmt);
65 vfprintf(stderr, fmt, params);
70 static void rev_list_push(struct commit *commit, int mark)
72 if (!(commit->object.flags & mark)) {
73 commit->object.flags |= mark;
75 if (parse_commit(commit))
78 prio_queue_put(&rev_list, commit);
80 if (!(commit->object.flags & COMMON))
85 static int rev_list_insert_ref(const char *refname, const unsigned char *sha1)
87 struct object *o = deref_tag(parse_object(sha1), refname, 0);
89 if (o && o->type == OBJ_COMMIT)
90 rev_list_push((struct commit *)o, SEEN);
95 static int rev_list_insert_ref_oid(const char *refname, const struct object_id *oid,
96 int flag, void *cb_data)
98 return rev_list_insert_ref(refname, oid->hash);
101 static int clear_marks(const char *refname, const struct object_id *oid,
102 int flag, void *cb_data)
104 struct object *o = deref_tag(parse_object(oid->hash), refname, 0);
106 if (o && o->type == OBJ_COMMIT)
107 clear_commit_marks((struct commit *)o,
108 COMMON | COMMON_REF | SEEN | POPPED);
113 This function marks a rev and its ancestors as common.
114 In some cases, it is desirable to mark only the ancestors (for example
115 when only the server does not yet know that they are common).
118 static void mark_common(struct commit *commit,
119 int ancestors_only, int dont_parse)
121 if (commit != NULL && !(commit->object.flags & COMMON)) {
122 struct object *o = (struct object *)commit;
127 if (!(o->flags & SEEN))
128 rev_list_push(commit, SEEN);
130 struct commit_list *parents;
132 if (!ancestors_only && !(o->flags & POPPED))
134 if (!o->parsed && !dont_parse)
135 if (parse_commit(commit))
138 for (parents = commit->parents;
140 parents = parents->next)
141 mark_common(parents->item, 0, dont_parse);
147 Get the next rev to send, ignoring the common.
150 static const unsigned char *get_rev(void)
152 struct commit *commit = NULL;
154 while (commit == NULL) {
156 struct commit_list *parents;
158 if (rev_list.nr == 0 || non_common_revs == 0)
161 commit = prio_queue_get(&rev_list);
162 parse_commit(commit);
163 parents = commit->parents;
165 commit->object.flags |= POPPED;
166 if (!(commit->object.flags & COMMON))
169 if (commit->object.flags & COMMON) {
170 /* do not send "have", and ignore ancestors */
172 mark = COMMON | SEEN;
173 } else if (commit->object.flags & COMMON_REF)
174 /* send "have", and ignore ancestors */
175 mark = COMMON | SEEN;
177 /* send "have", also for its ancestors */
181 if (!(parents->item->object.flags & SEEN))
182 rev_list_push(parents->item, mark);
184 mark_common(parents->item, 1, 0);
185 parents = parents->next;
189 return commit->object.oid.hash;
200 static void consume_shallow_list(struct fetch_pack_args *args, int fd)
202 if (args->stateless_rpc && args->deepen) {
203 /* If we sent a depth we will get back "duplicate"
204 * shallow and unshallow commands every time there
205 * is a block of have lines exchanged.
208 while ((line = packet_read_line(fd, NULL))) {
209 if (starts_with(line, "shallow "))
211 if (starts_with(line, "unshallow "))
213 die(_("git fetch-pack: expected shallow list"));
218 static enum ack_type get_ack(int fd, unsigned char *result_sha1)
221 char *line = packet_read_line(fd, &len);
225 die(_("git fetch-pack: expected ACK/NAK, got EOF"));
226 if (!strcmp(line, "NAK"))
228 if (skip_prefix(line, "ACK ", &arg)) {
229 if (!get_sha1_hex(arg, result_sha1)) {
234 if (strstr(arg, "continue"))
236 if (strstr(arg, "common"))
238 if (strstr(arg, "ready"))
243 die(_("git fetch-pack: expected ACK/NAK, got '%s'"), line);
246 static void send_request(struct fetch_pack_args *args,
247 int fd, struct strbuf *buf)
249 if (args->stateless_rpc) {
250 send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
253 write_or_die(fd, buf->buf, buf->len);
256 static void insert_one_alternate_ref(const struct ref *ref, void *unused)
258 rev_list_insert_ref(NULL, ref->old_oid.hash);
261 #define INITIAL_FLUSH 16
262 #define PIPESAFE_FLUSH 32
263 #define LARGE_FLUSH 16384
265 static int next_flush(struct fetch_pack_args *args, int count)
267 if (args->stateless_rpc) {
268 if (count < LARGE_FLUSH)
271 count = count * 11 / 10;
273 if (count < PIPESAFE_FLUSH)
276 count += PIPESAFE_FLUSH;
281 static int find_common(struct fetch_pack_args *args,
282 int fd[2], unsigned char *result_sha1,
286 int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
287 const unsigned char *sha1;
288 unsigned in_vain = 0;
289 int got_continue = 0;
291 struct strbuf req_buf = STRBUF_INIT;
292 size_t state_len = 0;
294 if (args->stateless_rpc && multi_ack == 1)
295 die(_("--stateless-rpc requires multi_ack_detailed"));
297 for_each_ref(clear_marks, NULL);
300 for_each_ref(rev_list_insert_ref_oid, NULL);
301 for_each_alternate_ref(insert_one_alternate_ref, NULL);
304 for ( ; refs ; refs = refs->next) {
305 unsigned char *remote = refs->old_oid.hash;
306 const char *remote_hex;
310 * If that object is complete (i.e. it is an ancestor of a
311 * local ref), we tell them we have it but do not have to
312 * tell them about its ancestors, which they already know
315 * We use lookup_object here because we are only
316 * interested in the case we *know* the object is
317 * reachable and we have already scanned it.
319 if (((o = lookup_object(remote)) != NULL) &&
320 (o->flags & COMPLETE)) {
324 remote_hex = sha1_to_hex(remote);
326 struct strbuf c = STRBUF_INIT;
327 if (multi_ack == 2) strbuf_addstr(&c, " multi_ack_detailed");
328 if (multi_ack == 1) strbuf_addstr(&c, " multi_ack");
329 if (no_done) strbuf_addstr(&c, " no-done");
330 if (use_sideband == 2) strbuf_addstr(&c, " side-band-64k");
331 if (use_sideband == 1) strbuf_addstr(&c, " side-band");
332 if (args->deepen_relative) strbuf_addstr(&c, " deepen-relative");
333 if (args->use_thin_pack) strbuf_addstr(&c, " thin-pack");
334 if (args->no_progress) strbuf_addstr(&c, " no-progress");
335 if (args->include_tag) strbuf_addstr(&c, " include-tag");
336 if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta");
337 if (deepen_since_ok) strbuf_addstr(&c, " deepen-since");
338 if (deepen_not_ok) strbuf_addstr(&c, " deepen-not");
339 if (agent_supported) strbuf_addf(&c, " agent=%s",
340 git_user_agent_sanitized());
341 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
344 packet_buf_write(&req_buf, "want %s\n", remote_hex);
349 strbuf_release(&req_buf);
354 if (is_repository_shallow())
355 write_shallow_commits(&req_buf, 1, NULL);
357 packet_buf_write(&req_buf, "deepen %d", args->depth);
358 if (args->deepen_since) {
359 unsigned long max_age = approxidate(args->deepen_since);
360 packet_buf_write(&req_buf, "deepen-since %lu", max_age);
362 if (args->deepen_not) {
364 for (i = 0; i < args->deepen_not->nr; i++) {
365 struct string_list_item *s = args->deepen_not->items + i;
366 packet_buf_write(&req_buf, "deepen-not %s", s->string);
369 packet_buf_flush(&req_buf);
370 state_len = req_buf.len;
375 unsigned char sha1[20];
377 send_request(args, fd[1], &req_buf);
378 while ((line = packet_read_line(fd[0], NULL))) {
379 if (skip_prefix(line, "shallow ", &arg)) {
380 if (get_sha1_hex(arg, sha1))
381 die(_("invalid shallow line: %s"), line);
382 register_shallow(sha1);
385 if (skip_prefix(line, "unshallow ", &arg)) {
386 if (get_sha1_hex(arg, sha1))
387 die(_("invalid unshallow line: %s"), line);
388 if (!lookup_object(sha1))
389 die(_("object not found: %s"), line);
390 /* make sure that it is parsed as shallow */
391 if (!parse_object(sha1))
392 die(_("error in object: %s"), line);
393 if (unregister_shallow(sha1))
394 die(_("no shallow found: %s"), line);
397 die(_("expected shallow/unshallow, got %s"), line);
399 } else if (!args->stateless_rpc)
400 send_request(args, fd[1], &req_buf);
402 if (!args->stateless_rpc) {
403 /* If we aren't using the stateless-rpc interface
404 * we don't need to retain the headers.
406 strbuf_setlen(&req_buf, 0);
412 while ((sha1 = get_rev())) {
413 packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
414 print_verbose(args, "have %s", sha1_to_hex(sha1));
416 if (flush_at <= ++count) {
419 packet_buf_flush(&req_buf);
420 send_request(args, fd[1], &req_buf);
421 strbuf_setlen(&req_buf, state_len);
423 flush_at = next_flush(args, count);
426 * We keep one window "ahead" of the other side, and
427 * will wait for an ACK only on the next one
429 if (!args->stateless_rpc && count == INITIAL_FLUSH)
432 consume_shallow_list(args, fd[0]);
434 ack = get_ack(fd[0], result_sha1);
436 print_verbose(args, _("got %s %d %s"), "ack",
437 ack, sha1_to_hex(result_sha1));
447 struct commit *commit =
448 lookup_commit(result_sha1);
450 die(_("invalid commit %s"), sha1_to_hex(result_sha1));
451 if (args->stateless_rpc
453 && !(commit->object.flags & COMMON)) {
454 /* We need to replay the have for this object
455 * on the next RPC request so the peer knows
456 * it is in common with us.
458 const char *hex = sha1_to_hex(result_sha1);
459 packet_buf_write(&req_buf, "have %s\n", hex);
460 state_len = req_buf.len;
462 * Reset in_vain because an ack
463 * for this commit has not been
467 } else if (!args->stateless_rpc
468 || ack != ACK_common)
470 mark_common(commit, 0, 1);
473 if (ack == ACK_ready) {
474 clear_prio_queue(&rev_list);
482 if (got_continue && MAX_IN_VAIN < in_vain) {
483 print_verbose(args, _("giving up"));
489 if (!got_ready || !no_done) {
490 packet_buf_write(&req_buf, "done\n");
491 send_request(args, fd[1], &req_buf);
493 print_verbose(args, _("done"));
498 strbuf_release(&req_buf);
500 if (!got_ready || !no_done)
501 consume_shallow_list(args, fd[0]);
502 while (flushes || multi_ack) {
503 int ack = get_ack(fd[0], result_sha1);
505 print_verbose(args, _("got %s (%d) %s"), "ack",
506 ack, sha1_to_hex(result_sha1));
514 /* it is no error to fetch into a completely empty repo */
515 return count ? retval : 0;
518 static struct commit_list *complete;
520 static int mark_complete(const unsigned char *sha1)
522 struct object *o = parse_object(sha1);
524 while (o && o->type == OBJ_TAG) {
525 struct tag *t = (struct tag *) o;
527 break; /* broken repository */
528 o->flags |= COMPLETE;
529 o = parse_object(t->tagged->oid.hash);
531 if (o && o->type == OBJ_COMMIT) {
532 struct commit *commit = (struct commit *)o;
533 if (!(commit->object.flags & COMPLETE)) {
534 commit->object.flags |= COMPLETE;
535 commit_list_insert(commit, &complete);
541 static int mark_complete_oid(const char *refname, const struct object_id *oid,
542 int flag, void *cb_data)
544 return mark_complete(oid->hash);
547 static void mark_recent_complete_commits(struct fetch_pack_args *args,
548 unsigned long cutoff)
550 while (complete && cutoff <= complete->item->date) {
551 print_verbose(args, _("Marking %s as complete"),
552 oid_to_hex(&complete->item->object.oid));
553 pop_most_recent_commit(&complete, COMPLETE);
557 static void filter_refs(struct fetch_pack_args *args,
559 struct ref **sought, int nr_sought)
561 struct ref *newlist = NULL;
562 struct ref **newtail = &newlist;
563 struct ref *ref, *next;
567 for (ref = *refs; ref; ref = next) {
571 if (starts_with(ref->name, "refs/") &&
572 check_refname_format(ref->name, 0))
575 while (i < nr_sought) {
576 int cmp = strcmp(ref->name, sought[i]->name);
578 break; /* definitely do not have it */
580 keep = 1; /* definitely have it */
581 sought[i]->matched = 1;
587 if (!keep && args->fetch_all &&
588 (!args->deepen || !starts_with(ref->name, "refs/tags/")))
594 newtail = &ref->next;
600 /* Append unmatched requests to the list */
601 if ((allow_unadvertised_object_request &
602 (ALLOW_TIP_SHA1 | ALLOW_REACHABLE_SHA1))) {
603 for (i = 0; i < nr_sought; i++) {
604 unsigned char sha1[20];
609 if (get_sha1_hex(ref->name, sha1) ||
610 ref->name[40] != '\0' ||
611 hashcmp(sha1, ref->old_oid.hash))
615 *newtail = copy_ref(ref);
616 newtail = &(*newtail)->next;
622 static void mark_alternate_complete(const struct ref *ref, void *unused)
624 mark_complete(ref->old_oid.hash);
627 static int everything_local(struct fetch_pack_args *args,
629 struct ref **sought, int nr_sought)
633 unsigned long cutoff = 0;
635 save_commit_buffer = 0;
637 for (ref = *refs; ref; ref = ref->next) {
640 if (!has_object_file(&ref->old_oid))
643 o = parse_object(ref->old_oid.hash);
647 /* We already have it -- which may mean that we were
648 * in sync with the other side at some time after
649 * that (it is OK if we guess wrong here).
651 if (o->type == OBJ_COMMIT) {
652 struct commit *commit = (struct commit *)o;
653 if (!cutoff || cutoff < commit->date)
654 cutoff = commit->date;
659 for_each_ref(mark_complete_oid, NULL);
660 for_each_alternate_ref(mark_alternate_complete, NULL);
661 commit_list_sort_by_date(&complete);
663 mark_recent_complete_commits(args, cutoff);
667 * Mark all complete remote refs as common refs.
668 * Don't mark them common yet; the server has to be told so first.
670 for (ref = *refs; ref; ref = ref->next) {
671 struct object *o = deref_tag(lookup_object(ref->old_oid.hash),
674 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
677 if (!(o->flags & SEEN)) {
678 rev_list_push((struct commit *)o, COMMON_REF | SEEN);
680 mark_common((struct commit *)o, 1, 1);
684 filter_refs(args, refs, sought, nr_sought);
686 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
687 const unsigned char *remote = ref->old_oid.hash;
690 o = lookup_object(remote);
691 if (!o || !(o->flags & COMPLETE)) {
693 print_verbose(args, "want %s (%s)", sha1_to_hex(remote),
697 print_verbose(args, _("already have %s (%s)"), sha1_to_hex(remote),
703 static int sideband_demux(int in, int out, void *data)
708 ret = recv_sideband("fetch-pack", xd[0], out);
713 static int get_pack(struct fetch_pack_args *args,
714 int xd[2], char **pack_lockfile)
717 int do_keep = args->keep_pack;
718 const char *cmd_name;
719 struct pack_header header;
721 struct child_process cmd = CHILD_PROCESS_INIT;
724 memset(&demux, 0, sizeof(demux));
726 /* xd[] is talking with upload-pack; subprocess reads from
727 * xd[0], spits out band#2 to stderr, and feeds us band#1
728 * through demux->out.
730 demux.proc = sideband_demux;
733 demux.isolate_sigpipe = 1;
734 if (start_async(&demux))
735 die(_("fetch-pack: unable to fork off sideband demultiplexer"));
740 if (!args->keep_pack && unpack_limit) {
742 if (read_pack_header(demux.out, &header))
743 die(_("protocol error: bad pack header"));
745 if (ntohl(header.hdr_entries) < unpack_limit)
751 if (alternate_shallow_file) {
752 argv_array_push(&cmd.args, "--shallow-file");
753 argv_array_push(&cmd.args, alternate_shallow_file);
759 cmd_name = "index-pack";
760 argv_array_push(&cmd.args, cmd_name);
761 argv_array_push(&cmd.args, "--stdin");
762 if (!args->quiet && !args->no_progress)
763 argv_array_push(&cmd.args, "-v");
764 if (args->use_thin_pack)
765 argv_array_push(&cmd.args, "--fix-thin");
766 if (args->lock_pack || unpack_limit) {
768 if (gethostname(hostname, sizeof(hostname)))
769 xsnprintf(hostname, sizeof(hostname), "localhost");
770 argv_array_pushf(&cmd.args,
771 "--keep=fetch-pack %"PRIuMAX " on %s",
772 (uintmax_t)getpid(), hostname);
774 if (args->check_self_contained_and_connected)
775 argv_array_push(&cmd.args, "--check-self-contained-and-connected");
778 cmd_name = "unpack-objects";
779 argv_array_push(&cmd.args, cmd_name);
780 if (args->quiet || args->no_progress)
781 argv_array_push(&cmd.args, "-q");
782 args->check_self_contained_and_connected = 0;
786 argv_array_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
787 ntohl(header.hdr_version),
788 ntohl(header.hdr_entries));
789 if (fetch_fsck_objects >= 0
791 : transfer_fsck_objects >= 0
792 ? transfer_fsck_objects
794 argv_array_push(&cmd.args, "--strict");
798 if (start_command(&cmd))
799 die(_("fetch-pack: unable to fork off %s"), cmd_name);
800 if (do_keep && pack_lockfile) {
801 *pack_lockfile = index_pack_lockfile(cmd.out);
806 /* Closed by start_command() */
809 ret = finish_command(&cmd);
810 if (!ret || (args->check_self_contained_and_connected && ret == 1))
811 args->self_contained_and_connected =
812 args->check_self_contained_and_connected &&
815 die(_("%s failed"), cmd_name);
816 if (use_sideband && finish_async(&demux))
817 die(_("error in sideband demultiplexer"));
821 static int cmp_ref_by_name(const void *a_, const void *b_)
823 const struct ref *a = *((const struct ref **)a_);
824 const struct ref *b = *((const struct ref **)b_);
825 return strcmp(a->name, b->name);
828 static struct ref *do_fetch_pack(struct fetch_pack_args *args,
830 const struct ref *orig_ref,
831 struct ref **sought, int nr_sought,
832 struct shallow_info *si,
833 char **pack_lockfile)
835 struct ref *ref = copy_ref_list(orig_ref);
836 unsigned char sha1[20];
837 const char *agent_feature;
840 sort_ref_list(&ref, ref_compare_name);
841 QSORT(sought, nr_sought, cmp_ref_by_name);
843 if ((args->depth > 0 || is_repository_shallow()) && !server_supports("shallow"))
844 die(_("Server does not support shallow clients"));
845 if (args->depth > 0 || args->deepen_since || args->deepen_not)
847 if (server_supports("multi_ack_detailed")) {
848 print_verbose(args, _("Server supports multi_ack_detailed"));
850 if (server_supports("no-done")) {
851 print_verbose(args, _("Server supports no-done"));
852 if (args->stateless_rpc)
856 else if (server_supports("multi_ack")) {
857 print_verbose(args, _("Server supports multi_ack"));
860 if (server_supports("side-band-64k")) {
861 print_verbose(args, _("Server supports side-band-64k"));
864 else if (server_supports("side-band")) {
865 print_verbose(args, _("Server supports side-band"));
868 if (server_supports("allow-tip-sha1-in-want")) {
869 print_verbose(args, _("Server supports allow-tip-sha1-in-want"));
870 allow_unadvertised_object_request |= ALLOW_TIP_SHA1;
872 if (server_supports("allow-reachable-sha1-in-want")) {
873 print_verbose(args, _("Server supports allow-reachable-sha1-in-want"));
874 allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
876 if (!server_supports("thin-pack"))
877 args->use_thin_pack = 0;
878 if (!server_supports("no-progress"))
879 args->no_progress = 0;
880 if (!server_supports("include-tag"))
881 args->include_tag = 0;
882 if (server_supports("ofs-delta"))
883 print_verbose(args, _("Server supports ofs-delta"));
885 prefer_ofs_delta = 0;
887 if ((agent_feature = server_feature_value("agent", &agent_len))) {
890 print_verbose(args, _("Server version is %.*s"),
891 agent_len, agent_feature);
893 if (server_supports("deepen-since"))
895 else if (args->deepen_since)
896 die(_("Server does not support --shallow-since"));
897 if (server_supports("deepen-not"))
899 else if (args->deepen_not)
900 die(_("Server does not support --shallow-exclude"));
901 if (!server_supports("deepen-relative") && args->deepen_relative)
902 die(_("Server does not support --deepen"));
904 if (everything_local(args, &ref, sought, nr_sought)) {
908 if (find_common(args, fd, sha1, ref) < 0)
909 if (!args->keep_pack)
910 /* When cloning, it is not unusual to have
913 warning(_("no common commits"));
915 if (args->stateless_rpc)
918 setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
920 else if (si->nr_ours || si->nr_theirs)
921 alternate_shallow_file = setup_temporary_shallow(si->shallow);
923 alternate_shallow_file = NULL;
924 if (get_pack(args, fd, pack_lockfile))
925 die(_("git fetch-pack: fetch failed."));
931 static void fetch_pack_config(void)
933 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit);
934 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit);
935 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
936 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
937 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
939 git_config(git_default_config, NULL);
942 static void fetch_pack_setup(void)
944 static int did_setup;
948 if (0 <= transfer_unpack_limit)
949 unpack_limit = transfer_unpack_limit;
950 else if (0 <= fetch_unpack_limit)
951 unpack_limit = fetch_unpack_limit;
955 static int remove_duplicates_in_refs(struct ref **ref, int nr)
957 struct string_list names = STRING_LIST_INIT_NODUP;
960 for (src = dst = 0; src < nr; src++) {
961 struct string_list_item *item;
962 item = string_list_insert(&names, ref[src]->name);
964 continue; /* already have it */
965 item->util = ref[src];
970 for (src = dst; src < nr; src++)
972 string_list_clear(&names, 0);
976 static void update_shallow(struct fetch_pack_args *args,
977 struct ref **sought, int nr_sought,
978 struct shallow_info *si)
980 struct sha1_array ref = SHA1_ARRAY_INIT;
984 if (args->deepen && alternate_shallow_file) {
985 if (*alternate_shallow_file == '\0') { /* --unshallow */
986 unlink_or_warn(git_path_shallow());
987 rollback_lock_file(&shallow_lock);
989 commit_lock_file(&shallow_lock);
993 if (!si->shallow || !si->shallow->nr)
998 * remote is shallow, but this is a clone, there are
999 * no objects in repo to worry about. Accept any
1000 * shallow points that exist in the pack (iow in repo
1001 * after get_pack() and reprepare_packed_git())
1003 struct sha1_array extra = SHA1_ARRAY_INIT;
1004 unsigned char (*sha1)[20] = si->shallow->sha1;
1005 for (i = 0; i < si->shallow->nr; i++)
1006 if (has_sha1_file(sha1[i]))
1007 sha1_array_append(&extra, sha1[i]);
1009 setup_alternate_shallow(&shallow_lock,
1010 &alternate_shallow_file,
1012 commit_lock_file(&shallow_lock);
1014 sha1_array_clear(&extra);
1018 if (!si->nr_ours && !si->nr_theirs)
1021 remove_nonexistent_theirs_shallow(si);
1022 if (!si->nr_ours && !si->nr_theirs)
1024 for (i = 0; i < nr_sought; i++)
1025 sha1_array_append(&ref, sought[i]->old_oid.hash);
1028 if (args->update_shallow) {
1030 * remote is also shallow, .git/shallow may be updated
1031 * so all refs can be accepted. Make sure we only add
1032 * shallow roots that are actually reachable from new
1035 struct sha1_array extra = SHA1_ARRAY_INIT;
1036 unsigned char (*sha1)[20] = si->shallow->sha1;
1037 assign_shallow_commits_to_refs(si, NULL, NULL);
1038 if (!si->nr_ours && !si->nr_theirs) {
1039 sha1_array_clear(&ref);
1042 for (i = 0; i < si->nr_ours; i++)
1043 sha1_array_append(&extra, sha1[si->ours[i]]);
1044 for (i = 0; i < si->nr_theirs; i++)
1045 sha1_array_append(&extra, sha1[si->theirs[i]]);
1046 setup_alternate_shallow(&shallow_lock,
1047 &alternate_shallow_file,
1049 commit_lock_file(&shallow_lock);
1050 sha1_array_clear(&extra);
1051 sha1_array_clear(&ref);
1056 * remote is also shallow, check what ref is safe to update
1057 * without updating .git/shallow
1059 status = xcalloc(nr_sought, sizeof(*status));
1060 assign_shallow_commits_to_refs(si, NULL, status);
1061 if (si->nr_ours || si->nr_theirs) {
1062 for (i = 0; i < nr_sought; i++)
1064 sought[i]->status = REF_STATUS_REJECT_SHALLOW;
1067 sha1_array_clear(&ref);
1070 struct ref *fetch_pack(struct fetch_pack_args *args,
1071 int fd[], struct child_process *conn,
1072 const struct ref *ref,
1074 struct ref **sought, int nr_sought,
1075 struct sha1_array *shallow,
1076 char **pack_lockfile)
1078 struct ref *ref_cpy;
1079 struct shallow_info si;
1083 nr_sought = remove_duplicates_in_refs(sought, nr_sought);
1086 packet_flush(fd[1]);
1087 die(_("no matching remote head"));
1089 prepare_shallow_info(&si, shallow);
1090 ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
1091 &si, pack_lockfile);
1092 reprepare_packed_git();
1093 update_shallow(args, sought, nr_sought, &si);
1094 clear_shallow_info(&si);