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