fetch-pack: avoid repeatedly re-scanning pack directory
[git.git] / builtin / fetch-pack.c
blob827765dc1d87216b9c906efc8c064674d768a7ba
1 #include "builtin.h"
2 #include "refs.h"
3 #include "pkt-line.h"
4 #include "commit.h"
5 #include "tag.h"
6 #include "exec_cmd.h"
7 #include "pack.h"
8 #include "sideband.h"
9 #include "fetch-pack.h"
10 #include "remote.h"
11 #include "run-command.h"
12 #include "transport.h"
13 #include "version.h"
15 static int transfer_unpack_limit = -1;
16 static int fetch_unpack_limit = -1;
17 static int unpack_limit = 100;
18 static int prefer_ofs_delta = 1;
19 static int no_done;
20 static int fetch_fsck_objects = -1;
21 static int transfer_fsck_objects = -1;
22 static int agent_supported;
23 static struct fetch_pack_args args = {
24 /* .uploadpack = */ "git-upload-pack",
27 static const char fetch_pack_usage[] =
28 "git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] "
29 "[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
30 "[--no-progress] [-v] [<host>:]<directory> [<refs>...]";
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)
38 static int marked;
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 commit_list *rev_list;
47 static int non_common_revs, multi_ack, use_sideband;
49 static void rev_list_push(struct commit *commit, int mark)
51 if (!(commit->object.flags & mark)) {
52 commit->object.flags |= mark;
54 if (!(commit->object.parsed))
55 if (parse_commit(commit))
56 return;
58 commit_list_insert_by_date(commit, &rev_list);
60 if (!(commit->object.flags & COMMON))
61 non_common_revs++;
65 static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
67 struct object *o = deref_tag(parse_object(sha1), refname, 0);
69 if (o && o->type == OBJ_COMMIT)
70 rev_list_push((struct commit *)o, SEEN);
72 return 0;
75 static int clear_marks(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
77 struct object *o = deref_tag(parse_object(sha1), refname, 0);
79 if (o && o->type == OBJ_COMMIT)
80 clear_commit_marks((struct commit *)o,
81 COMMON | COMMON_REF | SEEN | POPPED);
82 return 0;
86 This function marks a rev and its ancestors as common.
87 In some cases, it is desirable to mark only the ancestors (for example
88 when only the server does not yet know that they are common).
91 static void mark_common(struct commit *commit,
92 int ancestors_only, int dont_parse)
94 if (commit != NULL && !(commit->object.flags & COMMON)) {
95 struct object *o = (struct object *)commit;
97 if (!ancestors_only)
98 o->flags |= COMMON;
100 if (!(o->flags & SEEN))
101 rev_list_push(commit, SEEN);
102 else {
103 struct commit_list *parents;
105 if (!ancestors_only && !(o->flags & POPPED))
106 non_common_revs--;
107 if (!o->parsed && !dont_parse)
108 if (parse_commit(commit))
109 return;
111 for (parents = commit->parents;
112 parents;
113 parents = parents->next)
114 mark_common(parents->item, 0, dont_parse);
120 Get the next rev to send, ignoring the common.
123 static const unsigned char *get_rev(void)
125 struct commit *commit = NULL;
127 while (commit == NULL) {
128 unsigned int mark;
129 struct commit_list *parents;
131 if (rev_list == NULL || non_common_revs == 0)
132 return NULL;
134 commit = rev_list->item;
135 if (!commit->object.parsed)
136 parse_commit(commit);
137 parents = commit->parents;
139 commit->object.flags |= POPPED;
140 if (!(commit->object.flags & COMMON))
141 non_common_revs--;
143 if (commit->object.flags & COMMON) {
144 /* do not send "have", and ignore ancestors */
145 commit = NULL;
146 mark = COMMON | SEEN;
147 } else if (commit->object.flags & COMMON_REF)
148 /* send "have", and ignore ancestors */
149 mark = COMMON | SEEN;
150 else
151 /* send "have", also for its ancestors */
152 mark = SEEN;
154 while (parents) {
155 if (!(parents->item->object.flags & SEEN))
156 rev_list_push(parents->item, mark);
157 if (mark & COMMON)
158 mark_common(parents->item, 1, 0);
159 parents = parents->next;
162 rev_list = rev_list->next;
165 return commit->object.sha1;
168 enum ack_type {
169 NAK = 0,
170 ACK,
171 ACK_continue,
172 ACK_common,
173 ACK_ready
176 static void consume_shallow_list(int fd)
178 if (args.stateless_rpc && args.depth > 0) {
179 /* If we sent a depth we will get back "duplicate"
180 * shallow and unshallow commands every time there
181 * is a block of have lines exchanged.
183 char line[1000];
184 while (packet_read_line(fd, line, sizeof(line))) {
185 if (!prefixcmp(line, "shallow "))
186 continue;
187 if (!prefixcmp(line, "unshallow "))
188 continue;
189 die("git fetch-pack: expected shallow list");
194 struct write_shallow_data {
195 struct strbuf *out;
196 int use_pack_protocol;
197 int count;
200 static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
202 struct write_shallow_data *data = cb_data;
203 const char *hex = sha1_to_hex(graft->sha1);
204 data->count++;
205 if (data->use_pack_protocol)
206 packet_buf_write(data->out, "shallow %s", hex);
207 else {
208 strbuf_addstr(data->out, hex);
209 strbuf_addch(data->out, '\n');
211 return 0;
214 static int write_shallow_commits(struct strbuf *out, int use_pack_protocol)
216 struct write_shallow_data data;
217 data.out = out;
218 data.use_pack_protocol = use_pack_protocol;
219 data.count = 0;
220 for_each_commit_graft(write_one_shallow, &data);
221 return data.count;
224 static enum ack_type get_ack(int fd, unsigned char *result_sha1)
226 static char line[1000];
227 int len = packet_read_line(fd, line, sizeof(line));
229 if (!len)
230 die("git fetch-pack: expected ACK/NAK, got EOF");
231 if (line[len-1] == '\n')
232 line[--len] = 0;
233 if (!strcmp(line, "NAK"))
234 return NAK;
235 if (!prefixcmp(line, "ACK ")) {
236 if (!get_sha1_hex(line+4, result_sha1)) {
237 if (strstr(line+45, "continue"))
238 return ACK_continue;
239 if (strstr(line+45, "common"))
240 return ACK_common;
241 if (strstr(line+45, "ready"))
242 return ACK_ready;
243 return ACK;
246 die("git fetch_pack: expected ACK/NAK, got '%s'", line);
249 static void send_request(int fd, struct strbuf *buf)
251 if (args.stateless_rpc) {
252 send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
253 packet_flush(fd);
254 } else
255 safe_write(fd, buf->buf, buf->len);
258 static void insert_one_alternate_ref(const struct ref *ref, void *unused)
260 rev_list_insert_ref(NULL, ref->old_sha1, 0, NULL);
263 #define INITIAL_FLUSH 16
264 #define PIPESAFE_FLUSH 32
265 #define LARGE_FLUSH 1024
267 static int next_flush(int count)
269 int flush_limit = args.stateless_rpc ? LARGE_FLUSH : PIPESAFE_FLUSH;
271 if (count < flush_limit)
272 count <<= 1;
273 else
274 count += flush_limit;
275 return count;
278 static int find_common(int fd[2], unsigned char *result_sha1,
279 struct ref *refs)
281 int fetching;
282 int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
283 const unsigned char *sha1;
284 unsigned in_vain = 0;
285 int got_continue = 0;
286 int got_ready = 0;
287 struct strbuf req_buf = STRBUF_INIT;
288 size_t state_len = 0;
290 if (args.stateless_rpc && multi_ack == 1)
291 die("--stateless-rpc requires multi_ack_detailed");
292 if (marked)
293 for_each_ref(clear_marks, NULL);
294 marked = 1;
296 for_each_ref(rev_list_insert_ref, NULL);
297 for_each_alternate_ref(insert_one_alternate_ref, NULL);
299 fetching = 0;
300 for ( ; refs ; refs = refs->next) {
301 unsigned char *remote = refs->old_sha1;
302 const char *remote_hex;
303 struct object *o;
306 * If that object is complete (i.e. it is an ancestor of a
307 * local ref), we tell them we have it but do not have to
308 * tell them about its ancestors, which they already know
309 * about.
311 * We use lookup_object here because we are only
312 * interested in the case we *know* the object is
313 * reachable and we have already scanned it.
315 if (((o = lookup_object(remote)) != NULL) &&
316 (o->flags & COMPLETE)) {
317 continue;
320 remote_hex = sha1_to_hex(remote);
321 if (!fetching) {
322 struct strbuf c = STRBUF_INIT;
323 if (multi_ack == 2) strbuf_addstr(&c, " multi_ack_detailed");
324 if (multi_ack == 1) strbuf_addstr(&c, " multi_ack");
325 if (no_done) strbuf_addstr(&c, " no-done");
326 if (use_sideband == 2) strbuf_addstr(&c, " side-band-64k");
327 if (use_sideband == 1) strbuf_addstr(&c, " side-band");
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 (agent_supported) strbuf_addf(&c, " agent=%s",
333 git_user_agent_sanitized());
334 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
335 strbuf_release(&c);
336 } else
337 packet_buf_write(&req_buf, "want %s\n", remote_hex);
338 fetching++;
341 if (!fetching) {
342 strbuf_release(&req_buf);
343 packet_flush(fd[1]);
344 return 1;
347 if (is_repository_shallow())
348 write_shallow_commits(&req_buf, 1);
349 if (args.depth > 0)
350 packet_buf_write(&req_buf, "deepen %d", args.depth);
351 packet_buf_flush(&req_buf);
352 state_len = req_buf.len;
354 if (args.depth > 0) {
355 char line[1024];
356 unsigned char sha1[20];
358 send_request(fd[1], &req_buf);
359 while (packet_read_line(fd[0], line, sizeof(line))) {
360 if (!prefixcmp(line, "shallow ")) {
361 if (get_sha1_hex(line + 8, sha1))
362 die("invalid shallow line: %s", line);
363 register_shallow(sha1);
364 continue;
366 if (!prefixcmp(line, "unshallow ")) {
367 if (get_sha1_hex(line + 10, sha1))
368 die("invalid unshallow line: %s", line);
369 if (!lookup_object(sha1))
370 die("object not found: %s", line);
371 /* make sure that it is parsed as shallow */
372 if (!parse_object(sha1))
373 die("error in object: %s", line);
374 if (unregister_shallow(sha1))
375 die("no shallow found: %s", line);
376 continue;
378 die("expected shallow/unshallow, got %s", line);
380 } else if (!args.stateless_rpc)
381 send_request(fd[1], &req_buf);
383 if (!args.stateless_rpc) {
384 /* If we aren't using the stateless-rpc interface
385 * we don't need to retain the headers.
387 strbuf_setlen(&req_buf, 0);
388 state_len = 0;
391 flushes = 0;
392 retval = -1;
393 while ((sha1 = get_rev())) {
394 packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
395 if (args.verbose)
396 fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
397 in_vain++;
398 if (flush_at <= ++count) {
399 int ack;
401 packet_buf_flush(&req_buf);
402 send_request(fd[1], &req_buf);
403 strbuf_setlen(&req_buf, state_len);
404 flushes++;
405 flush_at = next_flush(count);
408 * We keep one window "ahead" of the other side, and
409 * will wait for an ACK only on the next one
411 if (!args.stateless_rpc && count == INITIAL_FLUSH)
412 continue;
414 consume_shallow_list(fd[0]);
415 do {
416 ack = get_ack(fd[0], result_sha1);
417 if (args.verbose && ack)
418 fprintf(stderr, "got ack %d %s\n", ack,
419 sha1_to_hex(result_sha1));
420 switch (ack) {
421 case ACK:
422 flushes = 0;
423 multi_ack = 0;
424 retval = 0;
425 goto done;
426 case ACK_common:
427 case ACK_ready:
428 case ACK_continue: {
429 struct commit *commit =
430 lookup_commit(result_sha1);
431 if (!commit)
432 die("invalid commit %s", sha1_to_hex(result_sha1));
433 if (args.stateless_rpc
434 && ack == ACK_common
435 && !(commit->object.flags & COMMON)) {
436 /* We need to replay the have for this object
437 * on the next RPC request so the peer knows
438 * it is in common with us.
440 const char *hex = sha1_to_hex(result_sha1);
441 packet_buf_write(&req_buf, "have %s\n", hex);
442 state_len = req_buf.len;
444 mark_common(commit, 0, 1);
445 retval = 0;
446 in_vain = 0;
447 got_continue = 1;
448 if (ack == ACK_ready) {
449 rev_list = NULL;
450 got_ready = 1;
452 break;
455 } while (ack);
456 flushes--;
457 if (got_continue && MAX_IN_VAIN < in_vain) {
458 if (args.verbose)
459 fprintf(stderr, "giving up\n");
460 break; /* give up */
464 done:
465 if (!got_ready || !no_done) {
466 packet_buf_write(&req_buf, "done\n");
467 send_request(fd[1], &req_buf);
469 if (args.verbose)
470 fprintf(stderr, "done\n");
471 if (retval != 0) {
472 multi_ack = 0;
473 flushes++;
475 strbuf_release(&req_buf);
477 consume_shallow_list(fd[0]);
478 while (flushes || multi_ack) {
479 int ack = get_ack(fd[0], result_sha1);
480 if (ack) {
481 if (args.verbose)
482 fprintf(stderr, "got ack (%d) %s\n", ack,
483 sha1_to_hex(result_sha1));
484 if (ack == ACK)
485 return 0;
486 multi_ack = 1;
487 continue;
489 flushes--;
491 /* it is no error to fetch into a completely empty repo */
492 return count ? retval : 0;
495 static struct commit_list *complete;
497 static int mark_complete(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
499 struct object *o = parse_object(sha1);
501 while (o && o->type == OBJ_TAG) {
502 struct tag *t = (struct tag *) o;
503 if (!t->tagged)
504 break; /* broken repository */
505 o->flags |= COMPLETE;
506 o = parse_object(t->tagged->sha1);
508 if (o && o->type == OBJ_COMMIT) {
509 struct commit *commit = (struct commit *)o;
510 if (!(commit->object.flags & COMPLETE)) {
511 commit->object.flags |= COMPLETE;
512 commit_list_insert_by_date(commit, &complete);
515 return 0;
518 static void mark_recent_complete_commits(unsigned long cutoff)
520 while (complete && cutoff <= complete->item->date) {
521 if (args.verbose)
522 fprintf(stderr, "Marking %s as complete\n",
523 sha1_to_hex(complete->item->object.sha1));
524 pop_most_recent_commit(&complete, COMPLETE);
528 static void filter_refs(struct ref **refs, int nr_match, char **match)
530 struct ref **return_refs;
531 struct ref *newlist = NULL;
532 struct ref **newtail = &newlist;
533 struct ref *ref, *next;
534 struct ref *fastarray[32];
535 int match_pos;
537 if (nr_match && !args.fetch_all) {
538 if (ARRAY_SIZE(fastarray) < nr_match)
539 return_refs = xcalloc(nr_match, sizeof(struct ref *));
540 else {
541 return_refs = fastarray;
542 memset(return_refs, 0, sizeof(struct ref *) * nr_match);
545 else
546 return_refs = NULL;
548 match_pos = 0;
549 for (ref = *refs; ref; ref = next) {
550 next = ref->next;
551 if (!memcmp(ref->name, "refs/", 5) &&
552 check_refname_format(ref->name + 5, 0))
553 ; /* trash */
554 else if (args.fetch_all &&
555 (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
556 *newtail = ref;
557 ref->next = NULL;
558 newtail = &ref->next;
559 continue;
561 else {
562 int cmp = -1;
563 while (match_pos < nr_match) {
564 cmp = strcmp(ref->name, match[match_pos]);
565 if (cmp < 0) /* definitely do not have it */
566 break;
567 else if (cmp == 0) { /* definitely have it */
568 match[match_pos][0] = '\0';
569 return_refs[match_pos] = ref;
570 break;
572 else /* might have it; keep looking */
573 match_pos++;
575 if (!cmp)
576 continue; /* we will link it later */
578 free(ref);
581 if (!args.fetch_all) {
582 int i;
583 for (i = 0; i < nr_match; i++) {
584 ref = return_refs[i];
585 if (ref) {
586 *newtail = ref;
587 ref->next = NULL;
588 newtail = &ref->next;
591 if (return_refs != fastarray)
592 free(return_refs);
594 *refs = newlist;
597 static void mark_alternate_complete(const struct ref *ref, void *unused)
599 mark_complete(NULL, ref->old_sha1, 0, NULL);
602 static int everything_local(struct ref **refs, int nr_match, char **match)
604 struct ref *ref;
605 int retval;
606 unsigned long cutoff = 0;
608 save_commit_buffer = 0;
610 for (ref = *refs; ref; ref = ref->next) {
611 struct object *o;
613 if (!has_sha1_file(ref->old_sha1))
614 continue;
616 o = parse_object(ref->old_sha1);
617 if (!o)
618 continue;
620 /* We already have it -- which may mean that we were
621 * in sync with the other side at some time after
622 * that (it is OK if we guess wrong here).
624 if (o->type == OBJ_COMMIT) {
625 struct commit *commit = (struct commit *)o;
626 if (!cutoff || cutoff < commit->date)
627 cutoff = commit->date;
631 if (!args.depth) {
632 for_each_ref(mark_complete, NULL);
633 for_each_alternate_ref(mark_alternate_complete, NULL);
634 if (cutoff)
635 mark_recent_complete_commits(cutoff);
639 * Mark all complete remote refs as common refs.
640 * Don't mark them common yet; the server has to be told so first.
642 for (ref = *refs; ref; ref = ref->next) {
643 struct object *o = deref_tag(lookup_object(ref->old_sha1),
644 NULL, 0);
646 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
647 continue;
649 if (!(o->flags & SEEN)) {
650 rev_list_push((struct commit *)o, COMMON_REF | SEEN);
652 mark_common((struct commit *)o, 1, 1);
656 filter_refs(refs, nr_match, match);
658 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
659 const unsigned char *remote = ref->old_sha1;
660 unsigned char local[20];
661 struct object *o;
663 o = lookup_object(remote);
664 if (!o || !(o->flags & COMPLETE)) {
665 retval = 0;
666 if (!args.verbose)
667 continue;
668 fprintf(stderr,
669 "want %s (%s)\n", sha1_to_hex(remote),
670 ref->name);
671 continue;
674 hashcpy(ref->new_sha1, local);
675 if (!args.verbose)
676 continue;
677 fprintf(stderr,
678 "already have %s (%s)\n", sha1_to_hex(remote),
679 ref->name);
681 return retval;
684 static int sideband_demux(int in, int out, void *data)
686 int *xd = data;
688 int ret = recv_sideband("fetch-pack", xd[0], out);
689 close(out);
690 return ret;
693 static int get_pack(int xd[2], char **pack_lockfile)
695 struct async demux;
696 const char *argv[20];
697 char keep_arg[256];
698 char hdr_arg[256];
699 const char **av;
700 int do_keep = args.keep_pack;
701 struct child_process cmd;
703 memset(&demux, 0, sizeof(demux));
704 if (use_sideband) {
705 /* xd[] is talking with upload-pack; subprocess reads from
706 * xd[0], spits out band#2 to stderr, and feeds us band#1
707 * through demux->out.
709 demux.proc = sideband_demux;
710 demux.data = xd;
711 demux.out = -1;
712 if (start_async(&demux))
713 die("fetch-pack: unable to fork off sideband"
714 " demultiplexer");
716 else
717 demux.out = xd[0];
719 memset(&cmd, 0, sizeof(cmd));
720 cmd.argv = argv;
721 av = argv;
722 *hdr_arg = 0;
723 if (!args.keep_pack && unpack_limit) {
724 struct pack_header header;
726 if (read_pack_header(demux.out, &header))
727 die("protocol error: bad pack header");
728 snprintf(hdr_arg, sizeof(hdr_arg),
729 "--pack_header=%"PRIu32",%"PRIu32,
730 ntohl(header.hdr_version), ntohl(header.hdr_entries));
731 if (ntohl(header.hdr_entries) < unpack_limit)
732 do_keep = 0;
733 else
734 do_keep = 1;
737 if (do_keep) {
738 if (pack_lockfile)
739 cmd.out = -1;
740 *av++ = "index-pack";
741 *av++ = "--stdin";
742 if (!args.quiet && !args.no_progress)
743 *av++ = "-v";
744 if (args.use_thin_pack)
745 *av++ = "--fix-thin";
746 if (args.lock_pack || unpack_limit) {
747 int s = sprintf(keep_arg,
748 "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
749 if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
750 strcpy(keep_arg + s, "localhost");
751 *av++ = keep_arg;
754 else {
755 *av++ = "unpack-objects";
756 if (args.quiet || args.no_progress)
757 *av++ = "-q";
759 if (*hdr_arg)
760 *av++ = hdr_arg;
761 if (fetch_fsck_objects >= 0
762 ? fetch_fsck_objects
763 : transfer_fsck_objects >= 0
764 ? transfer_fsck_objects
765 : 0)
766 *av++ = "--strict";
767 *av++ = NULL;
769 cmd.in = demux.out;
770 cmd.git_cmd = 1;
771 if (start_command(&cmd))
772 die("fetch-pack: unable to fork off %s", argv[0]);
773 if (do_keep && pack_lockfile) {
774 *pack_lockfile = index_pack_lockfile(cmd.out);
775 close(cmd.out);
778 if (finish_command(&cmd))
779 die("%s failed", argv[0]);
780 if (use_sideband && finish_async(&demux))
781 die("error in sideband demultiplexer");
782 return 0;
785 static struct ref *do_fetch_pack(int fd[2],
786 const struct ref *orig_ref,
787 int nr_match,
788 char **match,
789 char **pack_lockfile)
791 struct ref *ref = copy_ref_list(orig_ref);
792 unsigned char sha1[20];
793 const char *agent_feature;
794 int agent_len;
796 sort_ref_list(&ref, ref_compare_name);
798 if (is_repository_shallow() && !server_supports("shallow"))
799 die("Server does not support shallow clients");
800 if (server_supports("multi_ack_detailed")) {
801 if (args.verbose)
802 fprintf(stderr, "Server supports multi_ack_detailed\n");
803 multi_ack = 2;
804 if (server_supports("no-done")) {
805 if (args.verbose)
806 fprintf(stderr, "Server supports no-done\n");
807 if (args.stateless_rpc)
808 no_done = 1;
811 else if (server_supports("multi_ack")) {
812 if (args.verbose)
813 fprintf(stderr, "Server supports multi_ack\n");
814 multi_ack = 1;
816 if (server_supports("side-band-64k")) {
817 if (args.verbose)
818 fprintf(stderr, "Server supports side-band-64k\n");
819 use_sideband = 2;
821 else if (server_supports("side-band")) {
822 if (args.verbose)
823 fprintf(stderr, "Server supports side-band\n");
824 use_sideband = 1;
826 if (!server_supports("thin-pack"))
827 args.use_thin_pack = 0;
828 if (!server_supports("no-progress"))
829 args.no_progress = 0;
830 if (!server_supports("include-tag"))
831 args.include_tag = 0;
832 if (server_supports("ofs-delta")) {
833 if (args.verbose)
834 fprintf(stderr, "Server supports ofs-delta\n");
835 } else
836 prefer_ofs_delta = 0;
838 if ((agent_feature = server_feature_value("agent", &agent_len))) {
839 agent_supported = 1;
840 if (args.verbose && agent_len)
841 fprintf(stderr, "Server version is %.*s\n",
842 agent_len, agent_feature);
845 if (everything_local(&ref, nr_match, match)) {
846 packet_flush(fd[1]);
847 goto all_done;
849 if (find_common(fd, sha1, ref) < 0)
850 if (!args.keep_pack)
851 /* When cloning, it is not unusual to have
852 * no common commit.
854 warning("no common commits");
856 if (args.stateless_rpc)
857 packet_flush(fd[1]);
858 if (get_pack(fd, pack_lockfile))
859 die("git fetch-pack: fetch failed.");
861 all_done:
862 return ref;
865 static int remove_duplicates(int nr_heads, char **heads)
867 int src, dst;
869 if (!nr_heads)
870 return 0;
872 for (src = dst = 1; src < nr_heads; src++)
873 if (strcmp(heads[src], heads[dst-1]))
874 heads[dst++] = heads[src];
875 return dst;
878 static int fetch_pack_config(const char *var, const char *value, void *cb)
880 if (strcmp(var, "fetch.unpacklimit") == 0) {
881 fetch_unpack_limit = git_config_int(var, value);
882 return 0;
885 if (strcmp(var, "transfer.unpacklimit") == 0) {
886 transfer_unpack_limit = git_config_int(var, value);
887 return 0;
890 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
891 prefer_ofs_delta = git_config_bool(var, value);
892 return 0;
895 if (!strcmp(var, "fetch.fsckobjects")) {
896 fetch_fsck_objects = git_config_bool(var, value);
897 return 0;
900 if (!strcmp(var, "transfer.fsckobjects")) {
901 transfer_fsck_objects = git_config_bool(var, value);
902 return 0;
905 return git_default_config(var, value, cb);
908 static struct lock_file lock;
910 static void fetch_pack_setup(void)
912 static int did_setup;
913 if (did_setup)
914 return;
915 git_config(fetch_pack_config, NULL);
916 if (0 <= transfer_unpack_limit)
917 unpack_limit = transfer_unpack_limit;
918 else if (0 <= fetch_unpack_limit)
919 unpack_limit = fetch_unpack_limit;
920 did_setup = 1;
923 int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
925 int i, ret;
926 struct ref *ref = NULL;
927 const char *dest = NULL;
928 int alloc_heads = 0, nr_heads = 0;
929 char **heads = NULL;
930 int fd[2];
931 char *pack_lockfile = NULL;
932 char **pack_lockfile_ptr = NULL;
933 struct child_process *conn;
935 packet_trace_identity("fetch-pack");
937 for (i = 1; i < argc && *argv[i] == '-'; i++) {
938 const char *arg = argv[i];
940 if (!prefixcmp(arg, "--upload-pack=")) {
941 args.uploadpack = arg + 14;
942 continue;
944 if (!prefixcmp(arg, "--exec=")) {
945 args.uploadpack = arg + 7;
946 continue;
948 if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) {
949 args.quiet = 1;
950 continue;
952 if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
953 args.lock_pack = args.keep_pack;
954 args.keep_pack = 1;
955 continue;
957 if (!strcmp("--thin", arg)) {
958 args.use_thin_pack = 1;
959 continue;
961 if (!strcmp("--include-tag", arg)) {
962 args.include_tag = 1;
963 continue;
965 if (!strcmp("--all", arg)) {
966 args.fetch_all = 1;
967 continue;
969 if (!strcmp("--stdin", arg)) {
970 args.stdin_refs = 1;
971 continue;
973 if (!strcmp("-v", arg)) {
974 args.verbose = 1;
975 continue;
977 if (!prefixcmp(arg, "--depth=")) {
978 args.depth = strtol(arg + 8, NULL, 0);
979 continue;
981 if (!strcmp("--no-progress", arg)) {
982 args.no_progress = 1;
983 continue;
985 if (!strcmp("--stateless-rpc", arg)) {
986 args.stateless_rpc = 1;
987 continue;
989 if (!strcmp("--lock-pack", arg)) {
990 args.lock_pack = 1;
991 pack_lockfile_ptr = &pack_lockfile;
992 continue;
994 usage(fetch_pack_usage);
997 if (i < argc)
998 dest = argv[i++];
999 else
1000 usage(fetch_pack_usage);
1003 * Copy refs from cmdline to growable list, then append any
1004 * refs from the standard input:
1006 ALLOC_GROW(heads, argc - i, alloc_heads);
1007 for (; i < argc; i++)
1008 heads[nr_heads++] = xstrdup(argv[i]);
1009 if (args.stdin_refs) {
1010 if (args.stateless_rpc) {
1011 /* in stateless RPC mode we use pkt-line to read
1012 * from stdin, until we get a flush packet
1014 static char line[1000];
1015 for (;;) {
1016 int n = packet_read_line(0, line, sizeof(line));
1017 if (!n)
1018 break;
1019 if (line[n-1] == '\n')
1020 n--;
1021 ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
1022 heads[nr_heads++] = xmemdupz(line, n);
1025 else {
1026 /* read from stdin one ref per line, until EOF */
1027 struct strbuf line = STRBUF_INIT;
1028 while (strbuf_getline(&line, stdin, '\n') != EOF) {
1029 ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
1030 heads[nr_heads++] = strbuf_detach(&line, NULL);
1032 strbuf_release(&line);
1036 if (args.stateless_rpc) {
1037 conn = NULL;
1038 fd[0] = 0;
1039 fd[1] = 1;
1040 } else {
1041 conn = git_connect(fd, dest, args.uploadpack,
1042 args.verbose ? CONNECT_VERBOSE : 0);
1045 get_remote_heads(fd[0], &ref, 0, NULL);
1047 ref = fetch_pack(&args, fd, conn, ref, dest,
1048 nr_heads, heads, pack_lockfile_ptr);
1049 if (pack_lockfile) {
1050 printf("lock %s\n", pack_lockfile);
1051 fflush(stdout);
1053 close(fd[0]);
1054 close(fd[1]);
1055 if (finish_connect(conn))
1056 ref = NULL;
1057 ret = !ref;
1059 if (!ret && nr_heads) {
1060 /* If the heads to pull were given, we should have
1061 * consumed all of them by matching the remote.
1062 * Otherwise, 'git fetch remote no-such-ref' would
1063 * silently succeed without issuing an error.
1065 for (i = 0; i < nr_heads; i++)
1066 if (heads[i] && heads[i][0]) {
1067 error("no such remote ref %s", heads[i]);
1068 ret = 1;
1071 while (ref) {
1072 printf("%s %s\n",
1073 sha1_to_hex(ref->old_sha1), ref->name);
1074 ref = ref->next;
1077 return ret;
1080 static int compare_heads(const void *a, const void *b)
1082 return strcmp(*(const char **)a, *(const char **)b);
1085 struct ref *fetch_pack(struct fetch_pack_args *my_args,
1086 int fd[], struct child_process *conn,
1087 const struct ref *ref,
1088 const char *dest,
1089 int nr_heads,
1090 char **heads,
1091 char **pack_lockfile)
1093 struct stat st;
1094 struct ref *ref_cpy;
1096 fetch_pack_setup();
1097 if (&args != my_args)
1098 memcpy(&args, my_args, sizeof(args));
1099 if (args.depth > 0) {
1100 if (stat(git_path("shallow"), &st))
1101 st.st_mtime = 0;
1104 if (heads && nr_heads) {
1105 qsort(heads, nr_heads, sizeof(*heads), compare_heads);
1106 nr_heads = remove_duplicates(nr_heads, heads);
1109 if (!ref) {
1110 packet_flush(fd[1]);
1111 die("no matching remote head");
1113 ref_cpy = do_fetch_pack(fd, ref, nr_heads, heads, pack_lockfile);
1115 if (args.depth > 0) {
1116 struct cache_time mtime;
1117 struct strbuf sb = STRBUF_INIT;
1118 char *shallow = git_path("shallow");
1119 int fd;
1121 mtime.sec = st.st_mtime;
1122 mtime.nsec = ST_MTIME_NSEC(st);
1123 if (stat(shallow, &st)) {
1124 if (mtime.sec)
1125 die("shallow file was removed during fetch");
1126 } else if (st.st_mtime != mtime.sec
1127 #ifdef USE_NSEC
1128 || ST_MTIME_NSEC(st) != mtime.nsec
1129 #endif
1131 die("shallow file was changed during fetch");
1133 fd = hold_lock_file_for_update(&lock, shallow,
1134 LOCK_DIE_ON_ERROR);
1135 if (!write_shallow_commits(&sb, 0)
1136 || write_in_full(fd, sb.buf, sb.len) != sb.len) {
1137 unlink_or_warn(shallow);
1138 rollback_lock_file(&lock);
1139 } else {
1140 commit_lock_file(&lock);
1142 strbuf_release(&sb);
1145 reprepare_packed_git();
1146 return ref_cpy;