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