enable "no-done" extension only when fetching over smart-http
[git/mingw.git] / builtin / fetch-pack.c
blob52707a80adb403a887fa880c3286eb54afac5c05
1 #include "cache.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"
13 static int transfer_unpack_limit = -1;
14 static int fetch_unpack_limit = -1;
15 static int unpack_limit = 100;
16 static int prefer_ofs_delta = 1;
17 static int no_done = 0;
18 static struct fetch_pack_args args = {
19 /* .uploadpack = */ "git-upload-pack",
22 static const char fetch_pack_usage[] =
23 "git fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [-v] [<host>:]<directory> [<refs>...]";
25 #define COMPLETE (1U << 0)
26 #define COMMON (1U << 1)
27 #define COMMON_REF (1U << 2)
28 #define SEEN (1U << 3)
29 #define POPPED (1U << 4)
31 static int marked;
34 * After sending this many "have"s if we do not get any new ACK , we
35 * give up traversing our history.
37 #define MAX_IN_VAIN 256
39 static struct commit_list *rev_list;
40 static int non_common_revs, multi_ack, use_sideband;
42 static void rev_list_push(struct commit *commit, int mark)
44 if (!(commit->object.flags & mark)) {
45 commit->object.flags |= mark;
47 if (!(commit->object.parsed))
48 if (parse_commit(commit))
49 return;
51 commit_list_insert_by_date(commit, &rev_list);
53 if (!(commit->object.flags & COMMON))
54 non_common_revs++;
58 static int rev_list_insert_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
60 struct object *o = deref_tag(parse_object(sha1), path, 0);
62 if (o && o->type == OBJ_COMMIT)
63 rev_list_push((struct commit *)o, SEEN);
65 return 0;
68 static int clear_marks(const char *path, const unsigned char *sha1, int flag, void *cb_data)
70 struct object *o = deref_tag(parse_object(sha1), path, 0);
72 if (o && o->type == OBJ_COMMIT)
73 clear_commit_marks((struct commit *)o,
74 COMMON | COMMON_REF | SEEN | POPPED);
75 return 0;
79 This function marks a rev and its ancestors as common.
80 In some cases, it is desirable to mark only the ancestors (for example
81 when only the server does not yet know that they are common).
84 static void mark_common(struct commit *commit,
85 int ancestors_only, int dont_parse)
87 if (commit != NULL && !(commit->object.flags & COMMON)) {
88 struct object *o = (struct object *)commit;
90 if (!ancestors_only)
91 o->flags |= COMMON;
93 if (!(o->flags & SEEN))
94 rev_list_push(commit, SEEN);
95 else {
96 struct commit_list *parents;
98 if (!ancestors_only && !(o->flags & POPPED))
99 non_common_revs--;
100 if (!o->parsed && !dont_parse)
101 if (parse_commit(commit))
102 return;
104 for (parents = commit->parents;
105 parents;
106 parents = parents->next)
107 mark_common(parents->item, 0, dont_parse);
113 Get the next rev to send, ignoring the common.
116 static const unsigned char *get_rev(void)
118 struct commit *commit = NULL;
120 while (commit == NULL) {
121 unsigned int mark;
122 struct commit_list *parents;
124 if (rev_list == NULL || non_common_revs == 0)
125 return NULL;
127 commit = rev_list->item;
128 if (!commit->object.parsed)
129 parse_commit(commit);
130 parents = commit->parents;
132 commit->object.flags |= POPPED;
133 if (!(commit->object.flags & COMMON))
134 non_common_revs--;
136 if (commit->object.flags & COMMON) {
137 /* do not send "have", and ignore ancestors */
138 commit = NULL;
139 mark = COMMON | SEEN;
140 } else if (commit->object.flags & COMMON_REF)
141 /* send "have", and ignore ancestors */
142 mark = COMMON | SEEN;
143 else
144 /* send "have", also for its ancestors */
145 mark = SEEN;
147 while (parents) {
148 if (!(parents->item->object.flags & SEEN))
149 rev_list_push(parents->item, mark);
150 if (mark & COMMON)
151 mark_common(parents->item, 1, 0);
152 parents = parents->next;
155 rev_list = rev_list->next;
158 return commit->object.sha1;
161 enum ack_type {
162 NAK = 0,
163 ACK,
164 ACK_continue,
165 ACK_common,
166 ACK_ready
169 static void consume_shallow_list(int fd)
171 if (args.stateless_rpc && args.depth > 0) {
172 /* If we sent a depth we will get back "duplicate"
173 * shallow and unshallow commands every time there
174 * is a block of have lines exchanged.
176 char line[1000];
177 while (packet_read_line(fd, line, sizeof(line))) {
178 if (!prefixcmp(line, "shallow "))
179 continue;
180 if (!prefixcmp(line, "unshallow "))
181 continue;
182 die("git fetch-pack: expected shallow list");
187 static enum ack_type get_ack(int fd, unsigned char *result_sha1)
189 static char line[1000];
190 int len = packet_read_line(fd, line, sizeof(line));
192 if (!len)
193 die("git fetch-pack: expected ACK/NAK, got EOF");
194 if (line[len-1] == '\n')
195 line[--len] = 0;
196 if (!strcmp(line, "NAK"))
197 return NAK;
198 if (!prefixcmp(line, "ACK ")) {
199 if (!get_sha1_hex(line+4, result_sha1)) {
200 if (strstr(line+45, "continue"))
201 return ACK_continue;
202 if (strstr(line+45, "common"))
203 return ACK_common;
204 if (strstr(line+45, "ready"))
205 return ACK_ready;
206 return ACK;
209 die("git fetch_pack: expected ACK/NAK, got '%s'", line);
212 static void send_request(int fd, struct strbuf *buf)
214 if (args.stateless_rpc) {
215 send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
216 packet_flush(fd);
217 } else
218 safe_write(fd, buf->buf, buf->len);
221 static int find_common(int fd[2], unsigned char *result_sha1,
222 struct ref *refs)
224 int fetching;
225 int count = 0, flushes = 0, retval;
226 const unsigned char *sha1;
227 unsigned in_vain = 0;
228 int got_continue = 0;
229 int got_ready = 0;
230 struct strbuf req_buf = STRBUF_INIT;
231 size_t state_len = 0;
233 if (args.stateless_rpc && multi_ack == 1)
234 die("--stateless-rpc requires multi_ack_detailed");
235 if (marked)
236 for_each_ref(clear_marks, NULL);
237 marked = 1;
239 for_each_ref(rev_list_insert_ref, NULL);
241 fetching = 0;
242 for ( ; refs ; refs = refs->next) {
243 unsigned char *remote = refs->old_sha1;
244 const char *remote_hex;
245 struct object *o;
248 * If that object is complete (i.e. it is an ancestor of a
249 * local ref), we tell them we have it but do not have to
250 * tell them about its ancestors, which they already know
251 * about.
253 * We use lookup_object here because we are only
254 * interested in the case we *know* the object is
255 * reachable and we have already scanned it.
257 if (((o = lookup_object(remote)) != NULL) &&
258 (o->flags & COMPLETE)) {
259 continue;
262 remote_hex = sha1_to_hex(remote);
263 if (!fetching) {
264 struct strbuf c = STRBUF_INIT;
265 if (multi_ack == 2) strbuf_addstr(&c, " multi_ack_detailed");
266 if (multi_ack == 1) strbuf_addstr(&c, " multi_ack");
267 if (no_done) strbuf_addstr(&c, " no-done");
268 if (use_sideband == 2) strbuf_addstr(&c, " side-band-64k");
269 if (use_sideband == 1) strbuf_addstr(&c, " side-band");
270 if (args.use_thin_pack) strbuf_addstr(&c, " thin-pack");
271 if (args.no_progress) strbuf_addstr(&c, " no-progress");
272 if (args.include_tag) strbuf_addstr(&c, " include-tag");
273 if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta");
274 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
275 strbuf_release(&c);
276 } else
277 packet_buf_write(&req_buf, "want %s\n", remote_hex);
278 fetching++;
281 if (!fetching) {
282 strbuf_release(&req_buf);
283 packet_flush(fd[1]);
284 return 1;
287 if (is_repository_shallow())
288 write_shallow_commits(&req_buf, 1);
289 if (args.depth > 0)
290 packet_buf_write(&req_buf, "deepen %d", args.depth);
291 packet_buf_flush(&req_buf);
292 state_len = req_buf.len;
294 if (args.depth > 0) {
295 char line[1024];
296 unsigned char sha1[20];
298 send_request(fd[1], &req_buf);
299 while (packet_read_line(fd[0], line, sizeof(line))) {
300 if (!prefixcmp(line, "shallow ")) {
301 if (get_sha1_hex(line + 8, sha1))
302 die("invalid shallow line: %s", line);
303 register_shallow(sha1);
304 continue;
306 if (!prefixcmp(line, "unshallow ")) {
307 if (get_sha1_hex(line + 10, sha1))
308 die("invalid unshallow line: %s", line);
309 if (!lookup_object(sha1))
310 die("object not found: %s", line);
311 /* make sure that it is parsed as shallow */
312 if (!parse_object(sha1))
313 die("error in object: %s", line);
314 if (unregister_shallow(sha1))
315 die("no shallow found: %s", line);
316 continue;
318 die("expected shallow/unshallow, got %s", line);
320 } else if (!args.stateless_rpc)
321 send_request(fd[1], &req_buf);
323 if (!args.stateless_rpc) {
324 /* If we aren't using the stateless-rpc interface
325 * we don't need to retain the headers.
327 strbuf_setlen(&req_buf, 0);
328 state_len = 0;
331 flushes = 0;
332 retval = -1;
333 while ((sha1 = get_rev())) {
334 packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
335 if (args.verbose)
336 fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
337 in_vain++;
338 if (!(31 & ++count)) {
339 int ack;
341 packet_buf_flush(&req_buf);
342 send_request(fd[1], &req_buf);
343 strbuf_setlen(&req_buf, state_len);
344 flushes++;
347 * We keep one window "ahead" of the other side, and
348 * will wait for an ACK only on the next one
350 if (!args.stateless_rpc && count == 32)
351 continue;
353 consume_shallow_list(fd[0]);
354 do {
355 ack = get_ack(fd[0], result_sha1);
356 if (args.verbose && ack)
357 fprintf(stderr, "got ack %d %s\n", ack,
358 sha1_to_hex(result_sha1));
359 switch (ack) {
360 case ACK:
361 flushes = 0;
362 multi_ack = 0;
363 retval = 0;
364 goto done;
365 case ACK_common:
366 case ACK_ready:
367 case ACK_continue: {
368 struct commit *commit =
369 lookup_commit(result_sha1);
370 if (args.stateless_rpc
371 && ack == ACK_common
372 && !(commit->object.flags & COMMON)) {
373 /* We need to replay the have for this object
374 * on the next RPC request so the peer knows
375 * it is in common with us.
377 const char *hex = sha1_to_hex(result_sha1);
378 packet_buf_write(&req_buf, "have %s\n", hex);
379 state_len = req_buf.len;
381 mark_common(commit, 0, 1);
382 retval = 0;
383 in_vain = 0;
384 got_continue = 1;
385 if (ack == ACK_ready) {
386 rev_list = NULL;
387 got_ready = 1;
389 break;
392 } while (ack);
393 flushes--;
394 if (got_continue && MAX_IN_VAIN < in_vain) {
395 if (args.verbose)
396 fprintf(stderr, "giving up\n");
397 break; /* give up */
401 done:
402 if (!got_ready || !no_done) {
403 packet_buf_write(&req_buf, "done\n");
404 send_request(fd[1], &req_buf);
406 if (args.verbose)
407 fprintf(stderr, "done\n");
408 if (retval != 0) {
409 multi_ack = 0;
410 flushes++;
412 strbuf_release(&req_buf);
414 consume_shallow_list(fd[0]);
415 while (flushes || multi_ack) {
416 int ack = get_ack(fd[0], result_sha1);
417 if (ack) {
418 if (args.verbose)
419 fprintf(stderr, "got ack (%d) %s\n", ack,
420 sha1_to_hex(result_sha1));
421 if (ack == ACK)
422 return 0;
423 multi_ack = 1;
424 continue;
426 flushes--;
428 /* it is no error to fetch into a completely empty repo */
429 return count ? retval : 0;
432 static struct commit_list *complete;
434 static int mark_complete(const char *path, const unsigned char *sha1, int flag, void *cb_data)
436 struct object *o = parse_object(sha1);
438 while (o && o->type == OBJ_TAG) {
439 struct tag *t = (struct tag *) o;
440 if (!t->tagged)
441 break; /* broken repository */
442 o->flags |= COMPLETE;
443 o = parse_object(t->tagged->sha1);
445 if (o && o->type == OBJ_COMMIT) {
446 struct commit *commit = (struct commit *)o;
447 commit->object.flags |= COMPLETE;
448 commit_list_insert_by_date(commit, &complete);
450 return 0;
453 static void mark_recent_complete_commits(unsigned long cutoff)
455 while (complete && cutoff <= complete->item->date) {
456 if (args.verbose)
457 fprintf(stderr, "Marking %s as complete\n",
458 sha1_to_hex(complete->item->object.sha1));
459 pop_most_recent_commit(&complete, COMPLETE);
463 static void filter_refs(struct ref **refs, int nr_match, char **match)
465 struct ref **return_refs;
466 struct ref *newlist = NULL;
467 struct ref **newtail = &newlist;
468 struct ref *ref, *next;
469 struct ref *fastarray[32];
471 if (nr_match && !args.fetch_all) {
472 if (ARRAY_SIZE(fastarray) < nr_match)
473 return_refs = xcalloc(nr_match, sizeof(struct ref *));
474 else {
475 return_refs = fastarray;
476 memset(return_refs, 0, sizeof(struct ref *) * nr_match);
479 else
480 return_refs = NULL;
482 for (ref = *refs; ref; ref = next) {
483 next = ref->next;
484 if (!memcmp(ref->name, "refs/", 5) &&
485 check_ref_format(ref->name + 5))
486 ; /* trash */
487 else if (args.fetch_all &&
488 (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
489 *newtail = ref;
490 ref->next = NULL;
491 newtail = &ref->next;
492 continue;
494 else {
495 int order = path_match(ref->name, nr_match, match);
496 if (order) {
497 return_refs[order-1] = ref;
498 continue; /* we will link it later */
501 free(ref);
504 if (!args.fetch_all) {
505 int i;
506 for (i = 0; i < nr_match; i++) {
507 ref = return_refs[i];
508 if (ref) {
509 *newtail = ref;
510 ref->next = NULL;
511 newtail = &ref->next;
514 if (return_refs != fastarray)
515 free(return_refs);
517 *refs = newlist;
520 static int everything_local(struct ref **refs, int nr_match, char **match)
522 struct ref *ref;
523 int retval;
524 unsigned long cutoff = 0;
526 save_commit_buffer = 0;
528 for (ref = *refs; ref; ref = ref->next) {
529 struct object *o;
531 o = parse_object(ref->old_sha1);
532 if (!o)
533 continue;
535 /* We already have it -- which may mean that we were
536 * in sync with the other side at some time after
537 * that (it is OK if we guess wrong here).
539 if (o->type == OBJ_COMMIT) {
540 struct commit *commit = (struct commit *)o;
541 if (!cutoff || cutoff < commit->date)
542 cutoff = commit->date;
546 if (!args.depth) {
547 for_each_ref(mark_complete, NULL);
548 if (cutoff)
549 mark_recent_complete_commits(cutoff);
553 * Mark all complete remote refs as common refs.
554 * Don't mark them common yet; the server has to be told so first.
556 for (ref = *refs; ref; ref = ref->next) {
557 struct object *o = deref_tag(lookup_object(ref->old_sha1),
558 NULL, 0);
560 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
561 continue;
563 if (!(o->flags & SEEN)) {
564 rev_list_push((struct commit *)o, COMMON_REF | SEEN);
566 mark_common((struct commit *)o, 1, 1);
570 filter_refs(refs, nr_match, match);
572 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
573 const unsigned char *remote = ref->old_sha1;
574 unsigned char local[20];
575 struct object *o;
577 o = lookup_object(remote);
578 if (!o || !(o->flags & COMPLETE)) {
579 retval = 0;
580 if (!args.verbose)
581 continue;
582 fprintf(stderr,
583 "want %s (%s)\n", sha1_to_hex(remote),
584 ref->name);
585 continue;
588 hashcpy(ref->new_sha1, local);
589 if (!args.verbose)
590 continue;
591 fprintf(stderr,
592 "already have %s (%s)\n", sha1_to_hex(remote),
593 ref->name);
595 return retval;
598 static int sideband_demux(int in, int out, void *data)
600 int *xd = data;
602 int ret = recv_sideband("fetch-pack", xd[0], out);
603 close(out);
604 return ret;
607 static int get_pack(int xd[2], char **pack_lockfile)
609 struct async demux;
610 const char *argv[20];
611 char keep_arg[256];
612 char hdr_arg[256];
613 const char **av;
614 int do_keep = args.keep_pack;
615 struct child_process cmd;
617 memset(&demux, 0, sizeof(demux));
618 if (use_sideband) {
619 /* xd[] is talking with upload-pack; subprocess reads from
620 * xd[0], spits out band#2 to stderr, and feeds us band#1
621 * through demux->out.
623 demux.proc = sideband_demux;
624 demux.data = xd;
625 demux.out = -1;
626 if (start_async(&demux))
627 die("fetch-pack: unable to fork off sideband"
628 " demultiplexer");
630 else
631 demux.out = xd[0];
633 memset(&cmd, 0, sizeof(cmd));
634 cmd.argv = argv;
635 av = argv;
636 *hdr_arg = 0;
637 if (!args.keep_pack && unpack_limit) {
638 struct pack_header header;
640 if (read_pack_header(demux.out, &header))
641 die("protocol error: bad pack header");
642 snprintf(hdr_arg, sizeof(hdr_arg),
643 "--pack_header=%"PRIu32",%"PRIu32,
644 ntohl(header.hdr_version), ntohl(header.hdr_entries));
645 if (ntohl(header.hdr_entries) < unpack_limit)
646 do_keep = 0;
647 else
648 do_keep = 1;
651 if (do_keep) {
652 if (pack_lockfile)
653 cmd.out = -1;
654 *av++ = "index-pack";
655 *av++ = "--stdin";
656 if (!args.quiet && !args.no_progress)
657 *av++ = "-v";
658 if (args.use_thin_pack)
659 *av++ = "--fix-thin";
660 if (args.lock_pack || unpack_limit) {
661 int s = sprintf(keep_arg,
662 "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
663 if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
664 strcpy(keep_arg + s, "localhost");
665 *av++ = keep_arg;
668 else {
669 *av++ = "unpack-objects";
670 if (args.quiet)
671 *av++ = "-q";
673 if (*hdr_arg)
674 *av++ = hdr_arg;
675 *av++ = NULL;
677 cmd.in = demux.out;
678 cmd.git_cmd = 1;
679 if (start_command(&cmd))
680 die("fetch-pack: unable to fork off %s", argv[0]);
681 if (do_keep && pack_lockfile) {
682 *pack_lockfile = index_pack_lockfile(cmd.out);
683 close(cmd.out);
686 if (finish_command(&cmd))
687 die("%s failed", argv[0]);
688 if (use_sideband && finish_async(&demux))
689 die("error in sideband demultiplexer");
690 return 0;
693 static struct ref *do_fetch_pack(int fd[2],
694 const struct ref *orig_ref,
695 int nr_match,
696 char **match,
697 char **pack_lockfile)
699 struct ref *ref = copy_ref_list(orig_ref);
700 unsigned char sha1[20];
702 if (is_repository_shallow() && !server_supports("shallow"))
703 die("Server does not support shallow clients");
704 if (server_supports("multi_ack_detailed")) {
705 if (args.verbose)
706 fprintf(stderr, "Server supports multi_ack_detailed\n");
707 multi_ack = 2;
708 if (server_supports("no-done")) {
709 if (args.verbose)
710 fprintf(stderr, "Server supports no-done\n");
711 if (args.stateless_rpc)
712 no_done = 1;
715 else if (server_supports("multi_ack")) {
716 if (args.verbose)
717 fprintf(stderr, "Server supports multi_ack\n");
718 multi_ack = 1;
720 if (server_supports("side-band-64k")) {
721 if (args.verbose)
722 fprintf(stderr, "Server supports side-band-64k\n");
723 use_sideband = 2;
725 else if (server_supports("side-band")) {
726 if (args.verbose)
727 fprintf(stderr, "Server supports side-band\n");
728 use_sideband = 1;
730 if (server_supports("ofs-delta")) {
731 if (args.verbose)
732 fprintf(stderr, "Server supports ofs-delta\n");
733 } else
734 prefer_ofs_delta = 0;
735 if (everything_local(&ref, nr_match, match)) {
736 packet_flush(fd[1]);
737 goto all_done;
739 if (find_common(fd, sha1, ref) < 0)
740 if (!args.keep_pack)
741 /* When cloning, it is not unusual to have
742 * no common commit.
744 warning("no common commits");
746 if (args.stateless_rpc)
747 packet_flush(fd[1]);
748 if (get_pack(fd, pack_lockfile))
749 die("git fetch-pack: fetch failed.");
751 all_done:
752 return ref;
755 static int remove_duplicates(int nr_heads, char **heads)
757 int src, dst;
759 for (src = dst = 0; src < nr_heads; src++) {
760 /* If heads[src] is different from any of
761 * heads[0..dst], push it in.
763 int i;
764 for (i = 0; i < dst; i++) {
765 if (!strcmp(heads[i], heads[src]))
766 break;
768 if (i < dst)
769 continue;
770 if (src != dst)
771 heads[dst] = heads[src];
772 dst++;
774 return dst;
777 static int fetch_pack_config(const char *var, const char *value, void *cb)
779 if (strcmp(var, "fetch.unpacklimit") == 0) {
780 fetch_unpack_limit = git_config_int(var, value);
781 return 0;
784 if (strcmp(var, "transfer.unpacklimit") == 0) {
785 transfer_unpack_limit = git_config_int(var, value);
786 return 0;
789 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
790 prefer_ofs_delta = git_config_bool(var, value);
791 return 0;
794 return git_default_config(var, value, cb);
797 static struct lock_file lock;
799 static void fetch_pack_setup(void)
801 static int did_setup;
802 if (did_setup)
803 return;
804 git_config(fetch_pack_config, NULL);
805 if (0 <= transfer_unpack_limit)
806 unpack_limit = transfer_unpack_limit;
807 else if (0 <= fetch_unpack_limit)
808 unpack_limit = fetch_unpack_limit;
809 did_setup = 1;
812 int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
814 int i, ret, nr_heads;
815 struct ref *ref = NULL;
816 char *dest = NULL, **heads;
817 int fd[2];
818 char *pack_lockfile = NULL;
819 char **pack_lockfile_ptr = NULL;
820 struct child_process *conn;
822 nr_heads = 0;
823 heads = NULL;
824 for (i = 1; i < argc; i++) {
825 const char *arg = argv[i];
827 if (*arg == '-') {
828 if (!prefixcmp(arg, "--upload-pack=")) {
829 args.uploadpack = arg + 14;
830 continue;
832 if (!prefixcmp(arg, "--exec=")) {
833 args.uploadpack = arg + 7;
834 continue;
836 if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) {
837 args.quiet = 1;
838 continue;
840 if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
841 args.lock_pack = args.keep_pack;
842 args.keep_pack = 1;
843 continue;
845 if (!strcmp("--thin", arg)) {
846 args.use_thin_pack = 1;
847 continue;
849 if (!strcmp("--include-tag", arg)) {
850 args.include_tag = 1;
851 continue;
853 if (!strcmp("--all", arg)) {
854 args.fetch_all = 1;
855 continue;
857 if (!strcmp("-v", arg)) {
858 args.verbose = 1;
859 continue;
861 if (!prefixcmp(arg, "--depth=")) {
862 args.depth = strtol(arg + 8, NULL, 0);
863 continue;
865 if (!strcmp("--no-progress", arg)) {
866 args.no_progress = 1;
867 continue;
869 if (!strcmp("--stateless-rpc", arg)) {
870 args.stateless_rpc = 1;
871 continue;
873 if (!strcmp("--lock-pack", arg)) {
874 args.lock_pack = 1;
875 pack_lockfile_ptr = &pack_lockfile;
876 continue;
878 usage(fetch_pack_usage);
880 dest = (char *)arg;
881 heads = (char **)(argv + i + 1);
882 nr_heads = argc - i - 1;
883 break;
885 if (!dest)
886 usage(fetch_pack_usage);
888 if (args.stateless_rpc) {
889 conn = NULL;
890 fd[0] = 0;
891 fd[1] = 1;
892 } else {
893 conn = git_connect(fd, (char *)dest, args.uploadpack,
894 args.verbose ? CONNECT_VERBOSE : 0);
897 get_remote_heads(fd[0], &ref, 0, NULL, 0, NULL);
899 ref = fetch_pack(&args, fd, conn, ref, dest,
900 nr_heads, heads, pack_lockfile_ptr);
901 if (pack_lockfile) {
902 printf("lock %s\n", pack_lockfile);
903 fflush(stdout);
905 close(fd[0]);
906 close(fd[1]);
907 if (finish_connect(conn))
908 ref = NULL;
909 ret = !ref;
911 if (!ret && nr_heads) {
912 /* If the heads to pull were given, we should have
913 * consumed all of them by matching the remote.
914 * Otherwise, 'git fetch remote no-such-ref' would
915 * silently succeed without issuing an error.
917 for (i = 0; i < nr_heads; i++)
918 if (heads[i] && heads[i][0]) {
919 error("no such remote ref %s", heads[i]);
920 ret = 1;
923 while (ref) {
924 printf("%s %s\n",
925 sha1_to_hex(ref->old_sha1), ref->name);
926 ref = ref->next;
929 return ret;
932 struct ref *fetch_pack(struct fetch_pack_args *my_args,
933 int fd[], struct child_process *conn,
934 const struct ref *ref,
935 const char *dest,
936 int nr_heads,
937 char **heads,
938 char **pack_lockfile)
940 struct stat st;
941 struct ref *ref_cpy;
943 fetch_pack_setup();
944 if (&args != my_args)
945 memcpy(&args, my_args, sizeof(args));
946 if (args.depth > 0) {
947 if (stat(git_path("shallow"), &st))
948 st.st_mtime = 0;
951 if (heads && nr_heads)
952 nr_heads = remove_duplicates(nr_heads, heads);
953 if (!ref) {
954 packet_flush(fd[1]);
955 die("no matching remote head");
957 ref_cpy = do_fetch_pack(fd, ref, nr_heads, heads, pack_lockfile);
959 if (args.depth > 0) {
960 struct cache_time mtime;
961 struct strbuf sb = STRBUF_INIT;
962 char *shallow = git_path("shallow");
963 int fd;
965 mtime.sec = st.st_mtime;
966 mtime.nsec = ST_MTIME_NSEC(st);
967 if (stat(shallow, &st)) {
968 if (mtime.sec)
969 die("shallow file was removed during fetch");
970 } else if (st.st_mtime != mtime.sec
971 #ifdef USE_NSEC
972 || ST_MTIME_NSEC(st) != mtime.nsec
973 #endif
975 die("shallow file was changed during fetch");
977 fd = hold_lock_file_for_update(&lock, shallow,
978 LOCK_DIE_ON_ERROR);
979 if (!write_shallow_commits(&sb, 0)
980 || write_in_full(fd, sb.buf, sb.len) != sb.len) {
981 unlink_or_warn(shallow);
982 rollback_lock_file(&lock);
983 } else {
984 commit_lock_file(&lock);
986 strbuf_release(&sb);
989 reprepare_packed_git();
990 return ref_cpy;