]> git.ipfire.org Git - thirdparty/git.git/blob - fetch-pack.c
unpack-trees: batch fetching of missing blobs
[thirdparty/git.git] / fetch-pack.c
1 #include "cache.h"
2 #include "config.h"
3 #include "lockfile.h"
4 #include "refs.h"
5 #include "pkt-line.h"
6 #include "commit.h"
7 #include "tag.h"
8 #include "exec_cmd.h"
9 #include "pack.h"
10 #include "sideband.h"
11 #include "fetch-pack.h"
12 #include "remote.h"
13 #include "run-command.h"
14 #include "connect.h"
15 #include "transport.h"
16 #include "version.h"
17 #include "prio-queue.h"
18 #include "sha1-array.h"
19 #include "oidset.h"
20 #include "packfile.h"
21
22 static int transfer_unpack_limit = -1;
23 static int fetch_unpack_limit = -1;
24 static int unpack_limit = 100;
25 static int prefer_ofs_delta = 1;
26 static int no_done;
27 static int deepen_since_ok;
28 static int deepen_not_ok;
29 static int fetch_fsck_objects = -1;
30 static int transfer_fsck_objects = -1;
31 static int agent_supported;
32 static int server_supports_filtering;
33 static struct lock_file shallow_lock;
34 static const char *alternate_shallow_file;
35
36 /* Remember to update object flag allocation in object.h */
37 #define COMPLETE (1U << 0)
38 #define COMMON (1U << 1)
39 #define COMMON_REF (1U << 2)
40 #define SEEN (1U << 3)
41 #define POPPED (1U << 4)
42 #define ALTERNATE (1U << 5)
43
44 static int marked;
45
46 /*
47 * After sending this many "have"s if we do not get any new ACK , we
48 * give up traversing our history.
49 */
50 #define MAX_IN_VAIN 256
51
52 static struct prio_queue rev_list = { compare_commits_by_commit_date };
53 static int non_common_revs, multi_ack, use_sideband;
54 /* Allow specifying sha1 if it is a ref tip. */
55 #define ALLOW_TIP_SHA1 01
56 /* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
57 #define ALLOW_REACHABLE_SHA1 02
58 static unsigned int allow_unadvertised_object_request;
59
60 __attribute__((format (printf, 2, 3)))
61 static inline void print_verbose(const struct fetch_pack_args *args,
62 const char *fmt, ...)
63 {
64 va_list params;
65
66 if (!args->verbose)
67 return;
68
69 va_start(params, fmt);
70 vfprintf(stderr, fmt, params);
71 va_end(params);
72 fputc('\n', stderr);
73 }
74
75 struct alternate_object_cache {
76 struct object **items;
77 size_t nr, alloc;
78 };
79
80 static void cache_one_alternate(const char *refname,
81 const struct object_id *oid,
82 void *vcache)
83 {
84 struct alternate_object_cache *cache = vcache;
85 struct object *obj = parse_object(oid);
86
87 if (!obj || (obj->flags & ALTERNATE))
88 return;
89
90 obj->flags |= ALTERNATE;
91 ALLOC_GROW(cache->items, cache->nr + 1, cache->alloc);
92 cache->items[cache->nr++] = obj;
93 }
94
95 static void for_each_cached_alternate(void (*cb)(struct object *))
96 {
97 static int initialized;
98 static struct alternate_object_cache cache;
99 size_t i;
100
101 if (!initialized) {
102 for_each_alternate_ref(cache_one_alternate, &cache);
103 initialized = 1;
104 }
105
106 for (i = 0; i < cache.nr; i++)
107 cb(cache.items[i]);
108 }
109
110 static void rev_list_push(struct commit *commit, int mark)
111 {
112 if (!(commit->object.flags & mark)) {
113 commit->object.flags |= mark;
114
115 if (parse_commit(commit))
116 return;
117
118 prio_queue_put(&rev_list, commit);
119
120 if (!(commit->object.flags & COMMON))
121 non_common_revs++;
122 }
123 }
124
125 static int rev_list_insert_ref(const char *refname, const struct object_id *oid)
126 {
127 struct object *o = deref_tag(parse_object(oid), refname, 0);
128
129 if (o && o->type == OBJ_COMMIT)
130 rev_list_push((struct commit *)o, SEEN);
131
132 return 0;
133 }
134
135 static int rev_list_insert_ref_oid(const char *refname, const struct object_id *oid,
136 int flag, void *cb_data)
137 {
138 return rev_list_insert_ref(refname, oid);
139 }
140
141 static int clear_marks(const char *refname, const struct object_id *oid,
142 int flag, void *cb_data)
143 {
144 struct object *o = deref_tag(parse_object(oid), refname, 0);
145
146 if (o && o->type == OBJ_COMMIT)
147 clear_commit_marks((struct commit *)o,
148 COMMON | COMMON_REF | SEEN | POPPED);
149 return 0;
150 }
151
152 /*
153 This function marks a rev and its ancestors as common.
154 In some cases, it is desirable to mark only the ancestors (for example
155 when only the server does not yet know that they are common).
156 */
157
158 static void mark_common(struct commit *commit,
159 int ancestors_only, int dont_parse)
160 {
161 if (commit != NULL && !(commit->object.flags & COMMON)) {
162 struct object *o = (struct object *)commit;
163
164 if (!ancestors_only)
165 o->flags |= COMMON;
166
167 if (!(o->flags & SEEN))
168 rev_list_push(commit, SEEN);
169 else {
170 struct commit_list *parents;
171
172 if (!ancestors_only && !(o->flags & POPPED))
173 non_common_revs--;
174 if (!o->parsed && !dont_parse)
175 if (parse_commit(commit))
176 return;
177
178 for (parents = commit->parents;
179 parents;
180 parents = parents->next)
181 mark_common(parents->item, 0, dont_parse);
182 }
183 }
184 }
185
186 /*
187 Get the next rev to send, ignoring the common.
188 */
189
190 static const struct object_id *get_rev(void)
191 {
192 struct commit *commit = NULL;
193
194 while (commit == NULL) {
195 unsigned int mark;
196 struct commit_list *parents;
197
198 if (rev_list.nr == 0 || non_common_revs == 0)
199 return NULL;
200
201 commit = prio_queue_get(&rev_list);
202 parse_commit(commit);
203 parents = commit->parents;
204
205 commit->object.flags |= POPPED;
206 if (!(commit->object.flags & COMMON))
207 non_common_revs--;
208
209 if (commit->object.flags & COMMON) {
210 /* do not send "have", and ignore ancestors */
211 commit = NULL;
212 mark = COMMON | SEEN;
213 } else if (commit->object.flags & COMMON_REF)
214 /* send "have", and ignore ancestors */
215 mark = COMMON | SEEN;
216 else
217 /* send "have", also for its ancestors */
218 mark = SEEN;
219
220 while (parents) {
221 if (!(parents->item->object.flags & SEEN))
222 rev_list_push(parents->item, mark);
223 if (mark & COMMON)
224 mark_common(parents->item, 1, 0);
225 parents = parents->next;
226 }
227 }
228
229 return &commit->object.oid;
230 }
231
232 enum ack_type {
233 NAK = 0,
234 ACK,
235 ACK_continue,
236 ACK_common,
237 ACK_ready
238 };
239
240 static void consume_shallow_list(struct fetch_pack_args *args, int fd)
241 {
242 if (args->stateless_rpc && args->deepen) {
243 /* If we sent a depth we will get back "duplicate"
244 * shallow and unshallow commands every time there
245 * is a block of have lines exchanged.
246 */
247 char *line;
248 while ((line = packet_read_line(fd, NULL))) {
249 if (starts_with(line, "shallow "))
250 continue;
251 if (starts_with(line, "unshallow "))
252 continue;
253 die(_("git fetch-pack: expected shallow list"));
254 }
255 }
256 }
257
258 static enum ack_type get_ack(int fd, struct object_id *result_oid)
259 {
260 int len;
261 char *line = packet_read_line(fd, &len);
262 const char *arg;
263
264 if (!len)
265 die(_("git fetch-pack: expected ACK/NAK, got EOF"));
266 if (!strcmp(line, "NAK"))
267 return NAK;
268 if (skip_prefix(line, "ACK ", &arg)) {
269 if (!get_oid_hex(arg, result_oid)) {
270 arg += 40;
271 len -= arg - line;
272 if (len < 1)
273 return ACK;
274 if (strstr(arg, "continue"))
275 return ACK_continue;
276 if (strstr(arg, "common"))
277 return ACK_common;
278 if (strstr(arg, "ready"))
279 return ACK_ready;
280 return ACK;
281 }
282 }
283 if (skip_prefix(line, "ERR ", &arg))
284 die(_("remote error: %s"), arg);
285 die(_("git fetch-pack: expected ACK/NAK, got '%s'"), line);
286 }
287
288 static void send_request(struct fetch_pack_args *args,
289 int fd, struct strbuf *buf)
290 {
291 if (args->stateless_rpc) {
292 send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
293 packet_flush(fd);
294 } else
295 write_or_die(fd, buf->buf, buf->len);
296 }
297
298 static void insert_one_alternate_object(struct object *obj)
299 {
300 rev_list_insert_ref(NULL, &obj->oid);
301 }
302
303 #define INITIAL_FLUSH 16
304 #define PIPESAFE_FLUSH 32
305 #define LARGE_FLUSH 16384
306
307 static int next_flush(struct fetch_pack_args *args, int count)
308 {
309 if (args->stateless_rpc) {
310 if (count < LARGE_FLUSH)
311 count <<= 1;
312 else
313 count = count * 11 / 10;
314 } else {
315 if (count < PIPESAFE_FLUSH)
316 count <<= 1;
317 else
318 count += PIPESAFE_FLUSH;
319 }
320 return count;
321 }
322
323 static int find_common(struct fetch_pack_args *args,
324 int fd[2], struct object_id *result_oid,
325 struct ref *refs)
326 {
327 int fetching;
328 int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
329 const struct object_id *oid;
330 unsigned in_vain = 0;
331 int got_continue = 0;
332 int got_ready = 0;
333 struct strbuf req_buf = STRBUF_INIT;
334 size_t state_len = 0;
335
336 if (args->stateless_rpc && multi_ack == 1)
337 die(_("--stateless-rpc requires multi_ack_detailed"));
338 if (marked)
339 for_each_ref(clear_marks, NULL);
340 marked = 1;
341
342 for_each_ref(rev_list_insert_ref_oid, NULL);
343 for_each_cached_alternate(insert_one_alternate_object);
344
345 fetching = 0;
346 for ( ; refs ; refs = refs->next) {
347 struct object_id *remote = &refs->old_oid;
348 const char *remote_hex;
349 struct object *o;
350
351 /*
352 * If that object is complete (i.e. it is an ancestor of a
353 * local ref), we tell them we have it but do not have to
354 * tell them about its ancestors, which they already know
355 * about.
356 *
357 * We use lookup_object here because we are only
358 * interested in the case we *know* the object is
359 * reachable and we have already scanned it.
360 */
361 if (((o = lookup_object(remote->hash)) != NULL) &&
362 (o->flags & COMPLETE)) {
363 continue;
364 }
365
366 remote_hex = oid_to_hex(remote);
367 if (!fetching) {
368 struct strbuf c = STRBUF_INIT;
369 if (multi_ack == 2) strbuf_addstr(&c, " multi_ack_detailed");
370 if (multi_ack == 1) strbuf_addstr(&c, " multi_ack");
371 if (no_done) strbuf_addstr(&c, " no-done");
372 if (use_sideband == 2) strbuf_addstr(&c, " side-band-64k");
373 if (use_sideband == 1) strbuf_addstr(&c, " side-band");
374 if (args->deepen_relative) strbuf_addstr(&c, " deepen-relative");
375 if (args->use_thin_pack) strbuf_addstr(&c, " thin-pack");
376 if (args->no_progress) strbuf_addstr(&c, " no-progress");
377 if (args->include_tag) strbuf_addstr(&c, " include-tag");
378 if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta");
379 if (deepen_since_ok) strbuf_addstr(&c, " deepen-since");
380 if (deepen_not_ok) strbuf_addstr(&c, " deepen-not");
381 if (agent_supported) strbuf_addf(&c, " agent=%s",
382 git_user_agent_sanitized());
383 if (args->filter_options.choice)
384 strbuf_addstr(&c, " filter");
385 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
386 strbuf_release(&c);
387 } else
388 packet_buf_write(&req_buf, "want %s\n", remote_hex);
389 fetching++;
390 }
391
392 if (!fetching) {
393 strbuf_release(&req_buf);
394 packet_flush(fd[1]);
395 return 1;
396 }
397
398 if (is_repository_shallow())
399 write_shallow_commits(&req_buf, 1, NULL);
400 if (args->depth > 0)
401 packet_buf_write(&req_buf, "deepen %d", args->depth);
402 if (args->deepen_since) {
403 timestamp_t max_age = approxidate(args->deepen_since);
404 packet_buf_write(&req_buf, "deepen-since %"PRItime, max_age);
405 }
406 if (args->deepen_not) {
407 int i;
408 for (i = 0; i < args->deepen_not->nr; i++) {
409 struct string_list_item *s = args->deepen_not->items + i;
410 packet_buf_write(&req_buf, "deepen-not %s", s->string);
411 }
412 }
413 if (server_supports_filtering && args->filter_options.choice)
414 packet_buf_write(&req_buf, "filter %s",
415 args->filter_options.filter_spec);
416 packet_buf_flush(&req_buf);
417 state_len = req_buf.len;
418
419 if (args->deepen) {
420 char *line;
421 const char *arg;
422 struct object_id oid;
423
424 send_request(args, fd[1], &req_buf);
425 while ((line = packet_read_line(fd[0], NULL))) {
426 if (skip_prefix(line, "shallow ", &arg)) {
427 if (get_oid_hex(arg, &oid))
428 die(_("invalid shallow line: %s"), line);
429 register_shallow(&oid);
430 continue;
431 }
432 if (skip_prefix(line, "unshallow ", &arg)) {
433 if (get_oid_hex(arg, &oid))
434 die(_("invalid unshallow line: %s"), line);
435 if (!lookup_object(oid.hash))
436 die(_("object not found: %s"), line);
437 /* make sure that it is parsed as shallow */
438 if (!parse_object(&oid))
439 die(_("error in object: %s"), line);
440 if (unregister_shallow(&oid))
441 die(_("no shallow found: %s"), line);
442 continue;
443 }
444 die(_("expected shallow/unshallow, got %s"), line);
445 }
446 } else if (!args->stateless_rpc)
447 send_request(args, fd[1], &req_buf);
448
449 if (!args->stateless_rpc) {
450 /* If we aren't using the stateless-rpc interface
451 * we don't need to retain the headers.
452 */
453 strbuf_setlen(&req_buf, 0);
454 state_len = 0;
455 }
456
457 flushes = 0;
458 retval = -1;
459 if (args->no_dependents)
460 goto done;
461 while ((oid = get_rev())) {
462 packet_buf_write(&req_buf, "have %s\n", oid_to_hex(oid));
463 print_verbose(args, "have %s", oid_to_hex(oid));
464 in_vain++;
465 if (flush_at <= ++count) {
466 int ack;
467
468 packet_buf_flush(&req_buf);
469 send_request(args, fd[1], &req_buf);
470 strbuf_setlen(&req_buf, state_len);
471 flushes++;
472 flush_at = next_flush(args, count);
473
474 /*
475 * We keep one window "ahead" of the other side, and
476 * will wait for an ACK only on the next one
477 */
478 if (!args->stateless_rpc && count == INITIAL_FLUSH)
479 continue;
480
481 consume_shallow_list(args, fd[0]);
482 do {
483 ack = get_ack(fd[0], result_oid);
484 if (ack)
485 print_verbose(args, _("got %s %d %s"), "ack",
486 ack, oid_to_hex(result_oid));
487 switch (ack) {
488 case ACK:
489 flushes = 0;
490 multi_ack = 0;
491 retval = 0;
492 goto done;
493 case ACK_common:
494 case ACK_ready:
495 case ACK_continue: {
496 struct commit *commit =
497 lookup_commit(result_oid);
498 if (!commit)
499 die(_("invalid commit %s"), oid_to_hex(result_oid));
500 if (args->stateless_rpc
501 && ack == ACK_common
502 && !(commit->object.flags & COMMON)) {
503 /* We need to replay the have for this object
504 * on the next RPC request so the peer knows
505 * it is in common with us.
506 */
507 const char *hex = oid_to_hex(result_oid);
508 packet_buf_write(&req_buf, "have %s\n", hex);
509 state_len = req_buf.len;
510 /*
511 * Reset in_vain because an ack
512 * for this commit has not been
513 * seen.
514 */
515 in_vain = 0;
516 } else if (!args->stateless_rpc
517 || ack != ACK_common)
518 in_vain = 0;
519 mark_common(commit, 0, 1);
520 retval = 0;
521 got_continue = 1;
522 if (ack == ACK_ready) {
523 clear_prio_queue(&rev_list);
524 got_ready = 1;
525 }
526 break;
527 }
528 }
529 } while (ack);
530 flushes--;
531 if (got_continue && MAX_IN_VAIN < in_vain) {
532 print_verbose(args, _("giving up"));
533 break; /* give up */
534 }
535 }
536 }
537 done:
538 if (!got_ready || !no_done) {
539 packet_buf_write(&req_buf, "done\n");
540 send_request(args, fd[1], &req_buf);
541 }
542 print_verbose(args, _("done"));
543 if (retval != 0) {
544 multi_ack = 0;
545 flushes++;
546 }
547 strbuf_release(&req_buf);
548
549 if (!got_ready || !no_done)
550 consume_shallow_list(args, fd[0]);
551 while (flushes || multi_ack) {
552 int ack = get_ack(fd[0], result_oid);
553 if (ack) {
554 print_verbose(args, _("got %s (%d) %s"), "ack",
555 ack, oid_to_hex(result_oid));
556 if (ack == ACK)
557 return 0;
558 multi_ack = 1;
559 continue;
560 }
561 flushes--;
562 }
563 /* it is no error to fetch into a completely empty repo */
564 return count ? retval : 0;
565 }
566
567 static struct commit_list *complete;
568
569 static int mark_complete(const struct object_id *oid)
570 {
571 struct object *o = parse_object(oid);
572
573 while (o && o->type == OBJ_TAG) {
574 struct tag *t = (struct tag *) o;
575 if (!t->tagged)
576 break; /* broken repository */
577 o->flags |= COMPLETE;
578 o = parse_object(&t->tagged->oid);
579 }
580 if (o && o->type == OBJ_COMMIT) {
581 struct commit *commit = (struct commit *)o;
582 if (!(commit->object.flags & COMPLETE)) {
583 commit->object.flags |= COMPLETE;
584 commit_list_insert(commit, &complete);
585 }
586 }
587 return 0;
588 }
589
590 static int mark_complete_oid(const char *refname, const struct object_id *oid,
591 int flag, void *cb_data)
592 {
593 return mark_complete(oid);
594 }
595
596 static void mark_recent_complete_commits(struct fetch_pack_args *args,
597 timestamp_t cutoff)
598 {
599 while (complete && cutoff <= complete->item->date) {
600 print_verbose(args, _("Marking %s as complete"),
601 oid_to_hex(&complete->item->object.oid));
602 pop_most_recent_commit(&complete, COMPLETE);
603 }
604 }
605
606 static void add_refs_to_oidset(struct oidset *oids, struct ref *refs)
607 {
608 for (; refs; refs = refs->next)
609 oidset_insert(oids, &refs->old_oid);
610 }
611
612 static int tip_oids_contain(struct oidset *tip_oids,
613 struct ref *unmatched, struct ref *newlist,
614 const struct object_id *id)
615 {
616 /*
617 * Note that this only looks at the ref lists the first time it's
618 * called. This works out in filter_refs() because even though it may
619 * add to "newlist" between calls, the additions will always be for
620 * oids that are already in the set.
621 */
622 if (!tip_oids->map.map.tablesize) {
623 add_refs_to_oidset(tip_oids, unmatched);
624 add_refs_to_oidset(tip_oids, newlist);
625 }
626 return oidset_contains(tip_oids, id);
627 }
628
629 static void filter_refs(struct fetch_pack_args *args,
630 struct ref **refs,
631 struct ref **sought, int nr_sought)
632 {
633 struct ref *newlist = NULL;
634 struct ref **newtail = &newlist;
635 struct ref *unmatched = NULL;
636 struct ref *ref, *next;
637 struct oidset tip_oids = OIDSET_INIT;
638 int i;
639
640 i = 0;
641 for (ref = *refs; ref; ref = next) {
642 int keep = 0;
643 next = ref->next;
644
645 if (starts_with(ref->name, "refs/") &&
646 check_refname_format(ref->name, 0))
647 ; /* trash */
648 else {
649 while (i < nr_sought) {
650 int cmp = strcmp(ref->name, sought[i]->name);
651 if (cmp < 0)
652 break; /* definitely do not have it */
653 else if (cmp == 0) {
654 keep = 1; /* definitely have it */
655 sought[i]->match_status = REF_MATCHED;
656 }
657 i++;
658 }
659 }
660
661 if (!keep && args->fetch_all &&
662 (!args->deepen || !starts_with(ref->name, "refs/tags/")))
663 keep = 1;
664
665 if (keep) {
666 *newtail = ref;
667 ref->next = NULL;
668 newtail = &ref->next;
669 } else {
670 ref->next = unmatched;
671 unmatched = ref;
672 }
673 }
674
675 /* Append unmatched requests to the list */
676 for (i = 0; i < nr_sought; i++) {
677 struct object_id oid;
678 const char *p;
679
680 ref = sought[i];
681 if (ref->match_status != REF_NOT_MATCHED)
682 continue;
683 if (parse_oid_hex(ref->name, &oid, &p) ||
684 *p != '\0' ||
685 oidcmp(&oid, &ref->old_oid))
686 continue;
687
688 if ((allow_unadvertised_object_request &
689 (ALLOW_TIP_SHA1 | ALLOW_REACHABLE_SHA1)) ||
690 tip_oids_contain(&tip_oids, unmatched, newlist,
691 &ref->old_oid)) {
692 ref->match_status = REF_MATCHED;
693 *newtail = copy_ref(ref);
694 newtail = &(*newtail)->next;
695 } else {
696 ref->match_status = REF_UNADVERTISED_NOT_ALLOWED;
697 }
698 }
699
700 oidset_clear(&tip_oids);
701 for (ref = unmatched; ref; ref = next) {
702 next = ref->next;
703 free(ref);
704 }
705
706 *refs = newlist;
707 }
708
709 static void mark_alternate_complete(struct object *obj)
710 {
711 mark_complete(&obj->oid);
712 }
713
714 static int everything_local(struct fetch_pack_args *args,
715 struct ref **refs,
716 struct ref **sought, int nr_sought)
717 {
718 struct ref *ref;
719 int retval;
720 timestamp_t cutoff = 0;
721
722 save_commit_buffer = 0;
723
724 for (ref = *refs; ref; ref = ref->next) {
725 struct object *o;
726
727 if (!has_object_file(&ref->old_oid))
728 continue;
729
730 o = parse_object(&ref->old_oid);
731 if (!o)
732 continue;
733
734 /* We already have it -- which may mean that we were
735 * in sync with the other side at some time after
736 * that (it is OK if we guess wrong here).
737 */
738 if (o->type == OBJ_COMMIT) {
739 struct commit *commit = (struct commit *)o;
740 if (!cutoff || cutoff < commit->date)
741 cutoff = commit->date;
742 }
743 }
744
745 if (!args->no_dependents) {
746 if (!args->deepen) {
747 for_each_ref(mark_complete_oid, NULL);
748 for_each_cached_alternate(mark_alternate_complete);
749 commit_list_sort_by_date(&complete);
750 if (cutoff)
751 mark_recent_complete_commits(args, cutoff);
752 }
753
754 /*
755 * Mark all complete remote refs as common refs.
756 * Don't mark them common yet; the server has to be told so first.
757 */
758 for (ref = *refs; ref; ref = ref->next) {
759 struct object *o = deref_tag(lookup_object(ref->old_oid.hash),
760 NULL, 0);
761
762 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
763 continue;
764
765 if (!(o->flags & SEEN)) {
766 rev_list_push((struct commit *)o, COMMON_REF | SEEN);
767
768 mark_common((struct commit *)o, 1, 1);
769 }
770 }
771 }
772
773 filter_refs(args, refs, sought, nr_sought);
774
775 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
776 const struct object_id *remote = &ref->old_oid;
777 struct object *o;
778
779 o = lookup_object(remote->hash);
780 if (!o || !(o->flags & COMPLETE)) {
781 retval = 0;
782 print_verbose(args, "want %s (%s)", oid_to_hex(remote),
783 ref->name);
784 continue;
785 }
786 print_verbose(args, _("already have %s (%s)"), oid_to_hex(remote),
787 ref->name);
788 }
789 return retval;
790 }
791
792 static int sideband_demux(int in, int out, void *data)
793 {
794 int *xd = data;
795 int ret;
796
797 ret = recv_sideband("fetch-pack", xd[0], out);
798 close(out);
799 return ret;
800 }
801
802 static int get_pack(struct fetch_pack_args *args,
803 int xd[2], char **pack_lockfile)
804 {
805 struct async demux;
806 int do_keep = args->keep_pack;
807 const char *cmd_name;
808 struct pack_header header;
809 int pass_header = 0;
810 struct child_process cmd = CHILD_PROCESS_INIT;
811 int ret;
812
813 memset(&demux, 0, sizeof(demux));
814 if (use_sideband) {
815 /* xd[] is talking with upload-pack; subprocess reads from
816 * xd[0], spits out band#2 to stderr, and feeds us band#1
817 * through demux->out.
818 */
819 demux.proc = sideband_demux;
820 demux.data = xd;
821 demux.out = -1;
822 demux.isolate_sigpipe = 1;
823 if (start_async(&demux))
824 die(_("fetch-pack: unable to fork off sideband demultiplexer"));
825 }
826 else
827 demux.out = xd[0];
828
829 if (!args->keep_pack && unpack_limit) {
830
831 if (read_pack_header(demux.out, &header))
832 die(_("protocol error: bad pack header"));
833 pass_header = 1;
834 if (ntohl(header.hdr_entries) < unpack_limit)
835 do_keep = 0;
836 else
837 do_keep = 1;
838 }
839
840 if (alternate_shallow_file) {
841 argv_array_push(&cmd.args, "--shallow-file");
842 argv_array_push(&cmd.args, alternate_shallow_file);
843 }
844
845 if (do_keep || args->from_promisor) {
846 if (pack_lockfile)
847 cmd.out = -1;
848 cmd_name = "index-pack";
849 argv_array_push(&cmd.args, cmd_name);
850 argv_array_push(&cmd.args, "--stdin");
851 if (!args->quiet && !args->no_progress)
852 argv_array_push(&cmd.args, "-v");
853 if (args->use_thin_pack)
854 argv_array_push(&cmd.args, "--fix-thin");
855 if (do_keep && (args->lock_pack || unpack_limit)) {
856 char hostname[HOST_NAME_MAX + 1];
857 if (xgethostname(hostname, sizeof(hostname)))
858 xsnprintf(hostname, sizeof(hostname), "localhost");
859 argv_array_pushf(&cmd.args,
860 "--keep=fetch-pack %"PRIuMAX " on %s",
861 (uintmax_t)getpid(), hostname);
862 }
863 if (args->check_self_contained_and_connected)
864 argv_array_push(&cmd.args, "--check-self-contained-and-connected");
865 if (args->from_promisor)
866 argv_array_push(&cmd.args, "--promisor");
867 }
868 else {
869 cmd_name = "unpack-objects";
870 argv_array_push(&cmd.args, cmd_name);
871 if (args->quiet || args->no_progress)
872 argv_array_push(&cmd.args, "-q");
873 args->check_self_contained_and_connected = 0;
874 }
875
876 if (pass_header)
877 argv_array_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
878 ntohl(header.hdr_version),
879 ntohl(header.hdr_entries));
880 if (fetch_fsck_objects >= 0
881 ? fetch_fsck_objects
882 : transfer_fsck_objects >= 0
883 ? transfer_fsck_objects
884 : 0)
885 argv_array_push(&cmd.args, "--strict");
886
887 cmd.in = demux.out;
888 cmd.git_cmd = 1;
889 if (start_command(&cmd))
890 die(_("fetch-pack: unable to fork off %s"), cmd_name);
891 if (do_keep && pack_lockfile) {
892 *pack_lockfile = index_pack_lockfile(cmd.out);
893 close(cmd.out);
894 }
895
896 if (!use_sideband)
897 /* Closed by start_command() */
898 xd[0] = -1;
899
900 ret = finish_command(&cmd);
901 if (!ret || (args->check_self_contained_and_connected && ret == 1))
902 args->self_contained_and_connected =
903 args->check_self_contained_and_connected &&
904 ret == 0;
905 else
906 die(_("%s failed"), cmd_name);
907 if (use_sideband && finish_async(&demux))
908 die(_("error in sideband demultiplexer"));
909 return 0;
910 }
911
912 static int cmp_ref_by_name(const void *a_, const void *b_)
913 {
914 const struct ref *a = *((const struct ref **)a_);
915 const struct ref *b = *((const struct ref **)b_);
916 return strcmp(a->name, b->name);
917 }
918
919 static struct ref *do_fetch_pack(struct fetch_pack_args *args,
920 int fd[2],
921 const struct ref *orig_ref,
922 struct ref **sought, int nr_sought,
923 struct shallow_info *si,
924 char **pack_lockfile)
925 {
926 struct ref *ref = copy_ref_list(orig_ref);
927 struct object_id oid;
928 const char *agent_feature;
929 int agent_len;
930
931 sort_ref_list(&ref, ref_compare_name);
932 QSORT(sought, nr_sought, cmp_ref_by_name);
933
934 if ((args->depth > 0 || is_repository_shallow()) && !server_supports("shallow"))
935 die(_("Server does not support shallow clients"));
936 if (args->depth > 0 || args->deepen_since || args->deepen_not)
937 args->deepen = 1;
938 if (server_supports("multi_ack_detailed")) {
939 print_verbose(args, _("Server supports multi_ack_detailed"));
940 multi_ack = 2;
941 if (server_supports("no-done")) {
942 print_verbose(args, _("Server supports no-done"));
943 if (args->stateless_rpc)
944 no_done = 1;
945 }
946 }
947 else if (server_supports("multi_ack")) {
948 print_verbose(args, _("Server supports multi_ack"));
949 multi_ack = 1;
950 }
951 if (server_supports("side-band-64k")) {
952 print_verbose(args, _("Server supports side-band-64k"));
953 use_sideband = 2;
954 }
955 else if (server_supports("side-band")) {
956 print_verbose(args, _("Server supports side-band"));
957 use_sideband = 1;
958 }
959 if (server_supports("allow-tip-sha1-in-want")) {
960 print_verbose(args, _("Server supports allow-tip-sha1-in-want"));
961 allow_unadvertised_object_request |= ALLOW_TIP_SHA1;
962 }
963 if (server_supports("allow-reachable-sha1-in-want")) {
964 print_verbose(args, _("Server supports allow-reachable-sha1-in-want"));
965 allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
966 }
967 if (!server_supports("thin-pack"))
968 args->use_thin_pack = 0;
969 if (!server_supports("no-progress"))
970 args->no_progress = 0;
971 if (!server_supports("include-tag"))
972 args->include_tag = 0;
973 if (server_supports("ofs-delta"))
974 print_verbose(args, _("Server supports ofs-delta"));
975 else
976 prefer_ofs_delta = 0;
977
978 if (server_supports("filter")) {
979 server_supports_filtering = 1;
980 print_verbose(args, _("Server supports filter"));
981 } else if (args->filter_options.choice) {
982 warning("filtering not recognized by server, ignoring");
983 }
984
985 if ((agent_feature = server_feature_value("agent", &agent_len))) {
986 agent_supported = 1;
987 if (agent_len)
988 print_verbose(args, _("Server version is %.*s"),
989 agent_len, agent_feature);
990 }
991 if (server_supports("deepen-since"))
992 deepen_since_ok = 1;
993 else if (args->deepen_since)
994 die(_("Server does not support --shallow-since"));
995 if (server_supports("deepen-not"))
996 deepen_not_ok = 1;
997 else if (args->deepen_not)
998 die(_("Server does not support --shallow-exclude"));
999 if (!server_supports("deepen-relative") && args->deepen_relative)
1000 die(_("Server does not support --deepen"));
1001
1002 if (everything_local(args, &ref, sought, nr_sought)) {
1003 packet_flush(fd[1]);
1004 goto all_done;
1005 }
1006 if (find_common(args, fd, &oid, ref) < 0)
1007 if (!args->keep_pack)
1008 /* When cloning, it is not unusual to have
1009 * no common commit.
1010 */
1011 warning(_("no common commits"));
1012
1013 if (args->stateless_rpc)
1014 packet_flush(fd[1]);
1015 if (args->deepen)
1016 setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
1017 NULL);
1018 else if (si->nr_ours || si->nr_theirs)
1019 alternate_shallow_file = setup_temporary_shallow(si->shallow);
1020 else
1021 alternate_shallow_file = NULL;
1022 if (get_pack(args, fd, pack_lockfile))
1023 die(_("git fetch-pack: fetch failed."));
1024
1025 all_done:
1026 return ref;
1027 }
1028
1029 static void fetch_pack_config(void)
1030 {
1031 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit);
1032 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit);
1033 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
1034 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
1035 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
1036
1037 git_config(git_default_config, NULL);
1038 }
1039
1040 static void fetch_pack_setup(void)
1041 {
1042 static int did_setup;
1043 if (did_setup)
1044 return;
1045 fetch_pack_config();
1046 if (0 <= transfer_unpack_limit)
1047 unpack_limit = transfer_unpack_limit;
1048 else if (0 <= fetch_unpack_limit)
1049 unpack_limit = fetch_unpack_limit;
1050 did_setup = 1;
1051 }
1052
1053 static int remove_duplicates_in_refs(struct ref **ref, int nr)
1054 {
1055 struct string_list names = STRING_LIST_INIT_NODUP;
1056 int src, dst;
1057
1058 for (src = dst = 0; src < nr; src++) {
1059 struct string_list_item *item;
1060 item = string_list_insert(&names, ref[src]->name);
1061 if (item->util)
1062 continue; /* already have it */
1063 item->util = ref[src];
1064 if (src != dst)
1065 ref[dst] = ref[src];
1066 dst++;
1067 }
1068 for (src = dst; src < nr; src++)
1069 ref[src] = NULL;
1070 string_list_clear(&names, 0);
1071 return dst;
1072 }
1073
1074 static void update_shallow(struct fetch_pack_args *args,
1075 struct ref **sought, int nr_sought,
1076 struct shallow_info *si)
1077 {
1078 struct oid_array ref = OID_ARRAY_INIT;
1079 int *status;
1080 int i;
1081
1082 if (args->deepen && alternate_shallow_file) {
1083 if (*alternate_shallow_file == '\0') { /* --unshallow */
1084 unlink_or_warn(git_path_shallow());
1085 rollback_lock_file(&shallow_lock);
1086 } else
1087 commit_lock_file(&shallow_lock);
1088 return;
1089 }
1090
1091 if (!si->shallow || !si->shallow->nr)
1092 return;
1093
1094 if (args->cloning) {
1095 /*
1096 * remote is shallow, but this is a clone, there are
1097 * no objects in repo to worry about. Accept any
1098 * shallow points that exist in the pack (iow in repo
1099 * after get_pack() and reprepare_packed_git())
1100 */
1101 struct oid_array extra = OID_ARRAY_INIT;
1102 struct object_id *oid = si->shallow->oid;
1103 for (i = 0; i < si->shallow->nr; i++)
1104 if (has_object_file(&oid[i]))
1105 oid_array_append(&extra, &oid[i]);
1106 if (extra.nr) {
1107 setup_alternate_shallow(&shallow_lock,
1108 &alternate_shallow_file,
1109 &extra);
1110 commit_lock_file(&shallow_lock);
1111 }
1112 oid_array_clear(&extra);
1113 return;
1114 }
1115
1116 if (!si->nr_ours && !si->nr_theirs)
1117 return;
1118
1119 remove_nonexistent_theirs_shallow(si);
1120 if (!si->nr_ours && !si->nr_theirs)
1121 return;
1122 for (i = 0; i < nr_sought; i++)
1123 oid_array_append(&ref, &sought[i]->old_oid);
1124 si->ref = &ref;
1125
1126 if (args->update_shallow) {
1127 /*
1128 * remote is also shallow, .git/shallow may be updated
1129 * so all refs can be accepted. Make sure we only add
1130 * shallow roots that are actually reachable from new
1131 * refs.
1132 */
1133 struct oid_array extra = OID_ARRAY_INIT;
1134 struct object_id *oid = si->shallow->oid;
1135 assign_shallow_commits_to_refs(si, NULL, NULL);
1136 if (!si->nr_ours && !si->nr_theirs) {
1137 oid_array_clear(&ref);
1138 return;
1139 }
1140 for (i = 0; i < si->nr_ours; i++)
1141 oid_array_append(&extra, &oid[si->ours[i]]);
1142 for (i = 0; i < si->nr_theirs; i++)
1143 oid_array_append(&extra, &oid[si->theirs[i]]);
1144 setup_alternate_shallow(&shallow_lock,
1145 &alternate_shallow_file,
1146 &extra);
1147 commit_lock_file(&shallow_lock);
1148 oid_array_clear(&extra);
1149 oid_array_clear(&ref);
1150 return;
1151 }
1152
1153 /*
1154 * remote is also shallow, check what ref is safe to update
1155 * without updating .git/shallow
1156 */
1157 status = xcalloc(nr_sought, sizeof(*status));
1158 assign_shallow_commits_to_refs(si, NULL, status);
1159 if (si->nr_ours || si->nr_theirs) {
1160 for (i = 0; i < nr_sought; i++)
1161 if (status[i])
1162 sought[i]->status = REF_STATUS_REJECT_SHALLOW;
1163 }
1164 free(status);
1165 oid_array_clear(&ref);
1166 }
1167
1168 struct ref *fetch_pack(struct fetch_pack_args *args,
1169 int fd[], struct child_process *conn,
1170 const struct ref *ref,
1171 const char *dest,
1172 struct ref **sought, int nr_sought,
1173 struct oid_array *shallow,
1174 char **pack_lockfile)
1175 {
1176 struct ref *ref_cpy;
1177 struct shallow_info si;
1178
1179 fetch_pack_setup();
1180 if (nr_sought)
1181 nr_sought = remove_duplicates_in_refs(sought, nr_sought);
1182
1183 if (!ref) {
1184 packet_flush(fd[1]);
1185 die(_("no matching remote head"));
1186 }
1187 prepare_shallow_info(&si, shallow);
1188 ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
1189 &si, pack_lockfile);
1190 reprepare_packed_git();
1191 update_shallow(args, sought, nr_sought, &si);
1192 clear_shallow_info(&si);
1193 return ref_cpy;
1194 }
1195
1196 int report_unmatched_refs(struct ref **sought, int nr_sought)
1197 {
1198 int i, ret = 0;
1199
1200 for (i = 0; i < nr_sought; i++) {
1201 if (!sought[i])
1202 continue;
1203 switch (sought[i]->match_status) {
1204 case REF_MATCHED:
1205 continue;
1206 case REF_NOT_MATCHED:
1207 error(_("no such remote ref %s"), sought[i]->name);
1208 break;
1209 case REF_UNADVERTISED_NOT_ALLOWED:
1210 error(_("Server does not allow request for unadvertised object %s"),
1211 sought[i]->name);
1212 break;
1213 }
1214 ret = 1;
1215 }
1216 return ret;
1217 }