Merge branch 'ah/maint-grep-double-init' into maint
[git] / builtin / fetch-pack.c
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
14 static int transfer_unpack_limit = -1;
15 static int fetch_unpack_limit = -1;
16 static int unpack_limit = 100;
17 static int prefer_ofs_delta = 1;
18 static int no_done;
19 static int fetch_fsck_objects = -1;
20 static int transfer_fsck_objects = -1;
21 static struct fetch_pack_args args = {
22         /* .uploadpack = */ "git-upload-pack",
23 };
24
25 static const char fetch_pack_usage[] =
26 "git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] "
27 "[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
28 "[--no-progress] [-v] [<host>:]<directory> [<refs>...]";
29
30 #define COMPLETE        (1U << 0)
31 #define COMMON          (1U << 1)
32 #define COMMON_REF      (1U << 2)
33 #define SEEN            (1U << 3)
34 #define POPPED          (1U << 4)
35
36 static int marked;
37
38 /*
39  * After sending this many "have"s if we do not get any new ACK , we
40  * give up traversing our history.
41  */
42 #define MAX_IN_VAIN 256
43
44 static struct commit_list *rev_list;
45 static int non_common_revs, multi_ack, use_sideband;
46
47 static void rev_list_push(struct commit *commit, int mark)
48 {
49         if (!(commit->object.flags & mark)) {
50                 commit->object.flags |= mark;
51
52                 if (!(commit->object.parsed))
53                         if (parse_commit(commit))
54                                 return;
55
56                 commit_list_insert_by_date(commit, &rev_list);
57
58                 if (!(commit->object.flags & COMMON))
59                         non_common_revs++;
60         }
61 }
62
63 static int rev_list_insert_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
64 {
65         struct object *o = deref_tag(parse_object(sha1), refname, 0);
66
67         if (o && o->type == OBJ_COMMIT)
68                 rev_list_push((struct commit *)o, SEEN);
69
70         return 0;
71 }
72
73 static int clear_marks(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
74 {
75         struct object *o = deref_tag(parse_object(sha1), refname, 0);
76
77         if (o && o->type == OBJ_COMMIT)
78                 clear_commit_marks((struct commit *)o,
79                                    COMMON | COMMON_REF | SEEN | POPPED);
80         return 0;
81 }
82
83 /*
84    This function marks a rev and its ancestors as common.
85    In some cases, it is desirable to mark only the ancestors (for example
86    when only the server does not yet know that they are common).
87 */
88
89 static void mark_common(struct commit *commit,
90                 int ancestors_only, int dont_parse)
91 {
92         if (commit != NULL && !(commit->object.flags & COMMON)) {
93                 struct object *o = (struct object *)commit;
94
95                 if (!ancestors_only)
96                         o->flags |= COMMON;
97
98                 if (!(o->flags & SEEN))
99                         rev_list_push(commit, SEEN);
100                 else {
101                         struct commit_list *parents;
102
103                         if (!ancestors_only && !(o->flags & POPPED))
104                                 non_common_revs--;
105                         if (!o->parsed && !dont_parse)
106                                 if (parse_commit(commit))
107                                         return;
108
109                         for (parents = commit->parents;
110                                         parents;
111                                         parents = parents->next)
112                                 mark_common(parents->item, 0, dont_parse);
113                 }
114         }
115 }
116
117 /*
118   Get the next rev to send, ignoring the common.
119 */
120
121 static const unsigned char *get_rev(void)
122 {
123         struct commit *commit = NULL;
124
125         while (commit == NULL) {
126                 unsigned int mark;
127                 struct commit_list *parents;
128
129                 if (rev_list == NULL || non_common_revs == 0)
130                         return NULL;
131
132                 commit = rev_list->item;
133                 if (!commit->object.parsed)
134                         parse_commit(commit);
135                 parents = commit->parents;
136
137                 commit->object.flags |= POPPED;
138                 if (!(commit->object.flags & COMMON))
139                         non_common_revs--;
140
141                 if (commit->object.flags & COMMON) {
142                         /* do not send "have", and ignore ancestors */
143                         commit = NULL;
144                         mark = COMMON | SEEN;
145                 } else if (commit->object.flags & COMMON_REF)
146                         /* send "have", and ignore ancestors */
147                         mark = COMMON | SEEN;
148                 else
149                         /* send "have", also for its ancestors */
150                         mark = SEEN;
151
152                 while (parents) {
153                         if (!(parents->item->object.flags & SEEN))
154                                 rev_list_push(parents->item, mark);
155                         if (mark & COMMON)
156                                 mark_common(parents->item, 1, 0);
157                         parents = parents->next;
158                 }
159
160                 rev_list = rev_list->next;
161         }
162
163         return commit->object.sha1;
164 }
165
166 enum ack_type {
167         NAK = 0,
168         ACK,
169         ACK_continue,
170         ACK_common,
171         ACK_ready
172 };
173
174 static void consume_shallow_list(int fd)
175 {
176         if (args.stateless_rpc && args.depth > 0) {
177                 /* If we sent a depth we will get back "duplicate"
178                  * shallow and unshallow commands every time there
179                  * is a block of have lines exchanged.
180                  */
181                 char line[1000];
182                 while (packet_read_line(fd, line, sizeof(line))) {
183                         if (!prefixcmp(line, "shallow "))
184                                 continue;
185                         if (!prefixcmp(line, "unshallow "))
186                                 continue;
187                         die("git fetch-pack: expected shallow list");
188                 }
189         }
190 }
191
192 struct write_shallow_data {
193         struct strbuf *out;
194         int use_pack_protocol;
195         int count;
196 };
197
198 static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
199 {
200         struct write_shallow_data *data = cb_data;
201         const char *hex = sha1_to_hex(graft->sha1);
202         data->count++;
203         if (data->use_pack_protocol)
204                 packet_buf_write(data->out, "shallow %s", hex);
205         else {
206                 strbuf_addstr(data->out, hex);
207                 strbuf_addch(data->out, '\n');
208         }
209         return 0;
210 }
211
212 static int write_shallow_commits(struct strbuf *out, int use_pack_protocol)
213 {
214         struct write_shallow_data data;
215         data.out = out;
216         data.use_pack_protocol = use_pack_protocol;
217         data.count = 0;
218         for_each_commit_graft(write_one_shallow, &data);
219         return data.count;
220 }
221
222 static enum ack_type get_ack(int fd, unsigned char *result_sha1)
223 {
224         static char line[1000];
225         int len = packet_read_line(fd, line, sizeof(line));
226
227         if (!len)
228                 die("git fetch-pack: expected ACK/NAK, got EOF");
229         if (line[len-1] == '\n')
230                 line[--len] = 0;
231         if (!strcmp(line, "NAK"))
232                 return NAK;
233         if (!prefixcmp(line, "ACK ")) {
234                 if (!get_sha1_hex(line+4, result_sha1)) {
235                         if (strstr(line+45, "continue"))
236                                 return ACK_continue;
237                         if (strstr(line+45, "common"))
238                                 return ACK_common;
239                         if (strstr(line+45, "ready"))
240                                 return ACK_ready;
241                         return ACK;
242                 }
243         }
244         die("git fetch_pack: expected ACK/NAK, got '%s'", line);
245 }
246
247 static void send_request(int fd, struct strbuf *buf)
248 {
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);
254 }
255
256 static void insert_one_alternate_ref(const struct ref *ref, void *unused)
257 {
258         rev_list_insert_ref(NULL, ref->old_sha1, 0, NULL);
259 }
260
261 #define INITIAL_FLUSH 16
262 #define PIPESAFE_FLUSH 32
263 #define LARGE_FLUSH 1024
264
265 static int next_flush(int count)
266 {
267         int flush_limit = args.stateless_rpc ? LARGE_FLUSH : PIPESAFE_FLUSH;
268
269         if (count < flush_limit)
270                 count <<= 1;
271         else
272                 count += flush_limit;
273         return count;
274 }
275
276 static int find_common(int fd[2], unsigned char *result_sha1,
277                        struct ref *refs)
278 {
279         int fetching;
280         int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
281         const unsigned char *sha1;
282         unsigned in_vain = 0;
283         int got_continue = 0;
284         int got_ready = 0;
285         struct strbuf req_buf = STRBUF_INIT;
286         size_t state_len = 0;
287
288         if (args.stateless_rpc && multi_ack == 1)
289                 die("--stateless-rpc requires multi_ack_detailed");
290         if (marked)
291                 for_each_ref(clear_marks, NULL);
292         marked = 1;
293
294         for_each_ref(rev_list_insert_ref, NULL);
295         for_each_alternate_ref(insert_one_alternate_ref, NULL);
296
297         fetching = 0;
298         for ( ; refs ; refs = refs->next) {
299                 unsigned char *remote = refs->old_sha1;
300                 const char *remote_hex;
301                 struct object *o;
302
303                 /*
304                  * If that object is complete (i.e. it is an ancestor of a
305                  * local ref), we tell them we have it but do not have to
306                  * tell them about its ancestors, which they already know
307                  * about.
308                  *
309                  * We use lookup_object here because we are only
310                  * interested in the case we *know* the object is
311                  * reachable and we have already scanned it.
312                  */
313                 if (((o = lookup_object(remote)) != NULL) &&
314                                 (o->flags & COMPLETE)) {
315                         continue;
316                 }
317
318                 remote_hex = sha1_to_hex(remote);
319                 if (!fetching) {
320                         struct strbuf c = STRBUF_INIT;
321                         if (multi_ack == 2)     strbuf_addstr(&c, " multi_ack_detailed");
322                         if (multi_ack == 1)     strbuf_addstr(&c, " multi_ack");
323                         if (no_done)            strbuf_addstr(&c, " no-done");
324                         if (use_sideband == 2)  strbuf_addstr(&c, " side-band-64k");
325                         if (use_sideband == 1)  strbuf_addstr(&c, " side-band");
326                         if (args.use_thin_pack) strbuf_addstr(&c, " thin-pack");
327                         if (args.no_progress)   strbuf_addstr(&c, " no-progress");
328                         if (args.include_tag)   strbuf_addstr(&c, " include-tag");
329                         if (prefer_ofs_delta)   strbuf_addstr(&c, " ofs-delta");
330                         packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
331                         strbuf_release(&c);
332                 } else
333                         packet_buf_write(&req_buf, "want %s\n", remote_hex);
334                 fetching++;
335         }
336
337         if (!fetching) {
338                 strbuf_release(&req_buf);
339                 packet_flush(fd[1]);
340                 return 1;
341         }
342
343         if (is_repository_shallow())
344                 write_shallow_commits(&req_buf, 1);
345         if (args.depth > 0)
346                 packet_buf_write(&req_buf, "deepen %d", args.depth);
347         packet_buf_flush(&req_buf);
348         state_len = req_buf.len;
349
350         if (args.depth > 0) {
351                 char line[1024];
352                 unsigned char sha1[20];
353
354                 send_request(fd[1], &req_buf);
355                 while (packet_read_line(fd[0], line, sizeof(line))) {
356                         if (!prefixcmp(line, "shallow ")) {
357                                 if (get_sha1_hex(line + 8, sha1))
358                                         die("invalid shallow line: %s", line);
359                                 register_shallow(sha1);
360                                 continue;
361                         }
362                         if (!prefixcmp(line, "unshallow ")) {
363                                 if (get_sha1_hex(line + 10, sha1))
364                                         die("invalid unshallow line: %s", line);
365                                 if (!lookup_object(sha1))
366                                         die("object not found: %s", line);
367                                 /* make sure that it is parsed as shallow */
368                                 if (!parse_object(sha1))
369                                         die("error in object: %s", line);
370                                 if (unregister_shallow(sha1))
371                                         die("no shallow found: %s", line);
372                                 continue;
373                         }
374                         die("expected shallow/unshallow, got %s", line);
375                 }
376         } else if (!args.stateless_rpc)
377                 send_request(fd[1], &req_buf);
378
379         if (!args.stateless_rpc) {
380                 /* If we aren't using the stateless-rpc interface
381                  * we don't need to retain the headers.
382                  */
383                 strbuf_setlen(&req_buf, 0);
384                 state_len = 0;
385         }
386
387         flushes = 0;
388         retval = -1;
389         while ((sha1 = get_rev())) {
390                 packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
391                 if (args.verbose)
392                         fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
393                 in_vain++;
394                 if (flush_at <= ++count) {
395                         int ack;
396
397                         packet_buf_flush(&req_buf);
398                         send_request(fd[1], &req_buf);
399                         strbuf_setlen(&req_buf, state_len);
400                         flushes++;
401                         flush_at = next_flush(count);
402
403                         /*
404                          * We keep one window "ahead" of the other side, and
405                          * will wait for an ACK only on the next one
406                          */
407                         if (!args.stateless_rpc && count == INITIAL_FLUSH)
408                                 continue;
409
410                         consume_shallow_list(fd[0]);
411                         do {
412                                 ack = get_ack(fd[0], result_sha1);
413                                 if (args.verbose && ack)
414                                         fprintf(stderr, "got ack %d %s\n", ack,
415                                                         sha1_to_hex(result_sha1));
416                                 switch (ack) {
417                                 case ACK:
418                                         flushes = 0;
419                                         multi_ack = 0;
420                                         retval = 0;
421                                         goto done;
422                                 case ACK_common:
423                                 case ACK_ready:
424                                 case ACK_continue: {
425                                         struct commit *commit =
426                                                 lookup_commit(result_sha1);
427                                         if (!commit)
428                                                 die("invalid commit %s", sha1_to_hex(result_sha1));
429                                         if (args.stateless_rpc
430                                          && ack == ACK_common
431                                          && !(commit->object.flags & COMMON)) {
432                                                 /* We need to replay the have for this object
433                                                  * on the next RPC request so the peer knows
434                                                  * it is in common with us.
435                                                  */
436                                                 const char *hex = sha1_to_hex(result_sha1);
437                                                 packet_buf_write(&req_buf, "have %s\n", hex);
438                                                 state_len = req_buf.len;
439                                         }
440                                         mark_common(commit, 0, 1);
441                                         retval = 0;
442                                         in_vain = 0;
443                                         got_continue = 1;
444                                         if (ack == ACK_ready) {
445                                                 rev_list = NULL;
446                                                 got_ready = 1;
447                                         }
448                                         break;
449                                         }
450                                 }
451                         } while (ack);
452                         flushes--;
453                         if (got_continue && MAX_IN_VAIN < in_vain) {
454                                 if (args.verbose)
455                                         fprintf(stderr, "giving up\n");
456                                 break; /* give up */
457                         }
458                 }
459         }
460 done:
461         if (!got_ready || !no_done) {
462                 packet_buf_write(&req_buf, "done\n");
463                 send_request(fd[1], &req_buf);
464         }
465         if (args.verbose)
466                 fprintf(stderr, "done\n");
467         if (retval != 0) {
468                 multi_ack = 0;
469                 flushes++;
470         }
471         strbuf_release(&req_buf);
472
473         consume_shallow_list(fd[0]);
474         while (flushes || multi_ack) {
475                 int ack = get_ack(fd[0], result_sha1);
476                 if (ack) {
477                         if (args.verbose)
478                                 fprintf(stderr, "got ack (%d) %s\n", ack,
479                                         sha1_to_hex(result_sha1));
480                         if (ack == ACK)
481                                 return 0;
482                         multi_ack = 1;
483                         continue;
484                 }
485                 flushes--;
486         }
487         /* it is no error to fetch into a completely empty repo */
488         return count ? retval : 0;
489 }
490
491 static struct commit_list *complete;
492
493 static int mark_complete(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
494 {
495         struct object *o = parse_object(sha1);
496
497         while (o && o->type == OBJ_TAG) {
498                 struct tag *t = (struct tag *) o;
499                 if (!t->tagged)
500                         break; /* broken repository */
501                 o->flags |= COMPLETE;
502                 o = parse_object(t->tagged->sha1);
503         }
504         if (o && o->type == OBJ_COMMIT) {
505                 struct commit *commit = (struct commit *)o;
506                 if (!(commit->object.flags & COMPLETE)) {
507                         commit->object.flags |= COMPLETE;
508                         commit_list_insert_by_date(commit, &complete);
509                 }
510         }
511         return 0;
512 }
513
514 static void mark_recent_complete_commits(unsigned long cutoff)
515 {
516         while (complete && cutoff <= complete->item->date) {
517                 if (args.verbose)
518                         fprintf(stderr, "Marking %s as complete\n",
519                                 sha1_to_hex(complete->item->object.sha1));
520                 pop_most_recent_commit(&complete, COMPLETE);
521         }
522 }
523
524 static void filter_refs(struct ref **refs, int nr_match, char **match)
525 {
526         struct ref **return_refs;
527         struct ref *newlist = NULL;
528         struct ref **newtail = &newlist;
529         struct ref *ref, *next;
530         struct ref *fastarray[32];
531
532         if (nr_match && !args.fetch_all) {
533                 if (ARRAY_SIZE(fastarray) < nr_match)
534                         return_refs = xcalloc(nr_match, sizeof(struct ref *));
535                 else {
536                         return_refs = fastarray;
537                         memset(return_refs, 0, sizeof(struct ref *) * nr_match);
538                 }
539         }
540         else
541                 return_refs = NULL;
542
543         for (ref = *refs; ref; ref = next) {
544                 next = ref->next;
545                 if (!memcmp(ref->name, "refs/", 5) &&
546                     check_refname_format(ref->name + 5, 0))
547                         ; /* trash */
548                 else if (args.fetch_all &&
549                          (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
550                         *newtail = ref;
551                         ref->next = NULL;
552                         newtail = &ref->next;
553                         continue;
554                 }
555                 else {
556                         int i;
557                         for (i = 0; i < nr_match; i++) {
558                                 if (!strcmp(ref->name, match[i])) {
559                                         match[i][0] = '\0';
560                                         return_refs[i] = ref;
561                                         break;
562                                 }
563                         }
564                         if (i < nr_match)
565                                 continue; /* we will link it later */
566                 }
567                 free(ref);
568         }
569
570         if (!args.fetch_all) {
571                 int i;
572                 for (i = 0; i < nr_match; i++) {
573                         ref = return_refs[i];
574                         if (ref) {
575                                 *newtail = ref;
576                                 ref->next = NULL;
577                                 newtail = &ref->next;
578                         }
579                 }
580                 if (return_refs != fastarray)
581                         free(return_refs);
582         }
583         *refs = newlist;
584 }
585
586 static void mark_alternate_complete(const struct ref *ref, void *unused)
587 {
588         mark_complete(NULL, ref->old_sha1, 0, NULL);
589 }
590
591 static int everything_local(struct ref **refs, int nr_match, char **match)
592 {
593         struct ref *ref;
594         int retval;
595         unsigned long cutoff = 0;
596
597         save_commit_buffer = 0;
598
599         for (ref = *refs; ref; ref = ref->next) {
600                 struct object *o;
601
602                 o = parse_object(ref->old_sha1);
603                 if (!o)
604                         continue;
605
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).
609                  */
610                 if (o->type == OBJ_COMMIT) {
611                         struct commit *commit = (struct commit *)o;
612                         if (!cutoff || cutoff < commit->date)
613                                 cutoff = commit->date;
614                 }
615         }
616
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(cutoff);
622         }
623
624         /*
625          * Mark all complete remote refs as common refs.
626          * Don't mark them common yet; the server has to be told so first.
627          */
628         for (ref = *refs; ref; ref = ref->next) {
629                 struct object *o = deref_tag(lookup_object(ref->old_sha1),
630                                              NULL, 0);
631
632                 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
633                         continue;
634
635                 if (!(o->flags & SEEN)) {
636                         rev_list_push((struct commit *)o, COMMON_REF | SEEN);
637
638                         mark_common((struct commit *)o, 1, 1);
639                 }
640         }
641
642         filter_refs(refs, nr_match, match);
643
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;
648
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;
658                 }
659
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);
666         }
667         return retval;
668 }
669
670 static int sideband_demux(int in, int out, void *data)
671 {
672         int *xd = data;
673
674         int ret = recv_sideband("fetch-pack", xd[0], out);
675         close(out);
676         return ret;
677 }
678
679 static int get_pack(int xd[2], char **pack_lockfile)
680 {
681         struct async demux;
682         const char *argv[20];
683         char keep_arg[256];
684         char hdr_arg[256];
685         const char **av;
686         int do_keep = args.keep_pack;
687         struct child_process cmd;
688
689         memset(&demux, 0, sizeof(demux));
690         if (use_sideband) {
691                 /* xd[] is talking with upload-pack; subprocess reads from
692                  * xd[0], spits out band#2 to stderr, and feeds us band#1
693                  * through demux->out.
694                  */
695                 demux.proc = sideband_demux;
696                 demux.data = xd;
697                 demux.out = -1;
698                 if (start_async(&demux))
699                         die("fetch-pack: unable to fork off sideband"
700                             " demultiplexer");
701         }
702         else
703                 demux.out = xd[0];
704
705         memset(&cmd, 0, sizeof(cmd));
706         cmd.argv = argv;
707         av = argv;
708         *hdr_arg = 0;
709         if (!args.keep_pack && unpack_limit) {
710                 struct pack_header header;
711
712                 if (read_pack_header(demux.out, &header))
713                         die("protocol error: bad pack header");
714                 snprintf(hdr_arg, sizeof(hdr_arg),
715                          "--pack_header=%"PRIu32",%"PRIu32,
716                          ntohl(header.hdr_version), ntohl(header.hdr_entries));
717                 if (ntohl(header.hdr_entries) < unpack_limit)
718                         do_keep = 0;
719                 else
720                         do_keep = 1;
721         }
722
723         if (do_keep) {
724                 if (pack_lockfile)
725                         cmd.out = -1;
726                 *av++ = "index-pack";
727                 *av++ = "--stdin";
728                 if (!args.quiet && !args.no_progress)
729                         *av++ = "-v";
730                 if (args.use_thin_pack)
731                         *av++ = "--fix-thin";
732                 if (args.lock_pack || unpack_limit) {
733                         int s = sprintf(keep_arg,
734                                         "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
735                         if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
736                                 strcpy(keep_arg + s, "localhost");
737                         *av++ = keep_arg;
738                 }
739         }
740         else {
741                 *av++ = "unpack-objects";
742                 if (args.quiet || args.no_progress)
743                         *av++ = "-q";
744         }
745         if (*hdr_arg)
746                 *av++ = hdr_arg;
747         if (fetch_fsck_objects >= 0
748             ? fetch_fsck_objects
749             : transfer_fsck_objects >= 0
750             ? transfer_fsck_objects
751             : 0)
752                 *av++ = "--strict";
753         *av++ = NULL;
754
755         cmd.in = demux.out;
756         cmd.git_cmd = 1;
757         if (start_command(&cmd))
758                 die("fetch-pack: unable to fork off %s", argv[0]);
759         if (do_keep && pack_lockfile) {
760                 *pack_lockfile = index_pack_lockfile(cmd.out);
761                 close(cmd.out);
762         }
763
764         if (finish_command(&cmd))
765                 die("%s failed", argv[0]);
766         if (use_sideband && finish_async(&demux))
767                 die("error in sideband demultiplexer");
768         return 0;
769 }
770
771 static struct ref *do_fetch_pack(int fd[2],
772                 const struct ref *orig_ref,
773                 int nr_match,
774                 char **match,
775                 char **pack_lockfile)
776 {
777         struct ref *ref = copy_ref_list(orig_ref);
778         unsigned char sha1[20];
779
780         if (is_repository_shallow() && !server_supports("shallow"))
781                 die("Server does not support shallow clients");
782         if (server_supports("multi_ack_detailed")) {
783                 if (args.verbose)
784                         fprintf(stderr, "Server supports multi_ack_detailed\n");
785                 multi_ack = 2;
786                 if (server_supports("no-done")) {
787                         if (args.verbose)
788                                 fprintf(stderr, "Server supports no-done\n");
789                         if (args.stateless_rpc)
790                                 no_done = 1;
791                 }
792         }
793         else if (server_supports("multi_ack")) {
794                 if (args.verbose)
795                         fprintf(stderr, "Server supports multi_ack\n");
796                 multi_ack = 1;
797         }
798         if (server_supports("side-band-64k")) {
799                 if (args.verbose)
800                         fprintf(stderr, "Server supports side-band-64k\n");
801                 use_sideband = 2;
802         }
803         else if (server_supports("side-band")) {
804                 if (args.verbose)
805                         fprintf(stderr, "Server supports side-band\n");
806                 use_sideband = 1;
807         }
808         if (server_supports("ofs-delta")) {
809                 if (args.verbose)
810                         fprintf(stderr, "Server supports ofs-delta\n");
811         } else
812                 prefer_ofs_delta = 0;
813         if (everything_local(&ref, nr_match, match)) {
814                 packet_flush(fd[1]);
815                 goto all_done;
816         }
817         if (find_common(fd, sha1, ref) < 0)
818                 if (!args.keep_pack)
819                         /* When cloning, it is not unusual to have
820                          * no common commit.
821                          */
822                         warning("no common commits");
823
824         if (args.stateless_rpc)
825                 packet_flush(fd[1]);
826         if (get_pack(fd, pack_lockfile))
827                 die("git fetch-pack: fetch failed.");
828
829  all_done:
830         return ref;
831 }
832
833 static int remove_duplicates(int nr_heads, char **heads)
834 {
835         int src, dst;
836
837         for (src = dst = 0; src < nr_heads; src++) {
838                 /* If heads[src] is different from any of
839                  * heads[0..dst], push it in.
840                  */
841                 int i;
842                 for (i = 0; i < dst; i++) {
843                         if (!strcmp(heads[i], heads[src]))
844                                 break;
845                 }
846                 if (i < dst)
847                         continue;
848                 if (src != dst)
849                         heads[dst] = heads[src];
850                 dst++;
851         }
852         return dst;
853 }
854
855 static int fetch_pack_config(const char *var, const char *value, void *cb)
856 {
857         if (strcmp(var, "fetch.unpacklimit") == 0) {
858                 fetch_unpack_limit = git_config_int(var, value);
859                 return 0;
860         }
861
862         if (strcmp(var, "transfer.unpacklimit") == 0) {
863                 transfer_unpack_limit = git_config_int(var, value);
864                 return 0;
865         }
866
867         if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
868                 prefer_ofs_delta = git_config_bool(var, value);
869                 return 0;
870         }
871
872         if (!strcmp(var, "fetch.fsckobjects")) {
873                 fetch_fsck_objects = git_config_bool(var, value);
874                 return 0;
875         }
876
877         if (!strcmp(var, "transfer.fsckobjects")) {
878                 transfer_fsck_objects = git_config_bool(var, value);
879                 return 0;
880         }
881
882         return git_default_config(var, value, cb);
883 }
884
885 static struct lock_file lock;
886
887 static void fetch_pack_setup(void)
888 {
889         static int did_setup;
890         if (did_setup)
891                 return;
892         git_config(fetch_pack_config, NULL);
893         if (0 <= transfer_unpack_limit)
894                 unpack_limit = transfer_unpack_limit;
895         else if (0 <= fetch_unpack_limit)
896                 unpack_limit = fetch_unpack_limit;
897         did_setup = 1;
898 }
899
900 int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
901 {
902         int i, ret, nr_heads;
903         struct ref *ref = NULL;
904         char *dest = NULL, **heads;
905         int fd[2];
906         char *pack_lockfile = NULL;
907         char **pack_lockfile_ptr = NULL;
908         struct child_process *conn;
909
910         packet_trace_identity("fetch-pack");
911
912         nr_heads = 0;
913         heads = NULL;
914         for (i = 1; i < argc; i++) {
915                 const char *arg = argv[i];
916
917                 if (*arg == '-') {
918                         if (!prefixcmp(arg, "--upload-pack=")) {
919                                 args.uploadpack = arg + 14;
920                                 continue;
921                         }
922                         if (!prefixcmp(arg, "--exec=")) {
923                                 args.uploadpack = arg + 7;
924                                 continue;
925                         }
926                         if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) {
927                                 args.quiet = 1;
928                                 continue;
929                         }
930                         if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
931                                 args.lock_pack = args.keep_pack;
932                                 args.keep_pack = 1;
933                                 continue;
934                         }
935                         if (!strcmp("--thin", arg)) {
936                                 args.use_thin_pack = 1;
937                                 continue;
938                         }
939                         if (!strcmp("--include-tag", arg)) {
940                                 args.include_tag = 1;
941                                 continue;
942                         }
943                         if (!strcmp("--all", arg)) {
944                                 args.fetch_all = 1;
945                                 continue;
946                         }
947                         if (!strcmp("--stdin", arg)) {
948                                 args.stdin_refs = 1;
949                                 continue;
950                         }
951                         if (!strcmp("-v", arg)) {
952                                 args.verbose = 1;
953                                 continue;
954                         }
955                         if (!prefixcmp(arg, "--depth=")) {
956                                 args.depth = strtol(arg + 8, NULL, 0);
957                                 continue;
958                         }
959                         if (!strcmp("--no-progress", arg)) {
960                                 args.no_progress = 1;
961                                 continue;
962                         }
963                         if (!strcmp("--stateless-rpc", arg)) {
964                                 args.stateless_rpc = 1;
965                                 continue;
966                         }
967                         if (!strcmp("--lock-pack", arg)) {
968                                 args.lock_pack = 1;
969                                 pack_lockfile_ptr = &pack_lockfile;
970                                 continue;
971                         }
972                         usage(fetch_pack_usage);
973                 }
974                 dest = (char *)arg;
975                 heads = (char **)(argv + i + 1);
976                 nr_heads = argc - i - 1;
977                 break;
978         }
979         if (!dest)
980                 usage(fetch_pack_usage);
981
982         if (args.stdin_refs) {
983                 /*
984                  * Copy refs from cmdline to new growable list, then
985                  * append the refs from the standard input.
986                  */
987                 int alloc_heads = nr_heads;
988                 int size = nr_heads * sizeof(*heads);
989                 heads = memcpy(xmalloc(size), heads, size);
990                 if (args.stateless_rpc) {
991                         /* in stateless RPC mode we use pkt-line to read
992                          * from stdin, until we get a flush packet
993                          */
994                         static char line[1000];
995                         for (;;) {
996                                 int n = packet_read_line(0, line, sizeof(line));
997                                 if (!n)
998                                         break;
999                                 if (line[n-1] == '\n')
1000                                         n--;
1001                                 ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
1002                                 heads[nr_heads++] = xmemdupz(line, n);
1003                         }
1004                 }
1005                 else {
1006                         /* read from stdin one ref per line, until EOF */
1007                         struct strbuf line = STRBUF_INIT;
1008                         while (strbuf_getline(&line, stdin, '\n') != EOF) {
1009                                 ALLOC_GROW(heads, nr_heads + 1, alloc_heads);
1010                                 heads[nr_heads++] = strbuf_detach(&line, NULL);
1011                         }
1012                         strbuf_release(&line);
1013                 }
1014         }
1015
1016         if (args.stateless_rpc) {
1017                 conn = NULL;
1018                 fd[0] = 0;
1019                 fd[1] = 1;
1020         } else {
1021                 conn = git_connect(fd, (char *)dest, args.uploadpack,
1022                                    args.verbose ? CONNECT_VERBOSE : 0);
1023         }
1024
1025         get_remote_heads(fd[0], &ref, 0, NULL);
1026
1027         ref = fetch_pack(&args, fd, conn, ref, dest,
1028                 nr_heads, heads, pack_lockfile_ptr);
1029         if (pack_lockfile) {
1030                 printf("lock %s\n", pack_lockfile);
1031                 fflush(stdout);
1032         }
1033         close(fd[0]);
1034         close(fd[1]);
1035         if (finish_connect(conn))
1036                 ref = NULL;
1037         ret = !ref;
1038
1039         if (!ret && nr_heads) {
1040                 /* If the heads to pull were given, we should have
1041                  * consumed all of them by matching the remote.
1042                  * Otherwise, 'git fetch remote no-such-ref' would
1043                  * silently succeed without issuing an error.
1044                  */
1045                 for (i = 0; i < nr_heads; i++)
1046                         if (heads[i] && heads[i][0]) {
1047                                 error("no such remote ref %s", heads[i]);
1048                                 ret = 1;
1049                         }
1050         }
1051         while (ref) {
1052                 printf("%s %s\n",
1053                        sha1_to_hex(ref->old_sha1), ref->name);
1054                 ref = ref->next;
1055         }
1056
1057         return ret;
1058 }
1059
1060 struct ref *fetch_pack(struct fetch_pack_args *my_args,
1061                        int fd[], struct child_process *conn,
1062                        const struct ref *ref,
1063                 const char *dest,
1064                 int nr_heads,
1065                 char **heads,
1066                 char **pack_lockfile)
1067 {
1068         struct stat st;
1069         struct ref *ref_cpy;
1070
1071         fetch_pack_setup();
1072         if (&args != my_args)
1073                 memcpy(&args, my_args, sizeof(args));
1074         if (args.depth > 0) {
1075                 if (stat(git_path("shallow"), &st))
1076                         st.st_mtime = 0;
1077         }
1078
1079         if (heads && nr_heads)
1080                 nr_heads = remove_duplicates(nr_heads, heads);
1081         if (!ref) {
1082                 packet_flush(fd[1]);
1083                 die("no matching remote head");
1084         }
1085         ref_cpy = do_fetch_pack(fd, ref, nr_heads, heads, pack_lockfile);
1086
1087         if (args.depth > 0) {
1088                 struct cache_time mtime;
1089                 struct strbuf sb = STRBUF_INIT;
1090                 char *shallow = git_path("shallow");
1091                 int fd;
1092
1093                 mtime.sec = st.st_mtime;
1094                 mtime.nsec = ST_MTIME_NSEC(st);
1095                 if (stat(shallow, &st)) {
1096                         if (mtime.sec)
1097                                 die("shallow file was removed during fetch");
1098                 } else if (st.st_mtime != mtime.sec
1099 #ifdef USE_NSEC
1100                                 || ST_MTIME_NSEC(st) != mtime.nsec
1101 #endif
1102                           )
1103                         die("shallow file was changed during fetch");
1104
1105                 fd = hold_lock_file_for_update(&lock, shallow,
1106                                                LOCK_DIE_ON_ERROR);
1107                 if (!write_shallow_commits(&sb, 0)
1108                  || write_in_full(fd, sb.buf, sb.len) != sb.len) {
1109                         unlink_or_warn(shallow);
1110                         rollback_lock_file(&lock);
1111                 } else {
1112                         commit_lock_file(&lock);
1113                 }
1114                 strbuf_release(&sb);
1115         }
1116
1117         reprepare_packed_git();
1118         return ref_cpy;
1119 }