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