fetch-pack: remove global (static) configuration variable "args"
[git.git] / builtin / fetch-pack.c
blobd0fd7076efe414e3fdc15c4b0e751331684d0a37
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;
24 static const char fetch_pack_usage[] =
25 "git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] "
26 "[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
27 "[--no-progress] [-v] [<host>:]<directory> [<refs>...]";
29 #define COMPLETE (1U << 0)
30 #define COMMON (1U << 1)
31 #define COMMON_REF (1U << 2)
32 #define SEEN (1U << 3)
33 #define POPPED (1U << 4)
35 static int marked;
38 * After sending this many "have"s if we do not get any new ACK , we
39 * give up traversing our history.
41 #define MAX_IN_VAIN 256
43 static struct commit_list *rev_list;
44 static int non_common_revs, multi_ack, use_sideband;
46 static void rev_list_push(struct commit *commit, int mark)
48 if (!(commit->object.flags & mark)) {
49 commit->object.flags |= mark;
51 if (!(commit->object.parsed))
52 if (parse_commit(commit))
53 return;
55 commit_list_insert_by_date(commit, &rev_list);
57 if (!(commit->object.flags & COMMON))
58 non_common_revs++;
62 static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
64 struct object *o = deref_tag(parse_object(sha1), refname, 0);
66 if (o && o->type == OBJ_COMMIT)
67 rev_list_push((struct commit *)o, SEEN);
69 return 0;
72 static int clear_marks(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
74 struct object *o = deref_tag(parse_object(sha1), refname, 0);
76 if (o && o->type == OBJ_COMMIT)
77 clear_commit_marks((struct commit *)o,
78 COMMON | COMMON_REF | SEEN | POPPED);
79 return 0;
83 This function marks a rev and its ancestors as common.
84 In some cases, it is desirable to mark only the ancestors (for example
85 when only the server does not yet know that they are common).
88 static void mark_common(struct commit *commit,
89 int ancestors_only, int dont_parse)
91 if (commit != NULL && !(commit->object.flags & COMMON)) {
92 struct object *o = (struct object *)commit;
94 if (!ancestors_only)
95 o->flags |= COMMON;
97 if (!(o->flags & SEEN))
98 rev_list_push(commit, SEEN);
99 else {
100 struct commit_list *parents;
102 if (!ancestors_only && !(o->flags & POPPED))
103 non_common_revs--;
104 if (!o->parsed && !dont_parse)
105 if (parse_commit(commit))
106 return;
108 for (parents = commit->parents;
109 parents;
110 parents = parents->next)
111 mark_common(parents->item, 0, dont_parse);
117 Get the next rev to send, ignoring the common.
120 static const unsigned char *get_rev(void)
122 struct commit *commit = NULL;
124 while (commit == NULL) {
125 unsigned int mark;
126 struct commit_list *parents;
128 if (rev_list == NULL || non_common_revs == 0)
129 return NULL;
131 commit = rev_list->item;
132 if (!commit->object.parsed)
133 parse_commit(commit);
134 parents = commit->parents;
136 commit->object.flags |= POPPED;
137 if (!(commit->object.flags & COMMON))
138 non_common_revs--;
140 if (commit->object.flags & COMMON) {
141 /* do not send "have", and ignore ancestors */
142 commit = NULL;
143 mark = COMMON | SEEN;
144 } else if (commit->object.flags & COMMON_REF)
145 /* send "have", and ignore ancestors */
146 mark = COMMON | SEEN;
147 else
148 /* send "have", also for its ancestors */
149 mark = SEEN;
151 while (parents) {
152 if (!(parents->item->object.flags & SEEN))
153 rev_list_push(parents->item, mark);
154 if (mark & COMMON)
155 mark_common(parents->item, 1, 0);
156 parents = parents->next;
159 rev_list = rev_list->next;
162 return commit->object.sha1;
165 enum ack_type {
166 NAK = 0,
167 ACK,
168 ACK_continue,
169 ACK_common,
170 ACK_ready
173 static void consume_shallow_list(struct fetch_pack_args *args, int fd)
175 if (args->stateless_rpc && args->depth > 0) {
176 /* If we sent a depth we will get back "duplicate"
177 * shallow and unshallow commands every time there
178 * is a block of have lines exchanged.
180 char line[1000];
181 while (packet_read_line(fd, line, sizeof(line))) {
182 if (!prefixcmp(line, "shallow "))
183 continue;
184 if (!prefixcmp(line, "unshallow "))
185 continue;
186 die("git fetch-pack: expected shallow list");
191 struct write_shallow_data {
192 struct strbuf *out;
193 int use_pack_protocol;
194 int count;
197 static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
199 struct write_shallow_data *data = cb_data;
200 const char *hex = sha1_to_hex(graft->sha1);
201 data->count++;
202 if (data->use_pack_protocol)
203 packet_buf_write(data->out, "shallow %s", hex);
204 else {
205 strbuf_addstr(data->out, hex);
206 strbuf_addch(data->out, '\n');
208 return 0;
211 static int write_shallow_commits(struct strbuf *out, int use_pack_protocol)
213 struct write_shallow_data data;
214 data.out = out;
215 data.use_pack_protocol = use_pack_protocol;
216 data.count = 0;
217 for_each_commit_graft(write_one_shallow, &data);
218 return data.count;
221 static enum ack_type get_ack(int fd, unsigned char *result_sha1)
223 static char line[1000];
224 int len = packet_read_line(fd, line, sizeof(line));
226 if (!len)
227 die("git fetch-pack: expected ACK/NAK, got EOF");
228 if (line[len-1] == '\n')
229 line[--len] = 0;
230 if (!strcmp(line, "NAK"))
231 return NAK;
232 if (!prefixcmp(line, "ACK ")) {
233 if (!get_sha1_hex(line+4, result_sha1)) {
234 if (strstr(line+45, "continue"))
235 return ACK_continue;
236 if (strstr(line+45, "common"))
237 return ACK_common;
238 if (strstr(line+45, "ready"))
239 return ACK_ready;
240 return ACK;
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);
251 packet_flush(fd);
252 } else
253 safe_write(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_sha1, 0, NULL);
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)
270 count <<= 1;
271 else
272 count += flush_limit;
273 return count;
276 static int find_common(struct fetch_pack_args *args,
277 int fd[2], unsigned char *result_sha1,
278 struct ref *refs)
280 int fetching;
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;
285 int got_ready = 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");
291 if (marked)
292 for_each_ref(clear_marks, NULL);
293 marked = 1;
295 for_each_ref(rev_list_insert_ref, NULL);
296 for_each_alternate_ref(insert_one_alternate_ref, NULL);
298 fetching = 0;
299 for ( ; refs ; refs = refs->next) {
300 unsigned char *remote = refs->old_sha1;
301 const char *remote_hex;
302 struct object *o;
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
308 * about.
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)) {
316 continue;
319 remote_hex = sha1_to_hex(remote);
320 if (!fetching) {
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->use_thin_pack) strbuf_addstr(&c, " thin-pack");
328 if (args->no_progress) strbuf_addstr(&c, " no-progress");
329 if (args->include_tag) strbuf_addstr(&c, " include-tag");
330 if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta");
331 if (agent_supported) strbuf_addf(&c, " agent=%s",
332 git_user_agent_sanitized());
333 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
334 strbuf_release(&c);
335 } else
336 packet_buf_write(&req_buf, "want %s\n", remote_hex);
337 fetching++;
340 if (!fetching) {
341 strbuf_release(&req_buf);
342 packet_flush(fd[1]);
343 return 1;
346 if (is_repository_shallow())
347 write_shallow_commits(&req_buf, 1);
348 if (args->depth > 0)
349 packet_buf_write(&req_buf, "deepen %d", args->depth);
350 packet_buf_flush(&req_buf);
351 state_len = req_buf.len;
353 if (args->depth > 0) {
354 char line[1024];
355 unsigned char sha1[20];
357 send_request(args, fd[1], &req_buf);
358 while (packet_read_line(fd[0], line, sizeof(line))) {
359 if (!prefixcmp(line, "shallow ")) {
360 if (get_sha1_hex(line + 8, sha1))
361 die("invalid shallow line: %s", line);
362 register_shallow(sha1);
363 continue;
365 if (!prefixcmp(line, "unshallow ")) {
366 if (get_sha1_hex(line + 10, sha1))
367 die("invalid unshallow line: %s", line);
368 if (!lookup_object(sha1))
369 die("object not found: %s", line);
370 /* make sure that it is parsed as shallow */
371 if (!parse_object(sha1))
372 die("error in object: %s", line);
373 if (unregister_shallow(sha1))
374 die("no shallow found: %s", line);
375 continue;
377 die("expected shallow/unshallow, got %s", line);
379 } else if (!args->stateless_rpc)
380 send_request(args, fd[1], &req_buf);
382 if (!args->stateless_rpc) {
383 /* If we aren't using the stateless-rpc interface
384 * we don't need to retain the headers.
386 strbuf_setlen(&req_buf, 0);
387 state_len = 0;
390 flushes = 0;
391 retval = -1;
392 while ((sha1 = get_rev())) {
393 packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
394 if (args->verbose)
395 fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
396 in_vain++;
397 if (flush_at <= ++count) {
398 int ack;
400 packet_buf_flush(&req_buf);
401 send_request(args, fd[1], &req_buf);
402 strbuf_setlen(&req_buf, state_len);
403 flushes++;
404 flush_at = next_flush(args, count);
407 * We keep one window "ahead" of the other side, and
408 * will wait for an ACK only on the next one
410 if (!args->stateless_rpc && count == INITIAL_FLUSH)
411 continue;
413 consume_shallow_list(args, fd[0]);
414 do {
415 ack = get_ack(fd[0], result_sha1);
416 if (args->verbose && ack)
417 fprintf(stderr, "got ack %d %s\n", ack,
418 sha1_to_hex(result_sha1));
419 switch (ack) {
420 case ACK:
421 flushes = 0;
422 multi_ack = 0;
423 retval = 0;
424 goto done;
425 case ACK_common:
426 case ACK_ready:
427 case ACK_continue: {
428 struct commit *commit =
429 lookup_commit(result_sha1);
430 if (!commit)
431 die("invalid commit %s", sha1_to_hex(result_sha1));
432 if (args->stateless_rpc
433 && ack == ACK_common
434 && !(commit->object.flags & COMMON)) {
435 /* We need to replay the have for this object
436 * on the next RPC request so the peer knows
437 * it is in common with us.
439 const char *hex = sha1_to_hex(result_sha1);
440 packet_buf_write(&req_buf, "have %s\n", hex);
441 state_len = req_buf.len;
443 mark_common(commit, 0, 1);
444 retval = 0;
445 in_vain = 0;
446 got_continue = 1;
447 if (ack == ACK_ready) {
448 rev_list = NULL;
449 got_ready = 1;
451 break;
454 } while (ack);
455 flushes--;
456 if (got_continue && MAX_IN_VAIN < in_vain) {
457 if (args->verbose)
458 fprintf(stderr, "giving up\n");
459 break; /* give up */
463 done:
464 if (!got_ready || !no_done) {
465 packet_buf_write(&req_buf, "done\n");
466 send_request(args, fd[1], &req_buf);
468 if (args->verbose)
469 fprintf(stderr, "done\n");
470 if (retval != 0) {
471 multi_ack = 0;
472 flushes++;
474 strbuf_release(&req_buf);
476 consume_shallow_list(args, fd[0]);
477 while (flushes || multi_ack) {
478 int ack = get_ack(fd[0], result_sha1);
479 if (ack) {
480 if (args->verbose)
481 fprintf(stderr, "got ack (%d) %s\n", ack,
482 sha1_to_hex(result_sha1));
483 if (ack == ACK)
484 return 0;
485 multi_ack = 1;
486 continue;
488 flushes--;
490 /* it is no error to fetch into a completely empty repo */
491 return count ? retval : 0;
494 static struct commit_list *complete;
496 static int mark_complete(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
498 struct object *o = parse_object(sha1);
500 while (o && o->type == OBJ_TAG) {
501 struct tag *t = (struct tag *) o;
502 if (!t->tagged)
503 break; /* broken repository */
504 o->flags |= COMPLETE;
505 o = parse_object(t->tagged->sha1);
507 if (o && o->type == OBJ_COMMIT) {
508 struct commit *commit = (struct commit *)o;
509 if (!(commit->object.flags & COMPLETE)) {
510 commit->object.flags |= COMPLETE;
511 commit_list_insert_by_date(commit, &complete);
514 return 0;
517 static void mark_recent_complete_commits(struct fetch_pack_args *args,
518 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 int non_matching_ref(struct string_list_item *item, void *unused)
530 if (item->util) {
531 item->util = NULL;
532 return 0;
534 else
535 return 1;
538 static void filter_refs(struct fetch_pack_args *args,
539 struct ref **refs, struct string_list *sought)
541 struct ref *newlist = NULL;
542 struct ref **newtail = &newlist;
543 struct ref *ref, *next;
544 int sought_pos;
546 sought_pos = 0;
547 for (ref = *refs; ref; ref = next) {
548 int keep = 0;
549 next = ref->next;
550 if (!memcmp(ref->name, "refs/", 5) &&
551 check_refname_format(ref->name + 5, 0))
552 ; /* trash */
553 else {
554 while (sought_pos < sought->nr) {
555 int cmp = strcmp(ref->name, sought->items[sought_pos].string);
556 if (cmp < 0)
557 break; /* definitely do not have it */
558 else if (cmp == 0) {
559 keep = 1; /* definitely have it */
560 sought->items[sought_pos++].util = "matched";
561 break;
563 else
564 sought_pos++; /* might have it; keep looking */
568 if (! keep && args->fetch_all &&
569 (!args->depth || prefixcmp(ref->name, "refs/tags/")))
570 keep = 1;
572 if (keep) {
573 *newtail = ref;
574 ref->next = NULL;
575 newtail = &ref->next;
576 } else {
577 free(ref);
581 filter_string_list(sought, 0, non_matching_ref, NULL);
582 *refs = newlist;
585 static void mark_alternate_complete(const struct ref *ref, void *unused)
587 mark_complete(NULL, ref->old_sha1, 0, NULL);
590 static int everything_local(struct fetch_pack_args *args,
591 struct ref **refs, struct string_list *sought)
593 struct ref *ref;
594 int retval;
595 unsigned long cutoff = 0;
597 save_commit_buffer = 0;
599 for (ref = *refs; ref; ref = ref->next) {
600 struct object *o;
602 o = parse_object(ref->old_sha1);
603 if (!o)
604 continue;
606 /* We already have it -- which may mean that we were
607 * in sync with the other side at some time after
608 * that (it is OK if we guess wrong here).
610 if (o->type == OBJ_COMMIT) {
611 struct commit *commit = (struct commit *)o;
612 if (!cutoff || cutoff < commit->date)
613 cutoff = commit->date;
617 if (!args->depth) {
618 for_each_ref(mark_complete, NULL);
619 for_each_alternate_ref(mark_alternate_complete, NULL);
620 if (cutoff)
621 mark_recent_complete_commits(args, cutoff);
625 * Mark all complete remote refs as common refs.
626 * Don't mark them common yet; the server has to be told so first.
628 for (ref = *refs; ref; ref = ref->next) {
629 struct object *o = deref_tag(lookup_object(ref->old_sha1),
630 NULL, 0);
632 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
633 continue;
635 if (!(o->flags & SEEN)) {
636 rev_list_push((struct commit *)o, COMMON_REF | SEEN);
638 mark_common((struct commit *)o, 1, 1);
642 filter_refs(args, refs, sought);
644 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
645 const unsigned char *remote = ref->old_sha1;
646 unsigned char local[20];
647 struct object *o;
649 o = lookup_object(remote);
650 if (!o || !(o->flags & COMPLETE)) {
651 retval = 0;
652 if (!args->verbose)
653 continue;
654 fprintf(stderr,
655 "want %s (%s)\n", sha1_to_hex(remote),
656 ref->name);
657 continue;
660 hashcpy(ref->new_sha1, local);
661 if (!args->verbose)
662 continue;
663 fprintf(stderr,
664 "already have %s (%s)\n", sha1_to_hex(remote),
665 ref->name);
667 return retval;
670 static int sideband_demux(int in, int out, void *data)
672 int *xd = data;
674 int ret = recv_sideband("fetch-pack", xd[0], out);
675 close(out);
676 return ret;
679 static int get_pack(struct fetch_pack_args *args,
680 int xd[2], char **pack_lockfile)
682 struct async demux;
683 const char *argv[20];
684 char keep_arg[256];
685 char hdr_arg[256];
686 const char **av;
687 int do_keep = args->keep_pack;
688 struct child_process cmd;
690 memset(&demux, 0, sizeof(demux));
691 if (use_sideband) {
692 /* xd[] is talking with upload-pack; subprocess reads from
693 * xd[0], spits out band#2 to stderr, and feeds us band#1
694 * through demux->out.
696 demux.proc = sideband_demux;
697 demux.data = xd;
698 demux.out = -1;
699 if (start_async(&demux))
700 die("fetch-pack: unable to fork off sideband"
701 " demultiplexer");
703 else
704 demux.out = xd[0];
706 memset(&cmd, 0, sizeof(cmd));
707 cmd.argv = argv;
708 av = argv;
709 *hdr_arg = 0;
710 if (!args->keep_pack && unpack_limit) {
711 struct pack_header header;
713 if (read_pack_header(demux.out, &header))
714 die("protocol error: bad pack header");
715 snprintf(hdr_arg, sizeof(hdr_arg),
716 "--pack_header=%"PRIu32",%"PRIu32,
717 ntohl(header.hdr_version), ntohl(header.hdr_entries));
718 if (ntohl(header.hdr_entries) < unpack_limit)
719 do_keep = 0;
720 else
721 do_keep = 1;
724 if (do_keep) {
725 if (pack_lockfile)
726 cmd.out = -1;
727 *av++ = "index-pack";
728 *av++ = "--stdin";
729 if (!args->quiet && !args->no_progress)
730 *av++ = "-v";
731 if (args->use_thin_pack)
732 *av++ = "--fix-thin";
733 if (args->lock_pack || unpack_limit) {
734 int s = sprintf(keep_arg,
735 "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
736 if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
737 strcpy(keep_arg + s, "localhost");
738 *av++ = keep_arg;
741 else {
742 *av++ = "unpack-objects";
743 if (args->quiet || args->no_progress)
744 *av++ = "-q";
746 if (*hdr_arg)
747 *av++ = hdr_arg;
748 if (fetch_fsck_objects >= 0
749 ? fetch_fsck_objects
750 : transfer_fsck_objects >= 0
751 ? transfer_fsck_objects
752 : 0)
753 *av++ = "--strict";
754 *av++ = NULL;
756 cmd.in = demux.out;
757 cmd.git_cmd = 1;
758 if (start_command(&cmd))
759 die("fetch-pack: unable to fork off %s", argv[0]);
760 if (do_keep && pack_lockfile) {
761 *pack_lockfile = index_pack_lockfile(cmd.out);
762 close(cmd.out);
765 if (finish_command(&cmd))
766 die("%s failed", argv[0]);
767 if (use_sideband && finish_async(&demux))
768 die("error in sideband demultiplexer");
769 return 0;
772 static struct ref *do_fetch_pack(struct fetch_pack_args *args,
773 int fd[2],
774 const struct ref *orig_ref,
775 struct string_list *sought,
776 char **pack_lockfile)
778 struct ref *ref = copy_ref_list(orig_ref);
779 unsigned char sha1[20];
780 const char *agent_feature;
781 int agent_len;
783 sort_ref_list(&ref, ref_compare_name);
785 if (is_repository_shallow() && !server_supports("shallow"))
786 die("Server does not support shallow clients");
787 if (server_supports("multi_ack_detailed")) {
788 if (args->verbose)
789 fprintf(stderr, "Server supports multi_ack_detailed\n");
790 multi_ack = 2;
791 if (server_supports("no-done")) {
792 if (args->verbose)
793 fprintf(stderr, "Server supports no-done\n");
794 if (args->stateless_rpc)
795 no_done = 1;
798 else if (server_supports("multi_ack")) {
799 if (args->verbose)
800 fprintf(stderr, "Server supports multi_ack\n");
801 multi_ack = 1;
803 if (server_supports("side-band-64k")) {
804 if (args->verbose)
805 fprintf(stderr, "Server supports side-band-64k\n");
806 use_sideband = 2;
808 else if (server_supports("side-band")) {
809 if (args->verbose)
810 fprintf(stderr, "Server supports side-band\n");
811 use_sideband = 1;
813 if (!server_supports("thin-pack"))
814 args->use_thin_pack = 0;
815 if (!server_supports("no-progress"))
816 args->no_progress = 0;
817 if (!server_supports("include-tag"))
818 args->include_tag = 0;
819 if (server_supports("ofs-delta")) {
820 if (args->verbose)
821 fprintf(stderr, "Server supports ofs-delta\n");
822 } else
823 prefer_ofs_delta = 0;
825 if ((agent_feature = server_feature_value("agent", &agent_len))) {
826 agent_supported = 1;
827 if (args->verbose && agent_len)
828 fprintf(stderr, "Server version is %.*s\n",
829 agent_len, agent_feature);
832 if (everything_local(args, &ref, sought)) {
833 packet_flush(fd[1]);
834 goto all_done;
836 if (find_common(args, fd, sha1, ref) < 0)
837 if (!args->keep_pack)
838 /* When cloning, it is not unusual to have
839 * no common commit.
841 warning("no common commits");
843 if (args->stateless_rpc)
844 packet_flush(fd[1]);
845 if (get_pack(args, fd, pack_lockfile))
846 die("git fetch-pack: fetch failed.");
848 all_done:
849 return ref;
852 static int fetch_pack_config(const char *var, const char *value, void *cb)
854 if (strcmp(var, "fetch.unpacklimit") == 0) {
855 fetch_unpack_limit = git_config_int(var, value);
856 return 0;
859 if (strcmp(var, "transfer.unpacklimit") == 0) {
860 transfer_unpack_limit = git_config_int(var, value);
861 return 0;
864 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
865 prefer_ofs_delta = git_config_bool(var, value);
866 return 0;
869 if (!strcmp(var, "fetch.fsckobjects")) {
870 fetch_fsck_objects = git_config_bool(var, value);
871 return 0;
874 if (!strcmp(var, "transfer.fsckobjects")) {
875 transfer_fsck_objects = git_config_bool(var, value);
876 return 0;
879 return git_default_config(var, value, cb);
882 static struct lock_file lock;
884 static void fetch_pack_setup(void)
886 static int did_setup;
887 if (did_setup)
888 return;
889 git_config(fetch_pack_config, NULL);
890 if (0 <= transfer_unpack_limit)
891 unpack_limit = transfer_unpack_limit;
892 else if (0 <= fetch_unpack_limit)
893 unpack_limit = fetch_unpack_limit;
894 did_setup = 1;
897 int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
899 int i, ret;
900 struct ref *ref = NULL;
901 const char *dest = NULL;
902 struct string_list sought = STRING_LIST_INIT_DUP;
903 int fd[2];
904 char *pack_lockfile = NULL;
905 char **pack_lockfile_ptr = NULL;
906 struct child_process *conn;
907 struct fetch_pack_args args;
909 packet_trace_identity("fetch-pack");
911 memset(&args, 0, sizeof(args));
912 args.uploadpack = "git-upload-pack";
914 for (i = 1; i < argc && *argv[i] == '-'; i++) {
915 const char *arg = argv[i];
917 if (!prefixcmp(arg, "--upload-pack=")) {
918 args.uploadpack = arg + 14;
919 continue;
921 if (!prefixcmp(arg, "--exec=")) {
922 args.uploadpack = arg + 7;
923 continue;
925 if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) {
926 args.quiet = 1;
927 continue;
929 if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
930 args.lock_pack = args.keep_pack;
931 args.keep_pack = 1;
932 continue;
934 if (!strcmp("--thin", arg)) {
935 args.use_thin_pack = 1;
936 continue;
938 if (!strcmp("--include-tag", arg)) {
939 args.include_tag = 1;
940 continue;
942 if (!strcmp("--all", arg)) {
943 args.fetch_all = 1;
944 continue;
946 if (!strcmp("--stdin", arg)) {
947 args.stdin_refs = 1;
948 continue;
950 if (!strcmp("-v", arg)) {
951 args.verbose = 1;
952 continue;
954 if (!prefixcmp(arg, "--depth=")) {
955 args.depth = strtol(arg + 8, NULL, 0);
956 continue;
958 if (!strcmp("--no-progress", arg)) {
959 args.no_progress = 1;
960 continue;
962 if (!strcmp("--stateless-rpc", arg)) {
963 args.stateless_rpc = 1;
964 continue;
966 if (!strcmp("--lock-pack", arg)) {
967 args.lock_pack = 1;
968 pack_lockfile_ptr = &pack_lockfile;
969 continue;
971 usage(fetch_pack_usage);
974 if (i < argc)
975 dest = argv[i++];
976 else
977 usage(fetch_pack_usage);
980 * Copy refs from cmdline to growable list, then append any
981 * refs from the standard input:
983 for (; i < argc; i++)
984 string_list_append(&sought, xstrdup(argv[i]));
985 if (args.stdin_refs) {
986 if (args.stateless_rpc) {
987 /* in stateless RPC mode we use pkt-line to read
988 * from stdin, until we get a flush packet
990 static char line[1000];
991 for (;;) {
992 int n = packet_read_line(0, line, sizeof(line));
993 if (!n)
994 break;
995 if (line[n-1] == '\n')
996 n--;
997 string_list_append(&sought, xmemdupz(line, n));
1000 else {
1001 /* read from stdin one ref per line, until EOF */
1002 struct strbuf line = STRBUF_INIT;
1003 while (strbuf_getline(&line, stdin, '\n') != EOF)
1004 string_list_append(&sought, strbuf_detach(&line, NULL));
1005 strbuf_release(&line);
1009 if (args.stateless_rpc) {
1010 conn = NULL;
1011 fd[0] = 0;
1012 fd[1] = 1;
1013 } else {
1014 conn = git_connect(fd, dest, args.uploadpack,
1015 args.verbose ? CONNECT_VERBOSE : 0);
1018 get_remote_heads(fd[0], &ref, 0, NULL);
1020 ref = fetch_pack(&args, fd, conn, ref, dest,
1021 &sought, pack_lockfile_ptr);
1022 if (pack_lockfile) {
1023 printf("lock %s\n", pack_lockfile);
1024 fflush(stdout);
1026 close(fd[0]);
1027 close(fd[1]);
1028 if (finish_connect(conn))
1029 return 1;
1031 ret = !ref || sought.nr;
1034 * If the heads to pull were given, we should have consumed
1035 * all of them by matching the remote. Otherwise, 'git fetch
1036 * remote no-such-ref' would silently succeed without issuing
1037 * an error.
1039 for (i = 0; i < sought.nr; i++)
1040 error("no such remote ref %s", sought.items[i].string);
1041 while (ref) {
1042 printf("%s %s\n",
1043 sha1_to_hex(ref->old_sha1), ref->name);
1044 ref = ref->next;
1047 return ret;
1050 struct ref *fetch_pack(struct fetch_pack_args *args,
1051 int fd[], struct child_process *conn,
1052 const struct ref *ref,
1053 const char *dest,
1054 struct string_list *sought,
1055 char **pack_lockfile)
1057 struct stat st;
1058 struct ref *ref_cpy;
1060 fetch_pack_setup();
1061 if (args->depth > 0) {
1062 if (stat(git_path("shallow"), &st))
1063 st.st_mtime = 0;
1066 if (sought->nr) {
1067 sort_string_list(sought);
1068 string_list_remove_duplicates(sought, 0);
1071 if (!ref) {
1072 packet_flush(fd[1]);
1073 die("no matching remote head");
1075 ref_cpy = do_fetch_pack(args, fd, ref, sought, pack_lockfile);
1077 if (args->depth > 0) {
1078 struct cache_time mtime;
1079 struct strbuf sb = STRBUF_INIT;
1080 char *shallow = git_path("shallow");
1081 int fd;
1083 mtime.sec = st.st_mtime;
1084 mtime.nsec = ST_MTIME_NSEC(st);
1085 if (stat(shallow, &st)) {
1086 if (mtime.sec)
1087 die("shallow file was removed during fetch");
1088 } else if (st.st_mtime != mtime.sec
1089 #ifdef USE_NSEC
1090 || ST_MTIME_NSEC(st) != mtime.nsec
1091 #endif
1093 die("shallow file was changed during fetch");
1095 fd = hold_lock_file_for_update(&lock, shallow,
1096 LOCK_DIE_ON_ERROR);
1097 if (!write_shallow_commits(&sb, 0)
1098 || write_in_full(fd, sb.buf, sb.len) != sb.len) {
1099 unlink_or_warn(shallow);
1100 rollback_lock_file(&lock);
1101 } else {
1102 commit_lock_file(&lock);
1104 strbuf_release(&sb);
1107 reprepare_packed_git();
1108 return ref_cpy;