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 1024
265 static int next_flush(struct fetch_pack_args *args, int count)
267 int flush_limit = args->stateless_rpc ? LARGE_FLUSH : PIPESAFE_FLUSH;
269 if (count < flush_limit)
272 count += flush_limit;
276 static int find_common(struct fetch_pack_args *args,
277 int fd[2], unsigned char *result_sha1,
281 int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
282 const unsigned char *sha1;
283 unsigned in_vain = 0;
284 int got_continue = 0;
286 struct strbuf req_buf = STRBUF_INIT;
287 size_t state_len = 0;
289 if (args->stateless_rpc && multi_ack == 1)
290 die(_("--stateless-rpc requires multi_ack_detailed"));
292 for_each_ref(clear_marks, NULL);
295 for_each_ref(rev_list_insert_ref_oid, NULL);
296 for_each_alternate_ref(insert_one_alternate_ref, NULL);
299 for ( ; refs ; refs = refs->next) {
300 unsigned char *remote = refs->old_oid.hash;
301 const char *remote_hex;
305 * If that object is complete (i.e. it is an ancestor of a
306 * local ref), we tell them we have it but do not have to
307 * tell them about its ancestors, which they already know
310 * We use lookup_object here because we are only
311 * interested in the case we *know* the object is
312 * reachable and we have already scanned it.
314 if (((o = lookup_object(remote)) != NULL) &&
315 (o->flags & COMPLETE)) {
319 remote_hex = sha1_to_hex(remote);
321 struct strbuf c = STRBUF_INIT;
322 if (multi_ack == 2) strbuf_addstr(&c, " multi_ack_detailed");
323 if (multi_ack == 1) strbuf_addstr(&c, " multi_ack");
324 if (no_done) strbuf_addstr(&c, " no-done");
325 if (use_sideband == 2) strbuf_addstr(&c, " side-band-64k");
326 if (use_sideband == 1) strbuf_addstr(&c, " side-band");
327 if (args->deepen_relative) strbuf_addstr(&c, " deepen-relative");
328 if (args->use_thin_pack) strbuf_addstr(&c, " thin-pack");
329 if (args->no_progress) strbuf_addstr(&c, " no-progress");
330 if (args->include_tag) strbuf_addstr(&c, " include-tag");
331 if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta");
332 if (deepen_since_ok) strbuf_addstr(&c, " deepen-since");
333 if (deepen_not_ok) strbuf_addstr(&c, " deepen-not");
334 if (agent_supported) strbuf_addf(&c, " agent=%s",
335 git_user_agent_sanitized());
336 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
339 packet_buf_write(&req_buf, "want %s\n", remote_hex);
344 strbuf_release(&req_buf);
349 if (is_repository_shallow())
350 write_shallow_commits(&req_buf, 1, NULL);
352 packet_buf_write(&req_buf, "deepen %d", args->depth);
353 if (args->deepen_since) {
354 unsigned long max_age = approxidate(args->deepen_since);
355 packet_buf_write(&req_buf, "deepen-since %lu", max_age);
357 if (args->deepen_not) {
359 for (i = 0; i < args->deepen_not->nr; i++) {
360 struct string_list_item *s = args->deepen_not->items + i;
361 packet_buf_write(&req_buf, "deepen-not %s", s->string);
364 packet_buf_flush(&req_buf);
365 state_len = req_buf.len;
370 unsigned char sha1[20];
372 send_request(args, fd[1], &req_buf);
373 while ((line = packet_read_line(fd[0], NULL))) {
374 if (skip_prefix(line, "shallow ", &arg)) {
375 if (get_sha1_hex(arg, sha1))
376 die(_("invalid shallow line: %s"), line);
377 register_shallow(sha1);
380 if (skip_prefix(line, "unshallow ", &arg)) {
381 if (get_sha1_hex(arg, sha1))
382 die(_("invalid unshallow line: %s"), line);
383 if (!lookup_object(sha1))
384 die(_("object not found: %s"), line);
385 /* make sure that it is parsed as shallow */
386 if (!parse_object(sha1))
387 die(_("error in object: %s"), line);
388 if (unregister_shallow(sha1))
389 die(_("no shallow found: %s"), line);
392 die(_("expected shallow/unshallow, got %s"), line);
394 } else if (!args->stateless_rpc)
395 send_request(args, fd[1], &req_buf);
397 if (!args->stateless_rpc) {
398 /* If we aren't using the stateless-rpc interface
399 * we don't need to retain the headers.
401 strbuf_setlen(&req_buf, 0);
407 while ((sha1 = get_rev())) {
408 packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
409 print_verbose(args, "have %s", sha1_to_hex(sha1));
411 if (flush_at <= ++count) {
414 packet_buf_flush(&req_buf);
415 send_request(args, fd[1], &req_buf);
416 strbuf_setlen(&req_buf, state_len);
418 flush_at = next_flush(args, count);
421 * We keep one window "ahead" of the other side, and
422 * will wait for an ACK only on the next one
424 if (!args->stateless_rpc && count == INITIAL_FLUSH)
427 consume_shallow_list(args, fd[0]);
429 ack = get_ack(fd[0], result_sha1);
431 print_verbose(args, _("got %s %d %s"), "ack",
432 ack, sha1_to_hex(result_sha1));
442 struct commit *commit =
443 lookup_commit(result_sha1);
445 die(_("invalid commit %s"), sha1_to_hex(result_sha1));
446 if (args->stateless_rpc
448 && !(commit->object.flags & COMMON)) {
449 /* We need to replay the have for this object
450 * on the next RPC request so the peer knows
451 * it is in common with us.
453 const char *hex = sha1_to_hex(result_sha1);
454 packet_buf_write(&req_buf, "have %s\n", hex);
455 state_len = req_buf.len;
457 mark_common(commit, 0, 1);
461 if (ack == ACK_ready) {
462 clear_prio_queue(&rev_list);
470 if (got_continue && MAX_IN_VAIN < in_vain) {
471 print_verbose(args, _("giving up"));
477 if (!got_ready || !no_done) {
478 packet_buf_write(&req_buf, "done\n");
479 send_request(args, fd[1], &req_buf);
481 print_verbose(args, _("done"));
486 strbuf_release(&req_buf);
488 if (!got_ready || !no_done)
489 consume_shallow_list(args, fd[0]);
490 while (flushes || multi_ack) {
491 int ack = get_ack(fd[0], result_sha1);
493 print_verbose(args, _("got %s (%d) %s"), "ack",
494 ack, sha1_to_hex(result_sha1));
502 /* it is no error to fetch into a completely empty repo */
503 return count ? retval : 0;
506 static struct commit_list *complete;
508 static int mark_complete(const unsigned char *sha1)
510 struct object *o = parse_object(sha1);
512 while (o && o->type == OBJ_TAG) {
513 struct tag *t = (struct tag *) o;
515 break; /* broken repository */
516 o->flags |= COMPLETE;
517 o = parse_object(t->tagged->oid.hash);
519 if (o && o->type == OBJ_COMMIT) {
520 struct commit *commit = (struct commit *)o;
521 if (!(commit->object.flags & COMPLETE)) {
522 commit->object.flags |= COMPLETE;
523 commit_list_insert(commit, &complete);
529 static int mark_complete_oid(const char *refname, const struct object_id *oid,
530 int flag, void *cb_data)
532 return mark_complete(oid->hash);
535 static void mark_recent_complete_commits(struct fetch_pack_args *args,
536 unsigned long cutoff)
538 while (complete && cutoff <= complete->item->date) {
539 print_verbose(args, _("Marking %s as complete"),
540 oid_to_hex(&complete->item->object.oid));
541 pop_most_recent_commit(&complete, COMPLETE);
545 static void filter_refs(struct fetch_pack_args *args,
547 struct ref **sought, int nr_sought)
549 struct ref *newlist = NULL;
550 struct ref **newtail = &newlist;
551 struct ref *ref, *next;
555 for (ref = *refs; ref; ref = next) {
559 if (starts_with(ref->name, "refs/") &&
560 check_refname_format(ref->name, 0))
563 while (i < nr_sought) {
564 int cmp = strcmp(ref->name, sought[i]->name);
566 break; /* definitely do not have it */
568 keep = 1; /* definitely have it */
569 sought[i]->matched = 1;
575 if (!keep && args->fetch_all &&
576 (!args->deepen || !starts_with(ref->name, "refs/tags/")))
582 newtail = &ref->next;
588 /* Append unmatched requests to the list */
589 if ((allow_unadvertised_object_request &
590 (ALLOW_TIP_SHA1 | ALLOW_REACHABLE_SHA1))) {
591 for (i = 0; i < nr_sought; i++) {
592 unsigned char sha1[20];
597 if (get_sha1_hex(ref->name, sha1) ||
598 ref->name[40] != '\0' ||
599 hashcmp(sha1, ref->old_oid.hash))
603 *newtail = copy_ref(ref);
604 newtail = &(*newtail)->next;
610 static void mark_alternate_complete(const struct ref *ref, void *unused)
612 mark_complete(ref->old_oid.hash);
615 static int everything_local(struct fetch_pack_args *args,
617 struct ref **sought, int nr_sought)
621 unsigned long cutoff = 0;
623 save_commit_buffer = 0;
625 for (ref = *refs; ref; ref = ref->next) {
628 if (!has_object_file(&ref->old_oid))
631 o = parse_object(ref->old_oid.hash);
635 /* We already have it -- which may mean that we were
636 * in sync with the other side at some time after
637 * that (it is OK if we guess wrong here).
639 if (o->type == OBJ_COMMIT) {
640 struct commit *commit = (struct commit *)o;
641 if (!cutoff || cutoff < commit->date)
642 cutoff = commit->date;
647 for_each_ref(mark_complete_oid, NULL);
648 for_each_alternate_ref(mark_alternate_complete, NULL);
649 commit_list_sort_by_date(&complete);
651 mark_recent_complete_commits(args, cutoff);
655 * Mark all complete remote refs as common refs.
656 * Don't mark them common yet; the server has to be told so first.
658 for (ref = *refs; ref; ref = ref->next) {
659 struct object *o = deref_tag(lookup_object(ref->old_oid.hash),
662 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
665 if (!(o->flags & SEEN)) {
666 rev_list_push((struct commit *)o, COMMON_REF | SEEN);
668 mark_common((struct commit *)o, 1, 1);
672 filter_refs(args, refs, sought, nr_sought);
674 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
675 const unsigned char *remote = ref->old_oid.hash;
678 o = lookup_object(remote);
679 if (!o || !(o->flags & COMPLETE)) {
681 print_verbose(args, "want %s (%s)", sha1_to_hex(remote),
685 print_verbose(args, _("already have %s (%s)"), sha1_to_hex(remote),
691 static int sideband_demux(int in, int out, void *data)
695 int ret = recv_sideband("fetch-pack", xd[0], out);
700 static int get_pack(struct fetch_pack_args *args,
701 int xd[2], char **pack_lockfile)
704 int do_keep = args->keep_pack;
705 const char *cmd_name;
706 struct pack_header header;
708 struct child_process cmd = CHILD_PROCESS_INIT;
711 memset(&demux, 0, sizeof(demux));
713 /* xd[] is talking with upload-pack; subprocess reads from
714 * xd[0], spits out band#2 to stderr, and feeds us band#1
715 * through demux->out.
717 demux.proc = sideband_demux;
720 if (start_async(&demux))
721 die(_("fetch-pack: unable to fork off sideband demultiplexer"));
726 if (!args->keep_pack && unpack_limit) {
728 if (read_pack_header(demux.out, &header))
729 die(_("protocol error: bad pack header"));
731 if (ntohl(header.hdr_entries) < unpack_limit)
737 if (alternate_shallow_file) {
738 argv_array_push(&cmd.args, "--shallow-file");
739 argv_array_push(&cmd.args, alternate_shallow_file);
745 cmd_name = "index-pack";
746 argv_array_push(&cmd.args, cmd_name);
747 argv_array_push(&cmd.args, "--stdin");
748 if (!args->quiet && !args->no_progress)
749 argv_array_push(&cmd.args, "-v");
750 if (args->use_thin_pack)
751 argv_array_push(&cmd.args, "--fix-thin");
752 if (args->lock_pack || unpack_limit) {
754 if (gethostname(hostname, sizeof(hostname)))
755 xsnprintf(hostname, sizeof(hostname), "localhost");
756 argv_array_pushf(&cmd.args,
757 "--keep=fetch-pack %"PRIuMAX " on %s",
758 (uintmax_t)getpid(), hostname);
760 if (args->check_self_contained_and_connected)
761 argv_array_push(&cmd.args, "--check-self-contained-and-connected");
764 cmd_name = "unpack-objects";
765 argv_array_push(&cmd.args, cmd_name);
766 if (args->quiet || args->no_progress)
767 argv_array_push(&cmd.args, "-q");
768 args->check_self_contained_and_connected = 0;
772 argv_array_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
773 ntohl(header.hdr_version),
774 ntohl(header.hdr_entries));
775 if (fetch_fsck_objects >= 0
777 : transfer_fsck_objects >= 0
778 ? transfer_fsck_objects
780 argv_array_push(&cmd.args, "--strict");
784 if (start_command(&cmd))
785 die(_("fetch-pack: unable to fork off %s"), cmd_name);
786 if (do_keep && pack_lockfile) {
787 *pack_lockfile = index_pack_lockfile(cmd.out);
792 /* Closed by start_command() */
795 ret = finish_command(&cmd);
796 if (!ret || (args->check_self_contained_and_connected && ret == 1))
797 args->self_contained_and_connected =
798 args->check_self_contained_and_connected &&
801 die(_("%s failed"), cmd_name);
802 if (use_sideband && finish_async(&demux))
803 die(_("error in sideband demultiplexer"));
807 static int cmp_ref_by_name(const void *a_, const void *b_)
809 const struct ref *a = *((const struct ref **)a_);
810 const struct ref *b = *((const struct ref **)b_);
811 return strcmp(a->name, b->name);
814 static struct ref *do_fetch_pack(struct fetch_pack_args *args,
816 const struct ref *orig_ref,
817 struct ref **sought, int nr_sought,
818 struct shallow_info *si,
819 char **pack_lockfile)
821 struct ref *ref = copy_ref_list(orig_ref);
822 unsigned char sha1[20];
823 const char *agent_feature;
826 sort_ref_list(&ref, ref_compare_name);
827 qsort(sought, nr_sought, sizeof(*sought), cmp_ref_by_name);
829 if ((args->depth > 0 || is_repository_shallow()) && !server_supports("shallow"))
830 die(_("Server does not support shallow clients"));
831 if (args->depth > 0 || args->deepen_since || args->deepen_not)
833 if (server_supports("multi_ack_detailed")) {
834 print_verbose(args, _("Server supports multi_ack_detailed"));
836 if (server_supports("no-done")) {
837 print_verbose(args, _("Server supports no-done"));
838 if (args->stateless_rpc)
842 else if (server_supports("multi_ack")) {
843 print_verbose(args, _("Server supports multi_ack"));
846 if (server_supports("side-band-64k")) {
847 print_verbose(args, _("Server supports side-band-64k"));
850 else if (server_supports("side-band")) {
851 print_verbose(args, _("Server supports side-band"));
854 if (server_supports("allow-tip-sha1-in-want")) {
855 print_verbose(args, _("Server supports allow-tip-sha1-in-want"));
856 allow_unadvertised_object_request |= ALLOW_TIP_SHA1;
858 if (server_supports("allow-reachable-sha1-in-want")) {
859 print_verbose(args, _("Server supports allow-reachable-sha1-in-want"));
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"))
869 print_verbose(args, _("Server supports ofs-delta"));
871 prefer_ofs_delta = 0;
873 if ((agent_feature = server_feature_value("agent", &agent_len))) {
876 print_verbose(args, _("Server version is %.*s"),
877 agent_len, agent_feature);
879 if (server_supports("deepen-since"))
881 else if (args->deepen_since)
882 die(_("Server does not support --shallow-since"));
883 if (server_supports("deepen-not"))
885 else if (args->deepen_not)
886 die(_("Server does not support --shallow-exclude"));
887 if (!server_supports("deepen-relative") && args->deepen_relative)
888 die(_("Server does not support --deepen"));
890 if (everything_local(args, &ref, sought, nr_sought)) {
894 if (find_common(args, fd, sha1, ref) < 0)
895 if (!args->keep_pack)
896 /* When cloning, it is not unusual to have
899 warning(_("no common commits"));
901 if (args->stateless_rpc)
904 setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
906 else if (si->nr_ours || si->nr_theirs)
907 alternate_shallow_file = setup_temporary_shallow(si->shallow);
909 alternate_shallow_file = NULL;
910 if (get_pack(args, fd, pack_lockfile))
911 die(_("git fetch-pack: fetch failed."));
917 static void fetch_pack_config(void)
919 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit);
920 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit);
921 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
922 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
923 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
925 git_config(git_default_config, NULL);
928 static void fetch_pack_setup(void)
930 static int did_setup;
934 if (0 <= transfer_unpack_limit)
935 unpack_limit = transfer_unpack_limit;
936 else if (0 <= fetch_unpack_limit)
937 unpack_limit = fetch_unpack_limit;
941 static int remove_duplicates_in_refs(struct ref **ref, int nr)
943 struct string_list names = STRING_LIST_INIT_NODUP;
946 for (src = dst = 0; src < nr; src++) {
947 struct string_list_item *item;
948 item = string_list_insert(&names, ref[src]->name);
950 continue; /* already have it */
951 item->util = ref[src];
956 for (src = dst; src < nr; src++)
958 string_list_clear(&names, 0);
962 static void update_shallow(struct fetch_pack_args *args,
963 struct ref **sought, int nr_sought,
964 struct shallow_info *si)
966 struct sha1_array ref = SHA1_ARRAY_INIT;
970 if (args->deepen && alternate_shallow_file) {
971 if (*alternate_shallow_file == '\0') { /* --unshallow */
972 unlink_or_warn(git_path_shallow());
973 rollback_lock_file(&shallow_lock);
975 commit_lock_file(&shallow_lock);
979 if (!si->shallow || !si->shallow->nr)
984 * remote is shallow, but this is a clone, there are
985 * no objects in repo to worry about. Accept any
986 * shallow points that exist in the pack (iow in repo
987 * after get_pack() and reprepare_packed_git())
989 struct sha1_array extra = SHA1_ARRAY_INIT;
990 unsigned char (*sha1)[20] = si->shallow->sha1;
991 for (i = 0; i < si->shallow->nr; i++)
992 if (has_sha1_file(sha1[i]))
993 sha1_array_append(&extra, sha1[i]);
995 setup_alternate_shallow(&shallow_lock,
996 &alternate_shallow_file,
998 commit_lock_file(&shallow_lock);
1000 sha1_array_clear(&extra);
1004 if (!si->nr_ours && !si->nr_theirs)
1007 remove_nonexistent_theirs_shallow(si);
1008 if (!si->nr_ours && !si->nr_theirs)
1010 for (i = 0; i < nr_sought; i++)
1011 sha1_array_append(&ref, sought[i]->old_oid.hash);
1014 if (args->update_shallow) {
1016 * remote is also shallow, .git/shallow may be updated
1017 * so all refs can be accepted. Make sure we only add
1018 * shallow roots that are actually reachable from new
1021 struct sha1_array extra = SHA1_ARRAY_INIT;
1022 unsigned char (*sha1)[20] = si->shallow->sha1;
1023 assign_shallow_commits_to_refs(si, NULL, NULL);
1024 if (!si->nr_ours && !si->nr_theirs) {
1025 sha1_array_clear(&ref);
1028 for (i = 0; i < si->nr_ours; i++)
1029 sha1_array_append(&extra, sha1[si->ours[i]]);
1030 for (i = 0; i < si->nr_theirs; i++)
1031 sha1_array_append(&extra, sha1[si->theirs[i]]);
1032 setup_alternate_shallow(&shallow_lock,
1033 &alternate_shallow_file,
1035 commit_lock_file(&shallow_lock);
1036 sha1_array_clear(&extra);
1037 sha1_array_clear(&ref);
1042 * remote is also shallow, check what ref is safe to update
1043 * without updating .git/shallow
1045 status = xcalloc(nr_sought, sizeof(*status));
1046 assign_shallow_commits_to_refs(si, NULL, status);
1047 if (si->nr_ours || si->nr_theirs) {
1048 for (i = 0; i < nr_sought; i++)
1050 sought[i]->status = REF_STATUS_REJECT_SHALLOW;
1053 sha1_array_clear(&ref);
1056 struct ref *fetch_pack(struct fetch_pack_args *args,
1057 int fd[], struct child_process *conn,
1058 const struct ref *ref,
1060 struct ref **sought, int nr_sought,
1061 struct sha1_array *shallow,
1062 char **pack_lockfile)
1064 struct ref *ref_cpy;
1065 struct shallow_info si;
1069 nr_sought = remove_duplicates_in_refs(sought, nr_sought);
1072 packet_flush(fd[1]);
1073 die(_("no matching remote head"));
1075 prepare_shallow_info(&si, shallow);
1076 ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
1077 &si, pack_lockfile);
1078 reprepare_packed_git();
1079 update_shallow(args, sought, nr_sought, &si);
1080 clear_shallow_info(&si);