]> git.ipfire.org Git - thirdparty/git.git/blob - fetch-pack.c
fa4231fee74c9f4efbeb61480859c20219718d29
[thirdparty/git.git] / fetch-pack.c
1 #define USE_THE_REPOSITORY_VARIABLE
2 #define DISABLE_SIGN_COMPARE_WARNINGS
3
4 #include "git-compat-util.h"
5 #include "repository.h"
6 #include "config.h"
7 #include "date.h"
8 #include "environment.h"
9 #include "gettext.h"
10 #include "hex.h"
11 #include "lockfile.h"
12 #include "refs.h"
13 #include "pkt-line.h"
14 #include "commit.h"
15 #include "tag.h"
16 #include "pack.h"
17 #include "sideband.h"
18 #include "fetch-pack.h"
19 #include "remote.h"
20 #include "run-command.h"
21 #include "connect.h"
22 #include "trace2.h"
23 #include "version.h"
24 #include "oid-array.h"
25 #include "oidset.h"
26 #include "packfile.h"
27 #include "object-store.h"
28 #include "path.h"
29 #include "connected.h"
30 #include "fetch-negotiator.h"
31 #include "fsck.h"
32 #include "shallow.h"
33 #include "commit-reach.h"
34 #include "commit-graph.h"
35 #include "sigchain.h"
36 #include "mergesort.h"
37
38 static int transfer_unpack_limit = -1;
39 static int fetch_unpack_limit = -1;
40 static int unpack_limit = 100;
41 static int prefer_ofs_delta = 1;
42 static int no_done;
43 static int deepen_since_ok;
44 static int deepen_not_ok;
45 static int fetch_fsck_objects = -1;
46 static int transfer_fsck_objects = -1;
47 static int agent_supported;
48 static int server_supports_filtering;
49 static int advertise_sid;
50 static struct shallow_lock shallow_lock;
51 static const char *alternate_shallow_file;
52 static struct fsck_options fsck_options = FSCK_OPTIONS_MISSING_GITMODULES;
53 static struct strbuf fsck_msg_types = STRBUF_INIT;
54 static struct string_list uri_protocols = STRING_LIST_INIT_DUP;
55
56 /* Remember to update object flag allocation in object.h */
57 #define COMPLETE (1U << 0)
58 #define ALTERNATE (1U << 1)
59 #define COMMON (1U << 6)
60 #define REACH_SCRATCH (1U << 7)
61
62 /*
63 * After sending this many "have"s if we do not get any new ACK , we
64 * give up traversing our history.
65 */
66 #define MAX_IN_VAIN 256
67
68 static int multi_ack, use_sideband;
69 /* Allow specifying sha1 if it is a ref tip. */
70 #define ALLOW_TIP_SHA1 01
71 /* Allow request of a sha1 if it is reachable from a ref (possibly hidden ref). */
72 #define ALLOW_REACHABLE_SHA1 02
73 static unsigned int allow_unadvertised_object_request;
74
75 __attribute__((format (printf, 2, 3)))
76 static inline void print_verbose(const struct fetch_pack_args *args,
77 const char *fmt, ...)
78 {
79 va_list params;
80
81 if (!args->verbose)
82 return;
83
84 va_start(params, fmt);
85 vfprintf(stderr, fmt, params);
86 va_end(params);
87 fputc('\n', stderr);
88 }
89
90 struct alternate_object_cache {
91 struct object **items;
92 size_t nr, alloc;
93 };
94
95 static void cache_one_alternate(const struct object_id *oid,
96 void *vcache)
97 {
98 struct alternate_object_cache *cache = vcache;
99 struct object *obj = parse_object(the_repository, oid);
100
101 if (!obj || (obj->flags & ALTERNATE))
102 return;
103
104 obj->flags |= ALTERNATE;
105 ALLOC_GROW(cache->items, cache->nr + 1, cache->alloc);
106 cache->items[cache->nr++] = obj;
107 }
108
109 static void for_each_cached_alternate(struct fetch_negotiator *negotiator,
110 void (*cb)(struct fetch_negotiator *,
111 struct object *))
112 {
113 static int initialized;
114 static struct alternate_object_cache cache;
115 size_t i;
116
117 if (!initialized) {
118 for_each_alternate_ref(cache_one_alternate, &cache);
119 initialized = 1;
120 }
121
122 for (i = 0; i < cache.nr; i++)
123 cb(negotiator, cache.items[i]);
124 }
125
126 static void die_in_commit_graph_only(const struct object_id *oid)
127 {
128 die(_("You are attempting to fetch %s, which is in the commit graph file but not in the object database.\n"
129 "This is probably due to repo corruption.\n"
130 "If you are attempting to repair this repo corruption by refetching the missing object, use 'git fetch --refetch' with the missing object."),
131 oid_to_hex(oid));
132 }
133
134 static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
135 int mark_tags_complete_and_check_obj_db)
136 {
137 enum object_type type;
138 struct object_info info = { .typep = &type };
139 struct commit *commit;
140
141 commit = lookup_commit_in_graph(the_repository, oid);
142 if (commit) {
143 if (mark_tags_complete_and_check_obj_db) {
144 if (!has_object(the_repository, oid, 0))
145 die_in_commit_graph_only(oid);
146 }
147 return commit;
148 }
149
150 while (1) {
151 if (oid_object_info_extended(the_repository, oid, &info,
152 OBJECT_INFO_SKIP_FETCH_OBJECT | OBJECT_INFO_QUICK))
153 return NULL;
154 if (type == OBJ_TAG) {
155 struct tag *tag = (struct tag *)
156 parse_object(the_repository, oid);
157
158 if (!tag->tagged)
159 return NULL;
160 if (mark_tags_complete_and_check_obj_db)
161 tag->object.flags |= COMPLETE;
162 oid = &tag->tagged->oid;
163 } else {
164 break;
165 }
166 }
167
168 if (type == OBJ_COMMIT) {
169 struct commit *commit = lookup_commit(the_repository, oid);
170 if (!commit || repo_parse_commit(the_repository, commit))
171 return NULL;
172 return commit;
173 }
174
175 return NULL;
176 }
177
178 static int rev_list_insert_ref(struct fetch_negotiator *negotiator,
179 const struct object_id *oid)
180 {
181 struct commit *c = deref_without_lazy_fetch(oid, 0);
182
183 if (c)
184 negotiator->add_tip(negotiator, c);
185 return 0;
186 }
187
188 static int rev_list_insert_ref_oid(const char *refname UNUSED,
189 const char *referent UNUSED,
190 const struct object_id *oid,
191 int flag UNUSED,
192 void *cb_data)
193 {
194 return rev_list_insert_ref(cb_data, oid);
195 }
196
197 enum ack_type {
198 NAK = 0,
199 ACK,
200 ACK_continue,
201 ACK_common,
202 ACK_ready
203 };
204
205 static void consume_shallow_list(struct fetch_pack_args *args,
206 struct packet_reader *reader)
207 {
208 if (args->stateless_rpc && args->deepen) {
209 /* If we sent a depth we will get back "duplicate"
210 * shallow and unshallow commands every time there
211 * is a block of have lines exchanged.
212 */
213 while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
214 if (starts_with(reader->line, "shallow "))
215 continue;
216 if (starts_with(reader->line, "unshallow "))
217 continue;
218 die(_("git fetch-pack: expected shallow list"));
219 }
220 if (reader->status != PACKET_READ_FLUSH)
221 die(_("git fetch-pack: expected a flush packet after shallow list"));
222 }
223 }
224
225 static enum ack_type get_ack(struct packet_reader *reader,
226 struct object_id *result_oid)
227 {
228 int len;
229 const char *arg;
230
231 if (packet_reader_read(reader) != PACKET_READ_NORMAL)
232 die(_("git fetch-pack: expected ACK/NAK, got a flush packet"));
233 len = reader->pktlen;
234
235 if (!strcmp(reader->line, "NAK"))
236 return NAK;
237 if (skip_prefix(reader->line, "ACK ", &arg)) {
238 const char *p;
239 if (!parse_oid_hex(arg, result_oid, &p)) {
240 len -= p - reader->line;
241 if (len < 1)
242 return ACK;
243 if (strstr(p, "continue"))
244 return ACK_continue;
245 if (strstr(p, "common"))
246 return ACK_common;
247 if (strstr(p, "ready"))
248 return ACK_ready;
249 return ACK;
250 }
251 }
252 die(_("git fetch-pack: expected ACK/NAK, got '%s'"), reader->line);
253 }
254
255 static void send_request(struct fetch_pack_args *args,
256 int fd, struct strbuf *buf)
257 {
258 if (args->stateless_rpc) {
259 send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
260 packet_flush(fd);
261 } else {
262 if (write_in_full(fd, buf->buf, buf->len) < 0)
263 die_errno(_("unable to write to remote"));
264 }
265 }
266
267 static void insert_one_alternate_object(struct fetch_negotiator *negotiator,
268 struct object *obj)
269 {
270 rev_list_insert_ref(negotiator, &obj->oid);
271 }
272
273 #define INITIAL_FLUSH 16
274 #define PIPESAFE_FLUSH 32
275 #define LARGE_FLUSH 16384
276
277 static int next_flush(int stateless_rpc, int count)
278 {
279 if (stateless_rpc) {
280 if (count < LARGE_FLUSH)
281 count <<= 1;
282 else
283 count = count * 11 / 10;
284 } else {
285 if (count < PIPESAFE_FLUSH)
286 count <<= 1;
287 else
288 count += PIPESAFE_FLUSH;
289 }
290 return count;
291 }
292
293 static void mark_tips(struct fetch_negotiator *negotiator,
294 const struct oid_array *negotiation_tips)
295 {
296 int i;
297
298 if (!negotiation_tips) {
299 refs_for_each_rawref(get_main_ref_store(the_repository),
300 rev_list_insert_ref_oid, negotiator);
301 return;
302 }
303
304 for (i = 0; i < negotiation_tips->nr; i++)
305 rev_list_insert_ref(negotiator, &negotiation_tips->oid[i]);
306 return;
307 }
308
309 static void send_filter(struct fetch_pack_args *args,
310 struct strbuf *req_buf,
311 int server_supports_filter)
312 {
313 if (args->filter_options.choice) {
314 const char *spec =
315 expand_list_objects_filter_spec(&args->filter_options);
316 if (server_supports_filter) {
317 print_verbose(args, _("Server supports filter"));
318 packet_buf_write(req_buf, "filter %s", spec);
319 trace2_data_string("fetch", the_repository,
320 "filter/effective", spec);
321 } else {
322 warning("filtering not recognized by server, ignoring");
323 trace2_data_string("fetch", the_repository,
324 "filter/unsupported", spec);
325 }
326 } else {
327 trace2_data_string("fetch", the_repository,
328 "filter/none", "");
329 }
330 }
331
332 static int find_common(struct fetch_negotiator *negotiator,
333 struct fetch_pack_args *args,
334 int fd[2], struct object_id *result_oid,
335 struct ref *refs)
336 {
337 int fetching;
338 int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
339 int negotiation_round = 0, haves = 0;
340 const struct object_id *oid;
341 unsigned in_vain = 0;
342 int got_continue = 0;
343 int got_ready = 0;
344 struct strbuf req_buf = STRBUF_INIT;
345 size_t state_len = 0;
346 struct packet_reader reader;
347
348 if (args->stateless_rpc && multi_ack == 1)
349 die(_("the option '%s' requires '%s'"), "--stateless-rpc", "multi_ack_detailed");
350
351 packet_reader_init(&reader, fd[0], NULL, 0,
352 PACKET_READ_CHOMP_NEWLINE |
353 PACKET_READ_DIE_ON_ERR_PACKET);
354
355 mark_tips(negotiator, args->negotiation_tips);
356 for_each_cached_alternate(negotiator, insert_one_alternate_object);
357
358 fetching = 0;
359 for ( ; refs ; refs = refs->next) {
360 struct object_id *remote = &refs->old_oid;
361 const char *remote_hex;
362 struct object *o;
363
364 if (!args->refetch) {
365 /*
366 * If that object is complete (i.e. it is an ancestor of a
367 * local ref), we tell them we have it but do not have to
368 * tell them about its ancestors, which they already know
369 * about.
370 *
371 * We use lookup_object here because we are only
372 * interested in the case we *know* the object is
373 * reachable and we have already scanned it.
374 */
375 if (((o = lookup_object(the_repository, remote)) != NULL) &&
376 (o->flags & COMPLETE)) {
377 continue;
378 }
379 }
380
381 remote_hex = oid_to_hex(remote);
382 if (!fetching) {
383 struct strbuf c = STRBUF_INIT;
384 if (multi_ack == 2) strbuf_addstr(&c, " multi_ack_detailed");
385 if (multi_ack == 1) strbuf_addstr(&c, " multi_ack");
386 if (no_done) strbuf_addstr(&c, " no-done");
387 if (use_sideband == 2) strbuf_addstr(&c, " side-band-64k");
388 if (use_sideband == 1) strbuf_addstr(&c, " side-band");
389 if (args->deepen_relative) strbuf_addstr(&c, " deepen-relative");
390 if (args->use_thin_pack) strbuf_addstr(&c, " thin-pack");
391 if (args->no_progress) strbuf_addstr(&c, " no-progress");
392 if (args->include_tag) strbuf_addstr(&c, " include-tag");
393 if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta");
394 if (deepen_since_ok) strbuf_addstr(&c, " deepen-since");
395 if (deepen_not_ok) strbuf_addstr(&c, " deepen-not");
396 if (agent_supported) strbuf_addf(&c, " agent=%s",
397 git_user_agent_sanitized());
398 if (advertise_sid)
399 strbuf_addf(&c, " session-id=%s", trace2_session_id());
400 if (args->filter_options.choice)
401 strbuf_addstr(&c, " filter");
402 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
403 strbuf_release(&c);
404 } else
405 packet_buf_write(&req_buf, "want %s\n", remote_hex);
406 fetching++;
407 }
408
409 if (!fetching) {
410 strbuf_release(&req_buf);
411 packet_flush(fd[1]);
412 return 1;
413 }
414
415 if (is_repository_shallow(the_repository))
416 write_shallow_commits(&req_buf, 1, NULL);
417 if (args->depth > 0)
418 packet_buf_write(&req_buf, "deepen %d", args->depth);
419 if (args->deepen_since) {
420 timestamp_t max_age = approxidate(args->deepen_since);
421 packet_buf_write(&req_buf, "deepen-since %"PRItime, max_age);
422 }
423 if (args->deepen_not) {
424 int i;
425 for (i = 0; i < args->deepen_not->nr; i++) {
426 struct string_list_item *s = args->deepen_not->items + i;
427 packet_buf_write(&req_buf, "deepen-not %s", s->string);
428 }
429 }
430 send_filter(args, &req_buf, server_supports_filtering);
431 packet_buf_flush(&req_buf);
432 state_len = req_buf.len;
433
434 if (args->deepen) {
435 const char *arg;
436 struct object_id oid;
437
438 send_request(args, fd[1], &req_buf);
439 while (packet_reader_read(&reader) == PACKET_READ_NORMAL) {
440 if (skip_prefix(reader.line, "shallow ", &arg)) {
441 if (get_oid_hex(arg, &oid))
442 die(_("invalid shallow line: %s"), reader.line);
443 register_shallow(the_repository, &oid);
444 continue;
445 }
446 if (skip_prefix(reader.line, "unshallow ", &arg)) {
447 if (get_oid_hex(arg, &oid))
448 die(_("invalid unshallow line: %s"), reader.line);
449 if (!lookup_object(the_repository, &oid))
450 die(_("object not found: %s"), reader.line);
451 /* make sure that it is parsed as shallow */
452 if (!parse_object(the_repository, &oid))
453 die(_("error in object: %s"), reader.line);
454 if (unregister_shallow(&oid))
455 die(_("no shallow found: %s"), reader.line);
456 continue;
457 }
458 die(_("expected shallow/unshallow, got %s"), reader.line);
459 }
460 } else if (!args->stateless_rpc)
461 send_request(args, fd[1], &req_buf);
462
463 if (!args->stateless_rpc) {
464 /* If we aren't using the stateless-rpc interface
465 * we don't need to retain the headers.
466 */
467 strbuf_setlen(&req_buf, 0);
468 state_len = 0;
469 }
470
471 trace2_region_enter("fetch-pack", "negotiation_v0_v1", the_repository);
472 flushes = 0;
473 retval = -1;
474 while ((oid = negotiator->next(negotiator))) {
475 packet_buf_write(&req_buf, "have %s\n", oid_to_hex(oid));
476 print_verbose(args, "have %s", oid_to_hex(oid));
477 in_vain++;
478 haves++;
479 if (flush_at <= ++count) {
480 int ack;
481
482 negotiation_round++;
483 trace2_region_enter_printf("negotiation_v0_v1", "round",
484 the_repository, "%d",
485 negotiation_round);
486 trace2_data_intmax("negotiation_v0_v1", the_repository,
487 "haves_added", haves);
488 trace2_data_intmax("negotiation_v0_v1", the_repository,
489 "in_vain", in_vain);
490 haves = 0;
491 packet_buf_flush(&req_buf);
492 send_request(args, fd[1], &req_buf);
493 strbuf_setlen(&req_buf, state_len);
494 flushes++;
495 flush_at = next_flush(args->stateless_rpc, count);
496
497 /*
498 * We keep one window "ahead" of the other side, and
499 * will wait for an ACK only on the next one
500 */
501 if (!args->stateless_rpc && count == INITIAL_FLUSH)
502 continue;
503
504 consume_shallow_list(args, &reader);
505 do {
506 ack = get_ack(&reader, result_oid);
507 if (ack)
508 print_verbose(args, _("got %s %d %s"), "ack",
509 ack, oid_to_hex(result_oid));
510 switch (ack) {
511 case ACK:
512 trace2_region_leave_printf("negotiation_v0_v1", "round",
513 the_repository, "%d",
514 negotiation_round);
515 flushes = 0;
516 multi_ack = 0;
517 retval = 0;
518 goto done;
519 case ACK_common:
520 case ACK_ready:
521 case ACK_continue: {
522 struct commit *commit =
523 lookup_commit(the_repository,
524 result_oid);
525 int was_common;
526
527 if (!commit)
528 die(_("invalid commit %s"), oid_to_hex(result_oid));
529 was_common = negotiator->ack(negotiator, commit);
530 if (args->stateless_rpc
531 && ack == ACK_common
532 && !was_common) {
533 /* We need to replay the have for this object
534 * on the next RPC request so the peer knows
535 * it is in common with us.
536 */
537 const char *hex = oid_to_hex(result_oid);
538 packet_buf_write(&req_buf, "have %s\n", hex);
539 state_len = req_buf.len;
540 haves++;
541 /*
542 * Reset in_vain because an ack
543 * for this commit has not been
544 * seen.
545 */
546 in_vain = 0;
547 } else if (!args->stateless_rpc
548 || ack != ACK_common)
549 in_vain = 0;
550 retval = 0;
551 got_continue = 1;
552 if (ack == ACK_ready)
553 got_ready = 1;
554 break;
555 }
556 }
557 } while (ack);
558 flushes--;
559 trace2_region_leave_printf("negotiation_v0_v1", "round",
560 the_repository, "%d",
561 negotiation_round);
562 if (got_continue && MAX_IN_VAIN < in_vain) {
563 print_verbose(args, _("giving up"));
564 break; /* give up */
565 }
566 if (got_ready)
567 break;
568 }
569 }
570 done:
571 trace2_region_leave("fetch-pack", "negotiation_v0_v1", the_repository);
572 trace2_data_intmax("negotiation_v0_v1", the_repository, "total_rounds",
573 negotiation_round);
574 if (!got_ready || !no_done) {
575 packet_buf_write(&req_buf, "done\n");
576 send_request(args, fd[1], &req_buf);
577 }
578 print_verbose(args, _("done"));
579 if (retval != 0) {
580 multi_ack = 0;
581 flushes++;
582 }
583 strbuf_release(&req_buf);
584
585 if (!got_ready || !no_done)
586 consume_shallow_list(args, &reader);
587 while (flushes || multi_ack) {
588 int ack = get_ack(&reader, result_oid);
589 if (ack) {
590 print_verbose(args, _("got %s (%d) %s"), "ack",
591 ack, oid_to_hex(result_oid));
592 if (ack == ACK)
593 return 0;
594 multi_ack = 1;
595 continue;
596 }
597 flushes--;
598 }
599 /* it is no error to fetch into a completely empty repo */
600 return count ? retval : 0;
601 }
602
603 static struct commit_list *complete;
604
605 static int mark_complete(const struct object_id *oid)
606 {
607 struct commit *commit = deref_without_lazy_fetch(oid, 1);
608
609 if (commit && !(commit->object.flags & COMPLETE)) {
610 commit->object.flags |= COMPLETE;
611 commit_list_insert(commit, &complete);
612 }
613 return 0;
614 }
615
616 static int mark_complete_oid(const char *refname UNUSED,
617 const char *referent UNUSED,
618 const struct object_id *oid,
619 int flag UNUSED,
620 void *cb_data UNUSED)
621 {
622 return mark_complete(oid);
623 }
624
625 static void mark_recent_complete_commits(struct fetch_pack_args *args,
626 timestamp_t cutoff)
627 {
628 while (complete && cutoff <= complete->item->date) {
629 print_verbose(args, _("Marking %s as complete"),
630 oid_to_hex(&complete->item->object.oid));
631 pop_most_recent_commit(&complete, COMPLETE);
632 }
633 }
634
635 static void add_refs_to_oidset(struct oidset *oids, struct ref *refs)
636 {
637 for (; refs; refs = refs->next)
638 oidset_insert(oids, &refs->old_oid);
639 }
640
641 static int is_unmatched_ref(const struct ref *ref)
642 {
643 struct object_id oid;
644 const char *p;
645 return ref->match_status == REF_NOT_MATCHED &&
646 !parse_oid_hex(ref->name, &oid, &p) &&
647 *p == '\0' &&
648 oideq(&oid, &ref->old_oid);
649 }
650
651 static void filter_refs(struct fetch_pack_args *args,
652 struct ref **refs,
653 struct ref **sought, int nr_sought)
654 {
655 struct ref *newlist = NULL;
656 struct ref **newtail = &newlist;
657 struct ref *unmatched = NULL;
658 struct ref *ref, *next;
659 struct oidset tip_oids = OIDSET_INIT;
660 int i;
661 int strict = !(allow_unadvertised_object_request &
662 (ALLOW_TIP_SHA1 | ALLOW_REACHABLE_SHA1));
663
664 i = 0;
665 for (ref = *refs; ref; ref = next) {
666 int keep = 0;
667 next = ref->next;
668
669 if (starts_with(ref->name, "refs/") &&
670 check_refname_format(ref->name, 0)) {
671 /*
672 * trash or a peeled value; do not even add it to
673 * unmatched list
674 */
675 free_one_ref(ref);
676 continue;
677 } else {
678 while (i < nr_sought) {
679 int cmp = strcmp(ref->name, sought[i]->name);
680 if (cmp < 0)
681 break; /* definitely do not have it */
682 else if (cmp == 0) {
683 keep = 1; /* definitely have it */
684 sought[i]->match_status = REF_MATCHED;
685 }
686 i++;
687 }
688
689 if (!keep && args->fetch_all &&
690 (!args->deepen || !starts_with(ref->name, "refs/tags/")))
691 keep = 1;
692 }
693
694 if (keep) {
695 *newtail = ref;
696 ref->next = NULL;
697 newtail = &ref->next;
698 } else {
699 ref->next = unmatched;
700 unmatched = ref;
701 }
702 }
703
704 if (strict) {
705 for (i = 0; i < nr_sought; i++) {
706 ref = sought[i];
707 if (!is_unmatched_ref(ref))
708 continue;
709
710 add_refs_to_oidset(&tip_oids, unmatched);
711 add_refs_to_oidset(&tip_oids, newlist);
712 break;
713 }
714 }
715
716 /* Append unmatched requests to the list */
717 for (i = 0; i < nr_sought; i++) {
718 ref = sought[i];
719 if (!is_unmatched_ref(ref))
720 continue;
721
722 if (!strict || oidset_contains(&tip_oids, &ref->old_oid)) {
723 ref->match_status = REF_MATCHED;
724 *newtail = copy_ref(ref);
725 newtail = &(*newtail)->next;
726 } else {
727 ref->match_status = REF_UNADVERTISED_NOT_ALLOWED;
728 }
729 }
730
731 oidset_clear(&tip_oids);
732 free_refs(unmatched);
733
734 *refs = newlist;
735 }
736
737 static void mark_alternate_complete(struct fetch_negotiator *negotiator UNUSED,
738 struct object *obj)
739 {
740 mark_complete(&obj->oid);
741 }
742
743 /*
744 * Mark recent commits available locally and reachable from a local ref as
745 * COMPLETE.
746 *
747 * The cutoff time for recency is determined by this heuristic: it is the
748 * earliest commit time of the objects in refs that are commits and that we know
749 * the commit time of.
750 */
751 static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
752 struct fetch_pack_args *args,
753 struct ref **refs)
754 {
755 struct ref *ref;
756 int old_save_commit_buffer = save_commit_buffer;
757 timestamp_t cutoff = 0;
758
759 if (args->refetch)
760 return;
761
762 save_commit_buffer = 0;
763
764 trace2_region_enter("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL);
765 for (ref = *refs; ref; ref = ref->next) {
766 struct commit *commit;
767
768 commit = lookup_commit_in_graph(the_repository, &ref->old_oid);
769 if (!commit) {
770 struct object *o;
771
772 if (!has_object(the_repository, &ref->old_oid, 0))
773 continue;
774 o = parse_object(the_repository, &ref->old_oid);
775 if (!o || o->type != OBJ_COMMIT)
776 continue;
777
778 commit = (struct commit *)o;
779 }
780
781 /*
782 * We already have it -- which may mean that we were
783 * in sync with the other side at some time after
784 * that (it is OK if we guess wrong here).
785 */
786 if (!cutoff || cutoff < commit->date)
787 cutoff = commit->date;
788 }
789 trace2_region_leave("fetch-pack", "parse_remote_refs_and_find_cutoff", NULL);
790
791 /*
792 * This block marks all local refs as COMPLETE, and then recursively marks all
793 * parents of those refs as COMPLETE.
794 */
795 trace2_region_enter("fetch-pack", "mark_complete_local_refs", NULL);
796 if (!args->deepen) {
797 refs_for_each_rawref(get_main_ref_store(the_repository),
798 mark_complete_oid, NULL);
799 for_each_cached_alternate(NULL, mark_alternate_complete);
800 commit_list_sort_by_date(&complete);
801 if (cutoff)
802 mark_recent_complete_commits(args, cutoff);
803 }
804 trace2_region_leave("fetch-pack", "mark_complete_local_refs", NULL);
805
806 /*
807 * Mark all complete remote refs as common refs.
808 * Don't mark them common yet; the server has to be told so first.
809 */
810 trace2_region_enter("fetch-pack", "mark_common_remote_refs", NULL);
811 for (ref = *refs; ref; ref = ref->next) {
812 struct commit *c = deref_without_lazy_fetch(&ref->old_oid, 0);
813
814 if (!c || !(c->object.flags & COMPLETE))
815 continue;
816
817 negotiator->known_common(negotiator, c);
818 }
819 trace2_region_leave("fetch-pack", "mark_common_remote_refs", NULL);
820
821 save_commit_buffer = old_save_commit_buffer;
822 }
823
824 /*
825 * Returns 1 if every object pointed to by the given remote refs is available
826 * locally and reachable from a local ref, and 0 otherwise.
827 */
828 static int everything_local(struct fetch_pack_args *args,
829 struct ref **refs)
830 {
831 struct ref *ref;
832 int retval;
833
834 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
835 const struct object_id *remote = &ref->old_oid;
836 struct object *o;
837
838 o = lookup_object(the_repository, remote);
839 if (!o || !(o->flags & COMPLETE)) {
840 retval = 0;
841 print_verbose(args, "want %s (%s)", oid_to_hex(remote),
842 ref->name);
843 continue;
844 }
845 print_verbose(args, _("already have %s (%s)"), oid_to_hex(remote),
846 ref->name);
847 }
848
849 return retval;
850 }
851
852 static int sideband_demux(int in UNUSED, int out, void *data)
853 {
854 int *xd = data;
855 int ret;
856
857 ret = recv_sideband("fetch-pack", xd[0], out);
858 close(out);
859 return ret;
860 }
861
862 static void create_promisor_file(const char *keep_name,
863 struct ref **sought, int nr_sought)
864 {
865 struct strbuf promisor_name = STRBUF_INIT;
866 int suffix_stripped;
867
868 strbuf_addstr(&promisor_name, keep_name);
869 suffix_stripped = strbuf_strip_suffix(&promisor_name, ".keep");
870 if (!suffix_stripped)
871 BUG("name of pack lockfile should end with .keep (was '%s')",
872 keep_name);
873 strbuf_addstr(&promisor_name, ".promisor");
874
875 write_promisor_file(promisor_name.buf, sought, nr_sought);
876
877 strbuf_release(&promisor_name);
878 }
879
880 static void parse_gitmodules_oids(int fd, struct oidset *gitmodules_oids)
881 {
882 int len = the_hash_algo->hexsz + 1; /* hash + NL */
883
884 do {
885 char hex_hash[GIT_MAX_HEXSZ + 1];
886 int read_len = read_in_full(fd, hex_hash, len);
887 struct object_id oid;
888 const char *end;
889
890 if (!read_len)
891 return;
892 if (read_len != len)
893 die("invalid length read %d", read_len);
894 if (parse_oid_hex(hex_hash, &oid, &end) || *end != '\n')
895 die("invalid hash");
896 oidset_insert(gitmodules_oids, &oid);
897 } while (1);
898 }
899
900 static void add_index_pack_keep_option(struct strvec *args)
901 {
902 char hostname[HOST_NAME_MAX + 1];
903
904 if (xgethostname(hostname, sizeof(hostname)))
905 xsnprintf(hostname, sizeof(hostname), "localhost");
906 strvec_pushf(args, "--keep=fetch-pack %"PRIuMAX " on %s",
907 (uintmax_t)getpid(), hostname);
908 }
909
910 /*
911 * If packfile URIs were provided, pass a non-NULL pointer to index_pack_args.
912 * The strings to pass as the --index-pack-arg arguments to http-fetch will be
913 * stored there. (It must be freed by the caller.)
914 */
915 static int get_pack(struct fetch_pack_args *args,
916 int xd[2], struct string_list *pack_lockfiles,
917 struct strvec *index_pack_args,
918 struct ref **sought, int nr_sought,
919 struct oidset *gitmodules_oids)
920 {
921 struct async demux;
922 int do_keep = args->keep_pack;
923 const char *cmd_name;
924 struct pack_header header;
925 int pass_header = 0;
926 struct child_process cmd = CHILD_PROCESS_INIT;
927 int fsck_objects = 0;
928 int ret;
929
930 memset(&demux, 0, sizeof(demux));
931 if (use_sideband) {
932 /* xd[] is talking with upload-pack; subprocess reads from
933 * xd[0], spits out band#2 to stderr, and feeds us band#1
934 * through demux->out.
935 */
936 demux.proc = sideband_demux;
937 demux.data = xd;
938 demux.out = -1;
939 demux.isolate_sigpipe = 1;
940 if (start_async(&demux))
941 die(_("fetch-pack: unable to fork off sideband demultiplexer"));
942 }
943 else
944 demux.out = xd[0];
945
946 if (!args->keep_pack && unpack_limit && !index_pack_args) {
947
948 if (read_pack_header(demux.out, &header))
949 die(_("protocol error: bad pack header"));
950 pass_header = 1;
951 if (ntohl(header.hdr_entries) < unpack_limit)
952 do_keep = 0;
953 else
954 do_keep = 1;
955 }
956
957 if (alternate_shallow_file) {
958 strvec_push(&cmd.args, "--shallow-file");
959 strvec_push(&cmd.args, alternate_shallow_file);
960 }
961
962 fsck_objects = fetch_pack_fsck_objects();
963
964 if (do_keep || args->from_promisor || index_pack_args || fsck_objects) {
965 if (pack_lockfiles || fsck_objects)
966 cmd.out = -1;
967 cmd_name = "index-pack";
968 strvec_push(&cmd.args, cmd_name);
969 strvec_push(&cmd.args, "--stdin");
970 if (!args->quiet && !args->no_progress)
971 strvec_push(&cmd.args, "-v");
972 if (args->use_thin_pack)
973 strvec_push(&cmd.args, "--fix-thin");
974 if ((do_keep || index_pack_args) && (args->lock_pack || unpack_limit))
975 add_index_pack_keep_option(&cmd.args);
976 if (!index_pack_args && args->check_self_contained_and_connected)
977 strvec_push(&cmd.args, "--check-self-contained-and-connected");
978 else
979 /*
980 * We cannot perform any connectivity checks because
981 * not all packs have been downloaded; let the caller
982 * have this responsibility.
983 */
984 args->check_self_contained_and_connected = 0;
985
986 if (args->from_promisor)
987 /*
988 * create_promisor_file() may be called afterwards but
989 * we still need index-pack to know that this is a
990 * promisor pack. For example, if transfer.fsckobjects
991 * is true, index-pack needs to know that .gitmodules
992 * is a promisor object (so that it won't complain if
993 * it is missing).
994 */
995 strvec_push(&cmd.args, "--promisor");
996 }
997 else {
998 cmd_name = "unpack-objects";
999 strvec_push(&cmd.args, cmd_name);
1000 if (args->quiet || args->no_progress)
1001 strvec_push(&cmd.args, "-q");
1002 args->check_self_contained_and_connected = 0;
1003 }
1004
1005 if (pass_header)
1006 strvec_pushf(&cmd.args, "--pack_header=%"PRIu32",%"PRIu32,
1007 ntohl(header.hdr_version),
1008 ntohl(header.hdr_entries));
1009 if (fsck_objects) {
1010 if (args->from_promisor || index_pack_args)
1011 /*
1012 * We cannot use --strict in index-pack because it
1013 * checks both broken objects and links, but we only
1014 * want to check for broken objects.
1015 */
1016 strvec_push(&cmd.args, "--fsck-objects");
1017 else
1018 strvec_pushf(&cmd.args, "--strict%s",
1019 fsck_msg_types.buf);
1020 }
1021
1022 if (index_pack_args) {
1023 int i;
1024
1025 for (i = 0; i < cmd.args.nr; i++)
1026 strvec_push(index_pack_args, cmd.args.v[i]);
1027 }
1028
1029 sigchain_push(SIGPIPE, SIG_IGN);
1030
1031 cmd.in = demux.out;
1032 cmd.git_cmd = 1;
1033 if (start_command(&cmd))
1034 die(_("fetch-pack: unable to fork off %s"), cmd_name);
1035 if (do_keep && (pack_lockfiles || fsck_objects)) {
1036 int is_well_formed;
1037 char *pack_lockfile = index_pack_lockfile(the_repository,
1038 cmd.out,
1039 &is_well_formed);
1040
1041 if (!is_well_formed)
1042 die(_("fetch-pack: invalid index-pack output"));
1043 if (pack_lockfiles && pack_lockfile)
1044 string_list_append_nodup(pack_lockfiles, pack_lockfile);
1045 else
1046 free(pack_lockfile);
1047 parse_gitmodules_oids(cmd.out, gitmodules_oids);
1048 close(cmd.out);
1049 }
1050
1051 if (!use_sideband)
1052 /* Closed by start_command() */
1053 xd[0] = -1;
1054
1055 ret = finish_command(&cmd);
1056 if (!ret || (args->check_self_contained_and_connected && ret == 1))
1057 args->self_contained_and_connected =
1058 args->check_self_contained_and_connected &&
1059 ret == 0;
1060 else
1061 die(_("%s failed"), cmd_name);
1062 if (use_sideband && finish_async(&demux))
1063 die(_("error in sideband demultiplexer"));
1064
1065 sigchain_pop(SIGPIPE);
1066
1067 /*
1068 * Now that index-pack has succeeded, write the promisor file using the
1069 * obtained .keep filename if necessary
1070 */
1071 if (do_keep && pack_lockfiles && pack_lockfiles->nr && args->from_promisor)
1072 create_promisor_file(pack_lockfiles->items[0].string, sought, nr_sought);
1073
1074 return 0;
1075 }
1076
1077 static int ref_compare_name(const struct ref *a, const struct ref *b)
1078 {
1079 return strcmp(a->name, b->name);
1080 }
1081
1082 DEFINE_LIST_SORT(static, sort_ref_list, struct ref, next);
1083
1084 static int cmp_ref_by_name(const void *a_, const void *b_)
1085 {
1086 const struct ref *a = *((const struct ref **)a_);
1087 const struct ref *b = *((const struct ref **)b_);
1088 return strcmp(a->name, b->name);
1089 }
1090
1091 static struct ref *do_fetch_pack(struct fetch_pack_args *args,
1092 int fd[2],
1093 const struct ref *orig_ref,
1094 struct ref **sought, int nr_sought,
1095 struct shallow_info *si,
1096 struct string_list *pack_lockfiles)
1097 {
1098 struct repository *r = the_repository;
1099 struct ref *ref = copy_ref_list(orig_ref);
1100 struct object_id oid;
1101 const char *agent_feature;
1102 size_t agent_len;
1103 struct fetch_negotiator negotiator_alloc;
1104 struct fetch_negotiator *negotiator;
1105
1106 negotiator = &negotiator_alloc;
1107 if (args->refetch) {
1108 fetch_negotiator_init_noop(negotiator);
1109 } else {
1110 fetch_negotiator_init(r, negotiator);
1111 }
1112
1113 sort_ref_list(&ref, ref_compare_name);
1114 QSORT(sought, nr_sought, cmp_ref_by_name);
1115
1116 if ((agent_feature = server_feature_value("agent", &agent_len))) {
1117 agent_supported = 1;
1118 if (agent_len)
1119 print_verbose(args, _("Server version is %.*s"),
1120 (int)agent_len, agent_feature);
1121 }
1122
1123 if (!server_supports("session-id"))
1124 advertise_sid = 0;
1125
1126 if (server_supports("shallow"))
1127 print_verbose(args, _("Server supports %s"), "shallow");
1128 else if (args->depth > 0 || is_repository_shallow(r))
1129 die(_("Server does not support shallow clients"));
1130 if (args->depth > 0 || args->deepen_since || args->deepen_not)
1131 args->deepen = 1;
1132 if (server_supports("multi_ack_detailed")) {
1133 print_verbose(args, _("Server supports %s"), "multi_ack_detailed");
1134 multi_ack = 2;
1135 if (server_supports("no-done")) {
1136 print_verbose(args, _("Server supports %s"), "no-done");
1137 if (args->stateless_rpc)
1138 no_done = 1;
1139 }
1140 }
1141 else if (server_supports("multi_ack")) {
1142 print_verbose(args, _("Server supports %s"), "multi_ack");
1143 multi_ack = 1;
1144 }
1145 if (server_supports("side-band-64k")) {
1146 print_verbose(args, _("Server supports %s"), "side-band-64k");
1147 use_sideband = 2;
1148 }
1149 else if (server_supports("side-band")) {
1150 print_verbose(args, _("Server supports %s"), "side-band");
1151 use_sideband = 1;
1152 }
1153 if (server_supports("allow-tip-sha1-in-want")) {
1154 print_verbose(args, _("Server supports %s"), "allow-tip-sha1-in-want");
1155 allow_unadvertised_object_request |= ALLOW_TIP_SHA1;
1156 }
1157 if (server_supports("allow-reachable-sha1-in-want")) {
1158 print_verbose(args, _("Server supports %s"), "allow-reachable-sha1-in-want");
1159 allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
1160 }
1161 if (server_supports("thin-pack"))
1162 print_verbose(args, _("Server supports %s"), "thin-pack");
1163 else
1164 args->use_thin_pack = 0;
1165 if (server_supports("no-progress"))
1166 print_verbose(args, _("Server supports %s"), "no-progress");
1167 else
1168 args->no_progress = 0;
1169 if (server_supports("include-tag"))
1170 print_verbose(args, _("Server supports %s"), "include-tag");
1171 else
1172 args->include_tag = 0;
1173 if (server_supports("ofs-delta"))
1174 print_verbose(args, _("Server supports %s"), "ofs-delta");
1175 else
1176 prefer_ofs_delta = 0;
1177
1178 if (server_supports("filter")) {
1179 server_supports_filtering = 1;
1180 print_verbose(args, _("Server supports %s"), "filter");
1181 } else if (args->filter_options.choice) {
1182 warning("filtering not recognized by server, ignoring");
1183 }
1184
1185 if (server_supports("deepen-since")) {
1186 print_verbose(args, _("Server supports %s"), "deepen-since");
1187 deepen_since_ok = 1;
1188 } else if (args->deepen_since)
1189 die(_("Server does not support --shallow-since"));
1190 if (server_supports("deepen-not")) {
1191 print_verbose(args, _("Server supports %s"), "deepen-not");
1192 deepen_not_ok = 1;
1193 } else if (args->deepen_not)
1194 die(_("Server does not support --shallow-exclude"));
1195 if (server_supports("deepen-relative"))
1196 print_verbose(args, _("Server supports %s"), "deepen-relative");
1197 else if (args->deepen_relative)
1198 die(_("Server does not support --deepen"));
1199 if (!server_supports_hash(the_hash_algo->name, NULL))
1200 die(_("Server does not support this repository's object format"));
1201
1202 mark_complete_and_common_ref(negotiator, args, &ref);
1203 filter_refs(args, &ref, sought, nr_sought);
1204 if (!args->refetch && everything_local(args, &ref)) {
1205 packet_flush(fd[1]);
1206 goto all_done;
1207 }
1208 if (find_common(negotiator, args, fd, &oid, ref) < 0)
1209 if (!args->keep_pack)
1210 /* When cloning, it is not unusual to have
1211 * no common commit.
1212 */
1213 warning(_("no common commits"));
1214
1215 if (args->stateless_rpc)
1216 packet_flush(fd[1]);
1217 if (args->deepen)
1218 setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
1219 NULL);
1220 else if (si->nr_ours || si->nr_theirs) {
1221 if (args->reject_shallow_remote)
1222 die(_("source repository is shallow, reject to clone."));
1223 alternate_shallow_file = setup_temporary_shallow(si->shallow);
1224 } else
1225 alternate_shallow_file = NULL;
1226 if (get_pack(args, fd, pack_lockfiles, NULL, sought, nr_sought,
1227 &fsck_options.gitmodules_found))
1228 die(_("git fetch-pack: fetch failed."));
1229 if (fsck_finish(&fsck_options))
1230 die("fsck failed");
1231
1232 all_done:
1233 if (negotiator)
1234 negotiator->release(negotiator);
1235 return ref;
1236 }
1237
1238 static void add_shallow_requests(struct strbuf *req_buf,
1239 const struct fetch_pack_args *args)
1240 {
1241 if (is_repository_shallow(the_repository))
1242 write_shallow_commits(req_buf, 1, NULL);
1243 if (args->depth > 0)
1244 packet_buf_write(req_buf, "deepen %d", args->depth);
1245 if (args->deepen_since) {
1246 timestamp_t max_age = approxidate(args->deepen_since);
1247 packet_buf_write(req_buf, "deepen-since %"PRItime, max_age);
1248 }
1249 if (args->deepen_not) {
1250 int i;
1251 for (i = 0; i < args->deepen_not->nr; i++) {
1252 struct string_list_item *s = args->deepen_not->items + i;
1253 packet_buf_write(req_buf, "deepen-not %s", s->string);
1254 }
1255 }
1256 if (args->deepen_relative)
1257 packet_buf_write(req_buf, "deepen-relative\n");
1258 }
1259
1260 static void add_wants(const struct ref *wants, struct strbuf *req_buf)
1261 {
1262 int use_ref_in_want = server_supports_feature("fetch", "ref-in-want", 0);
1263
1264 for ( ; wants ; wants = wants->next) {
1265 const struct object_id *remote = &wants->old_oid;
1266 struct object *o;
1267
1268 /*
1269 * If that object is complete (i.e. it is an ancestor of a
1270 * local ref), we tell them we have it but do not have to
1271 * tell them about its ancestors, which they already know
1272 * about.
1273 *
1274 * We use lookup_object here because we are only
1275 * interested in the case we *know* the object is
1276 * reachable and we have already scanned it.
1277 */
1278 if (((o = lookup_object(the_repository, remote)) != NULL) &&
1279 (o->flags & COMPLETE)) {
1280 continue;
1281 }
1282
1283 if (!use_ref_in_want || wants->exact_oid)
1284 packet_buf_write(req_buf, "want %s\n", oid_to_hex(remote));
1285 else
1286 packet_buf_write(req_buf, "want-ref %s\n", wants->name);
1287 }
1288 }
1289
1290 static void add_common(struct strbuf *req_buf, struct oidset *common)
1291 {
1292 struct oidset_iter iter;
1293 const struct object_id *oid;
1294 oidset_iter_init(common, &iter);
1295
1296 while ((oid = oidset_iter_next(&iter))) {
1297 packet_buf_write(req_buf, "have %s\n", oid_to_hex(oid));
1298 }
1299 }
1300
1301 static int add_haves(struct fetch_negotiator *negotiator,
1302 struct strbuf *req_buf,
1303 int *haves_to_send)
1304 {
1305 int haves_added = 0;
1306 const struct object_id *oid;
1307
1308 while ((oid = negotiator->next(negotiator))) {
1309 packet_buf_write(req_buf, "have %s\n", oid_to_hex(oid));
1310 if (++haves_added >= *haves_to_send)
1311 break;
1312 }
1313
1314 /* Increase haves to send on next round */
1315 *haves_to_send = next_flush(1, *haves_to_send);
1316
1317 return haves_added;
1318 }
1319
1320 static void write_fetch_command_and_capabilities(struct strbuf *req_buf,
1321 const struct string_list *server_options)
1322 {
1323 const char *hash_name;
1324
1325 ensure_server_supports_v2("fetch");
1326 packet_buf_write(req_buf, "command=fetch");
1327 if (server_supports_v2("agent"))
1328 packet_buf_write(req_buf, "agent=%s", git_user_agent_sanitized());
1329 if (advertise_sid && server_supports_v2("session-id"))
1330 packet_buf_write(req_buf, "session-id=%s", trace2_session_id());
1331 if (server_options && server_options->nr) {
1332 int i;
1333 ensure_server_supports_v2("server-option");
1334 for (i = 0; i < server_options->nr; i++)
1335 packet_buf_write(req_buf, "server-option=%s",
1336 server_options->items[i].string);
1337 }
1338
1339 if (server_feature_v2("object-format", &hash_name)) {
1340 int hash_algo = hash_algo_by_name(hash_name);
1341 if (hash_algo_by_ptr(the_hash_algo) != hash_algo)
1342 die(_("mismatched algorithms: client %s; server %s"),
1343 the_hash_algo->name, hash_name);
1344 packet_buf_write(req_buf, "object-format=%s", the_hash_algo->name);
1345 } else if (hash_algo_by_ptr(the_hash_algo) != GIT_HASH_SHA1) {
1346 die(_("the server does not support algorithm '%s'"),
1347 the_hash_algo->name);
1348 }
1349 packet_buf_delim(req_buf);
1350 }
1351
1352 static int send_fetch_request(struct fetch_negotiator *negotiator, int fd_out,
1353 struct fetch_pack_args *args,
1354 const struct ref *wants, struct oidset *common,
1355 int *haves_to_send, int *in_vain,
1356 int sideband_all, int seen_ack)
1357 {
1358 int haves_added;
1359 int done_sent = 0;
1360 struct strbuf req_buf = STRBUF_INIT;
1361
1362 write_fetch_command_and_capabilities(&req_buf, args->server_options);
1363
1364 if (args->use_thin_pack)
1365 packet_buf_write(&req_buf, "thin-pack");
1366 if (args->no_progress)
1367 packet_buf_write(&req_buf, "no-progress");
1368 if (args->include_tag)
1369 packet_buf_write(&req_buf, "include-tag");
1370 if (prefer_ofs_delta)
1371 packet_buf_write(&req_buf, "ofs-delta");
1372 if (sideband_all)
1373 packet_buf_write(&req_buf, "sideband-all");
1374
1375 /* Add shallow-info and deepen request */
1376 if (server_supports_feature("fetch", "shallow", 0))
1377 add_shallow_requests(&req_buf, args);
1378 else if (is_repository_shallow(the_repository) || args->deepen)
1379 die(_("Server does not support shallow requests"));
1380
1381 /* Add filter */
1382 send_filter(args, &req_buf,
1383 server_supports_feature("fetch", "filter", 0));
1384
1385 if (server_supports_feature("fetch", "packfile-uris", 0)) {
1386 int i;
1387 struct strbuf to_send = STRBUF_INIT;
1388
1389 for (i = 0; i < uri_protocols.nr; i++) {
1390 const char *s = uri_protocols.items[i].string;
1391
1392 if (!strcmp(s, "https") || !strcmp(s, "http")) {
1393 if (to_send.len)
1394 strbuf_addch(&to_send, ',');
1395 strbuf_addstr(&to_send, s);
1396 }
1397 }
1398 if (to_send.len) {
1399 packet_buf_write(&req_buf, "packfile-uris %s",
1400 to_send.buf);
1401 strbuf_release(&to_send);
1402 }
1403 }
1404
1405 /* add wants */
1406 add_wants(wants, &req_buf);
1407
1408 /* Add all of the common commits we've found in previous rounds */
1409 add_common(&req_buf, common);
1410
1411 haves_added = add_haves(negotiator, &req_buf, haves_to_send);
1412 *in_vain += haves_added;
1413 trace2_data_intmax("negotiation_v2", the_repository, "haves_added", haves_added);
1414 trace2_data_intmax("negotiation_v2", the_repository, "in_vain", *in_vain);
1415 if (!haves_added || (seen_ack && *in_vain >= MAX_IN_VAIN)) {
1416 /* Send Done */
1417 packet_buf_write(&req_buf, "done\n");
1418 done_sent = 1;
1419 }
1420
1421 /* Send request */
1422 packet_buf_flush(&req_buf);
1423 if (write_in_full(fd_out, req_buf.buf, req_buf.len) < 0)
1424 die_errno(_("unable to write request to remote"));
1425
1426 strbuf_release(&req_buf);
1427 return done_sent;
1428 }
1429
1430 /*
1431 * Processes a section header in a server's response and checks if it matches
1432 * `section`. If the value of `peek` is 1, the header line will be peeked (and
1433 * not consumed); if 0, the line will be consumed and the function will die if
1434 * the section header doesn't match what was expected.
1435 */
1436 static int process_section_header(struct packet_reader *reader,
1437 const char *section, int peek)
1438 {
1439 int ret = 0;
1440
1441 if (packet_reader_peek(reader) == PACKET_READ_NORMAL &&
1442 !strcmp(reader->line, section))
1443 ret = 1;
1444
1445 if (!peek) {
1446 if (!ret) {
1447 if (reader->line)
1448 die(_("expected '%s', received '%s'"),
1449 section, reader->line);
1450 else
1451 die(_("expected '%s'"), section);
1452 }
1453 packet_reader_read(reader);
1454 }
1455
1456 return ret;
1457 }
1458
1459 static int process_ack(struct fetch_negotiator *negotiator,
1460 struct packet_reader *reader,
1461 struct object_id *common_oid,
1462 int *received_ready)
1463 {
1464 while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
1465 const char *arg;
1466
1467 if (!strcmp(reader->line, "NAK"))
1468 continue;
1469
1470 if (skip_prefix(reader->line, "ACK ", &arg)) {
1471 if (!get_oid_hex(arg, common_oid)) {
1472 struct commit *commit;
1473 commit = lookup_commit(the_repository, common_oid);
1474 if (negotiator)
1475 negotiator->ack(negotiator, commit);
1476 }
1477 return 1;
1478 }
1479
1480 if (!strcmp(reader->line, "ready")) {
1481 *received_ready = 1;
1482 continue;
1483 }
1484
1485 die(_("unexpected acknowledgment line: '%s'"), reader->line);
1486 }
1487
1488 if (reader->status != PACKET_READ_FLUSH &&
1489 reader->status != PACKET_READ_DELIM)
1490 die(_("error processing acks: %d"), reader->status);
1491
1492 /*
1493 * If an "acknowledgments" section is sent, a packfile is sent if and
1494 * only if "ready" was sent in this section. The other sections
1495 * ("shallow-info" and "wanted-refs") are sent only if a packfile is
1496 * sent. Therefore, a DELIM is expected if "ready" is sent, and a FLUSH
1497 * otherwise.
1498 */
1499 if (*received_ready && reader->status != PACKET_READ_DELIM)
1500 /*
1501 * TRANSLATORS: The parameter will be 'ready', a protocol
1502 * keyword.
1503 */
1504 die(_("expected packfile to be sent after '%s'"), "ready");
1505 if (!*received_ready && reader->status != PACKET_READ_FLUSH)
1506 /*
1507 * TRANSLATORS: The parameter will be 'ready', a protocol
1508 * keyword.
1509 */
1510 die(_("expected no other sections to be sent after no '%s'"), "ready");
1511
1512 return 0;
1513 }
1514
1515 static void receive_shallow_info(struct fetch_pack_args *args,
1516 struct packet_reader *reader,
1517 struct oid_array *shallows,
1518 struct shallow_info *si)
1519 {
1520 int unshallow_received = 0;
1521
1522 process_section_header(reader, "shallow-info", 0);
1523 while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
1524 const char *arg;
1525 struct object_id oid;
1526
1527 if (skip_prefix(reader->line, "shallow ", &arg)) {
1528 if (get_oid_hex(arg, &oid))
1529 die(_("invalid shallow line: %s"), reader->line);
1530 oid_array_append(shallows, &oid);
1531 continue;
1532 }
1533 if (skip_prefix(reader->line, "unshallow ", &arg)) {
1534 if (get_oid_hex(arg, &oid))
1535 die(_("invalid unshallow line: %s"), reader->line);
1536 if (!lookup_object(the_repository, &oid))
1537 die(_("object not found: %s"), reader->line);
1538 /* make sure that it is parsed as shallow */
1539 if (!parse_object(the_repository, &oid))
1540 die(_("error in object: %s"), reader->line);
1541 if (unregister_shallow(&oid))
1542 die(_("no shallow found: %s"), reader->line);
1543 unshallow_received = 1;
1544 continue;
1545 }
1546 die(_("expected shallow/unshallow, got %s"), reader->line);
1547 }
1548
1549 if (reader->status != PACKET_READ_FLUSH &&
1550 reader->status != PACKET_READ_DELIM)
1551 die(_("error processing shallow info: %d"), reader->status);
1552
1553 if (args->deepen || unshallow_received) {
1554 /*
1555 * Treat these as shallow lines caused by our depth settings.
1556 * In v0, these lines cannot cause refs to be rejected; do the
1557 * same.
1558 */
1559 int i;
1560
1561 for (i = 0; i < shallows->nr; i++)
1562 register_shallow(the_repository, &shallows->oid[i]);
1563 setup_alternate_shallow(&shallow_lock, &alternate_shallow_file,
1564 NULL);
1565 args->deepen = 1;
1566 } else if (shallows->nr) {
1567 /*
1568 * Treat these as shallow lines caused by the remote being
1569 * shallow. In v0, remote refs that reach these objects are
1570 * rejected (unless --update-shallow is set); do the same.
1571 */
1572 prepare_shallow_info(si, shallows);
1573 if (si->nr_ours || si->nr_theirs) {
1574 if (args->reject_shallow_remote)
1575 die(_("source repository is shallow, reject to clone."));
1576 alternate_shallow_file =
1577 setup_temporary_shallow(si->shallow);
1578 } else
1579 alternate_shallow_file = NULL;
1580 } else {
1581 alternate_shallow_file = NULL;
1582 }
1583 }
1584
1585 static int cmp_name_ref(const void *name, const void *ref)
1586 {
1587 return strcmp(name, (*(struct ref **)ref)->name);
1588 }
1589
1590 static void receive_wanted_refs(struct packet_reader *reader,
1591 struct ref **sought, int nr_sought)
1592 {
1593 process_section_header(reader, "wanted-refs", 0);
1594 while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
1595 struct object_id oid;
1596 const char *end;
1597 struct ref **found;
1598
1599 if (parse_oid_hex(reader->line, &oid, &end) || *end++ != ' ')
1600 die(_("expected wanted-ref, got '%s'"), reader->line);
1601
1602 found = bsearch(end, sought, nr_sought, sizeof(*sought),
1603 cmp_name_ref);
1604 if (!found)
1605 die(_("unexpected wanted-ref: '%s'"), reader->line);
1606 oidcpy(&(*found)->old_oid, &oid);
1607 }
1608
1609 if (reader->status != PACKET_READ_DELIM)
1610 die(_("error processing wanted refs: %d"), reader->status);
1611 }
1612
1613 static void receive_packfile_uris(struct packet_reader *reader,
1614 struct string_list *uris)
1615 {
1616 process_section_header(reader, "packfile-uris", 0);
1617 while (packet_reader_read(reader) == PACKET_READ_NORMAL) {
1618 if (reader->pktlen < the_hash_algo->hexsz ||
1619 reader->line[the_hash_algo->hexsz] != ' ')
1620 die("expected '<hash> <uri>', got: %s", reader->line);
1621
1622 string_list_append(uris, reader->line);
1623 }
1624 if (reader->status != PACKET_READ_DELIM)
1625 die("expected DELIM");
1626 }
1627
1628 enum fetch_state {
1629 FETCH_CHECK_LOCAL = 0,
1630 FETCH_SEND_REQUEST,
1631 FETCH_PROCESS_ACKS,
1632 FETCH_GET_PACK,
1633 FETCH_DONE,
1634 };
1635
1636 static void do_check_stateless_delimiter(int stateless_rpc,
1637 struct packet_reader *reader)
1638 {
1639 check_stateless_delimiter(stateless_rpc, reader,
1640 _("git fetch-pack: expected response end packet"));
1641 }
1642
1643 static struct ref *do_fetch_pack_v2(struct fetch_pack_args *args,
1644 int fd[2],
1645 const struct ref *orig_ref,
1646 struct ref **sought, int nr_sought,
1647 struct oid_array *shallows,
1648 struct shallow_info *si,
1649 struct string_list *pack_lockfiles)
1650 {
1651 struct repository *r = the_repository;
1652 struct ref *ref = copy_ref_list(orig_ref);
1653 enum fetch_state state = FETCH_CHECK_LOCAL;
1654 struct oidset common = OIDSET_INIT;
1655 struct packet_reader reader;
1656 int in_vain = 0, negotiation_started = 0;
1657 int negotiation_round = 0;
1658 int haves_to_send = INITIAL_FLUSH;
1659 struct fetch_negotiator negotiator_alloc;
1660 struct fetch_negotiator *negotiator;
1661 int seen_ack = 0;
1662 struct object_id common_oid;
1663 int received_ready = 0;
1664 struct string_list packfile_uris = STRING_LIST_INIT_DUP;
1665 int i;
1666 struct strvec index_pack_args = STRVEC_INIT;
1667
1668 negotiator = &negotiator_alloc;
1669 if (args->refetch)
1670 fetch_negotiator_init_noop(negotiator);
1671 else
1672 fetch_negotiator_init(r, negotiator);
1673
1674 packet_reader_init(&reader, fd[0], NULL, 0,
1675 PACKET_READ_CHOMP_NEWLINE |
1676 PACKET_READ_DIE_ON_ERR_PACKET);
1677 if (git_env_bool("GIT_TEST_SIDEBAND_ALL", 1) &&
1678 server_supports_feature("fetch", "sideband-all", 0)) {
1679 reader.use_sideband = 1;
1680 reader.me = "fetch-pack";
1681 }
1682
1683 while (state != FETCH_DONE) {
1684 switch (state) {
1685 case FETCH_CHECK_LOCAL:
1686 sort_ref_list(&ref, ref_compare_name);
1687 QSORT(sought, nr_sought, cmp_ref_by_name);
1688
1689 /* v2 supports these by default */
1690 allow_unadvertised_object_request |= ALLOW_REACHABLE_SHA1;
1691 use_sideband = 2;
1692 if (args->depth > 0 || args->deepen_since || args->deepen_not)
1693 args->deepen = 1;
1694
1695 /* Filter 'ref' by 'sought' and those that aren't local */
1696 mark_complete_and_common_ref(negotiator, args, &ref);
1697 filter_refs(args, &ref, sought, nr_sought);
1698 if (!args->refetch && everything_local(args, &ref))
1699 state = FETCH_DONE;
1700 else
1701 state = FETCH_SEND_REQUEST;
1702
1703 mark_tips(negotiator, args->negotiation_tips);
1704 for_each_cached_alternate(negotiator,
1705 insert_one_alternate_object);
1706 break;
1707 case FETCH_SEND_REQUEST:
1708 if (!negotiation_started) {
1709 negotiation_started = 1;
1710 trace2_region_enter("fetch-pack",
1711 "negotiation_v2",
1712 the_repository);
1713 }
1714 negotiation_round++;
1715 trace2_region_enter_printf("negotiation_v2", "round",
1716 the_repository, "%d",
1717 negotiation_round);
1718 if (send_fetch_request(negotiator, fd[1], args, ref,
1719 &common,
1720 &haves_to_send, &in_vain,
1721 reader.use_sideband,
1722 seen_ack)) {
1723 trace2_region_leave_printf("negotiation_v2", "round",
1724 the_repository, "%d",
1725 negotiation_round);
1726 state = FETCH_GET_PACK;
1727 }
1728 else
1729 state = FETCH_PROCESS_ACKS;
1730 break;
1731 case FETCH_PROCESS_ACKS:
1732 /* Process ACKs/NAKs */
1733 process_section_header(&reader, "acknowledgments", 0);
1734 while (process_ack(negotiator, &reader, &common_oid,
1735 &received_ready)) {
1736 in_vain = 0;
1737 seen_ack = 1;
1738 oidset_insert(&common, &common_oid);
1739 }
1740 trace2_region_leave_printf("negotiation_v2", "round",
1741 the_repository, "%d",
1742 negotiation_round);
1743 if (received_ready) {
1744 /*
1745 * Don't check for response delimiter; get_pack() will
1746 * read the rest of this response.
1747 */
1748 state = FETCH_GET_PACK;
1749 } else {
1750 do_check_stateless_delimiter(args->stateless_rpc, &reader);
1751 state = FETCH_SEND_REQUEST;
1752 }
1753 break;
1754 case FETCH_GET_PACK:
1755 trace2_region_leave("fetch-pack",
1756 "negotiation_v2",
1757 the_repository);
1758 trace2_data_intmax("negotiation_v2", the_repository,
1759 "total_rounds", negotiation_round);
1760 /* Check for shallow-info section */
1761 if (process_section_header(&reader, "shallow-info", 1))
1762 receive_shallow_info(args, &reader, shallows, si);
1763
1764 if (process_section_header(&reader, "wanted-refs", 1))
1765 receive_wanted_refs(&reader, sought, nr_sought);
1766
1767 /* get the pack(s) */
1768 if (git_env_bool("GIT_TRACE_REDACT", 1))
1769 reader.options |= PACKET_READ_REDACT_URI_PATH;
1770 if (process_section_header(&reader, "packfile-uris", 1))
1771 receive_packfile_uris(&reader, &packfile_uris);
1772 /* We don't expect more URIs. Reset to avoid expensive URI check. */
1773 reader.options &= ~PACKET_READ_REDACT_URI_PATH;
1774
1775 process_section_header(&reader, "packfile", 0);
1776
1777 /*
1778 * this is the final request we'll make of the server;
1779 * do a half-duplex shutdown to indicate that they can
1780 * hang up as soon as the pack is sent.
1781 */
1782 close(fd[1]);
1783 fd[1] = -1;
1784
1785 if (get_pack(args, fd, pack_lockfiles,
1786 packfile_uris.nr ? &index_pack_args : NULL,
1787 sought, nr_sought, &fsck_options.gitmodules_found))
1788 die(_("git fetch-pack: fetch failed."));
1789 do_check_stateless_delimiter(args->stateless_rpc, &reader);
1790
1791 state = FETCH_DONE;
1792 break;
1793 case FETCH_DONE:
1794 continue;
1795 }
1796 }
1797
1798 for (i = 0; i < packfile_uris.nr; i++) {
1799 int j;
1800 struct child_process cmd = CHILD_PROCESS_INIT;
1801 char packname[GIT_MAX_HEXSZ + 1];
1802 const char *uri = packfile_uris.items[i].string +
1803 the_hash_algo->hexsz + 1;
1804
1805 strvec_push(&cmd.args, "http-fetch");
1806 strvec_pushf(&cmd.args, "--packfile=%.*s",
1807 (int) the_hash_algo->hexsz,
1808 packfile_uris.items[i].string);
1809 for (j = 0; j < index_pack_args.nr; j++)
1810 strvec_pushf(&cmd.args, "--index-pack-arg=%s",
1811 index_pack_args.v[j]);
1812 strvec_push(&cmd.args, uri);
1813 cmd.git_cmd = 1;
1814 cmd.no_stdin = 1;
1815 cmd.out = -1;
1816 if (start_command(&cmd))
1817 die("fetch-pack: unable to spawn http-fetch");
1818
1819 if (read_in_full(cmd.out, packname, 5) < 0 ||
1820 memcmp(packname, "keep\t", 5))
1821 die("fetch-pack: expected keep then TAB at start of http-fetch output");
1822
1823 if (read_in_full(cmd.out, packname,
1824 the_hash_algo->hexsz + 1) < 0 ||
1825 packname[the_hash_algo->hexsz] != '\n')
1826 die("fetch-pack: expected hash then LF at end of http-fetch output");
1827
1828 packname[the_hash_algo->hexsz] = '\0';
1829
1830 parse_gitmodules_oids(cmd.out, &fsck_options.gitmodules_found);
1831
1832 close(cmd.out);
1833
1834 if (finish_command(&cmd))
1835 die("fetch-pack: unable to finish http-fetch");
1836
1837 if (memcmp(packfile_uris.items[i].string, packname,
1838 the_hash_algo->hexsz))
1839 die("fetch-pack: pack downloaded from %s does not match expected hash %.*s",
1840 uri, (int) the_hash_algo->hexsz,
1841 packfile_uris.items[i].string);
1842
1843 string_list_append_nodup(pack_lockfiles,
1844 xstrfmt("%s/pack/pack-%s.keep",
1845 repo_get_object_directory(the_repository),
1846 packname));
1847 }
1848 string_list_clear(&packfile_uris, 0);
1849 strvec_clear(&index_pack_args);
1850
1851 if (fsck_finish(&fsck_options))
1852 die("fsck failed");
1853
1854 if (negotiator)
1855 negotiator->release(negotiator);
1856
1857 oidset_clear(&common);
1858 return ref;
1859 }
1860
1861 int fetch_pack_fsck_config(const char *var, const char *value,
1862 struct strbuf *msg_types)
1863 {
1864 const char *msg_id;
1865
1866 if (strcmp(var, "fetch.fsck.skiplist") == 0) {
1867 char *path ;
1868
1869 if (git_config_pathname(&path, var, value))
1870 return -1;
1871 strbuf_addf(msg_types, "%cskiplist=%s",
1872 msg_types->len ? ',' : '=', path);
1873 free(path);
1874 return 0;
1875 }
1876
1877 if (skip_prefix(var, "fetch.fsck.", &msg_id)) {
1878 if (!value)
1879 return config_error_nonbool(var);
1880 if (is_valid_msg_type(msg_id, value))
1881 strbuf_addf(msg_types, "%c%s=%s",
1882 msg_types->len ? ',' : '=', msg_id, value);
1883 else
1884 warning("Skipping unknown msg id '%s'", msg_id);
1885 return 0;
1886 }
1887
1888 return 1;
1889 }
1890
1891 static int fetch_pack_config_cb(const char *var, const char *value,
1892 const struct config_context *ctx, void *cb)
1893 {
1894 int ret = fetch_pack_fsck_config(var, value, &fsck_msg_types);
1895 if (ret > 0)
1896 return git_default_config(var, value, ctx, cb);
1897
1898 return ret;
1899 }
1900
1901 static void fetch_pack_config(void)
1902 {
1903 git_config_get_int("fetch.unpacklimit", &fetch_unpack_limit);
1904 git_config_get_int("transfer.unpacklimit", &transfer_unpack_limit);
1905 git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
1906 git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
1907 git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
1908 git_config_get_bool("transfer.advertisesid", &advertise_sid);
1909 if (!uri_protocols.nr) {
1910 char *str;
1911
1912 if (!git_config_get_string("fetch.uriprotocols", &str) && str) {
1913 string_list_split(&uri_protocols, str, ',', -1);
1914 free(str);
1915 }
1916 }
1917
1918 git_config(fetch_pack_config_cb, NULL);
1919 }
1920
1921 static void fetch_pack_setup(void)
1922 {
1923 static int did_setup;
1924 if (did_setup)
1925 return;
1926 fetch_pack_config();
1927 if (0 <= fetch_unpack_limit)
1928 unpack_limit = fetch_unpack_limit;
1929 else if (0 <= transfer_unpack_limit)
1930 unpack_limit = transfer_unpack_limit;
1931 did_setup = 1;
1932 }
1933
1934 static int remove_duplicates_in_refs(struct ref **ref, int nr)
1935 {
1936 struct string_list names = STRING_LIST_INIT_NODUP;
1937 int src, dst;
1938
1939 for (src = dst = 0; src < nr; src++) {
1940 struct string_list_item *item;
1941 item = string_list_insert(&names, ref[src]->name);
1942 if (item->util)
1943 continue; /* already have it */
1944 item->util = ref[src];
1945 if (src != dst)
1946 ref[dst] = ref[src];
1947 dst++;
1948 }
1949 for (src = dst; src < nr; src++)
1950 ref[src] = NULL;
1951 string_list_clear(&names, 0);
1952 return dst;
1953 }
1954
1955 static void update_shallow(struct fetch_pack_args *args,
1956 struct ref **sought, int nr_sought,
1957 struct shallow_info *si)
1958 {
1959 struct oid_array ref = OID_ARRAY_INIT;
1960 int *status;
1961 int i;
1962
1963 if (args->deepen && alternate_shallow_file) {
1964 if (*alternate_shallow_file == '\0') { /* --unshallow */
1965 unlink_or_warn(git_path_shallow(the_repository));
1966 rollback_shallow_file(the_repository, &shallow_lock);
1967 } else
1968 commit_shallow_file(the_repository, &shallow_lock);
1969 alternate_shallow_file = NULL;
1970 return;
1971 }
1972
1973 if (!si->shallow || !si->shallow->nr)
1974 return;
1975
1976 if (args->cloning) {
1977 /*
1978 * remote is shallow, but this is a clone, there are
1979 * no objects in repo to worry about. Accept any
1980 * shallow points that exist in the pack (iow in repo
1981 * after get_pack() and reprepare_packed_git())
1982 */
1983 struct oid_array extra = OID_ARRAY_INIT;
1984 struct object_id *oid = si->shallow->oid;
1985 for (i = 0; i < si->shallow->nr; i++)
1986 if (has_object(the_repository, &oid[i],
1987 HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
1988 oid_array_append(&extra, &oid[i]);
1989 if (extra.nr) {
1990 setup_alternate_shallow(&shallow_lock,
1991 &alternate_shallow_file,
1992 &extra);
1993 commit_shallow_file(the_repository, &shallow_lock);
1994 alternate_shallow_file = NULL;
1995 }
1996 oid_array_clear(&extra);
1997 return;
1998 }
1999
2000 if (!si->nr_ours && !si->nr_theirs)
2001 return;
2002
2003 remove_nonexistent_theirs_shallow(si);
2004 if (!si->nr_ours && !si->nr_theirs)
2005 return;
2006 for (i = 0; i < nr_sought; i++)
2007 oid_array_append(&ref, &sought[i]->old_oid);
2008 si->ref = &ref;
2009
2010 if (args->update_shallow) {
2011 /*
2012 * remote is also shallow, .git/shallow may be updated
2013 * so all refs can be accepted. Make sure we only add
2014 * shallow roots that are actually reachable from new
2015 * refs.
2016 */
2017 struct oid_array extra = OID_ARRAY_INIT;
2018 struct object_id *oid = si->shallow->oid;
2019 assign_shallow_commits_to_refs(si, NULL, NULL);
2020 if (!si->nr_ours && !si->nr_theirs) {
2021 oid_array_clear(&ref);
2022 return;
2023 }
2024 for (i = 0; i < si->nr_ours; i++)
2025 oid_array_append(&extra, &oid[si->ours[i]]);
2026 for (i = 0; i < si->nr_theirs; i++)
2027 oid_array_append(&extra, &oid[si->theirs[i]]);
2028 setup_alternate_shallow(&shallow_lock,
2029 &alternate_shallow_file,
2030 &extra);
2031 commit_shallow_file(the_repository, &shallow_lock);
2032 oid_array_clear(&extra);
2033 oid_array_clear(&ref);
2034 alternate_shallow_file = NULL;
2035 return;
2036 }
2037
2038 /*
2039 * remote is also shallow, check what ref is safe to update
2040 * without updating .git/shallow
2041 */
2042 CALLOC_ARRAY(status, nr_sought);
2043 assign_shallow_commits_to_refs(si, NULL, status);
2044 if (si->nr_ours || si->nr_theirs) {
2045 for (i = 0; i < nr_sought; i++)
2046 if (status[i])
2047 sought[i]->status = REF_STATUS_REJECT_SHALLOW;
2048 }
2049 free(status);
2050 oid_array_clear(&ref);
2051 }
2052
2053 static const struct object_id *iterate_ref_map(void *cb_data)
2054 {
2055 struct ref **rm = cb_data;
2056 struct ref *ref = *rm;
2057
2058 if (!ref)
2059 return NULL;
2060 *rm = ref->next;
2061 return &ref->old_oid;
2062 }
2063
2064 int fetch_pack_fsck_objects(void)
2065 {
2066 fetch_pack_setup();
2067 if (fetch_fsck_objects >= 0)
2068 return fetch_fsck_objects;
2069 if (transfer_fsck_objects >= 0)
2070 return transfer_fsck_objects;
2071 return 0;
2072 }
2073
2074 struct ref *fetch_pack(struct fetch_pack_args *args,
2075 int fd[],
2076 const struct ref *ref,
2077 struct ref **sought, int nr_sought,
2078 struct oid_array *shallow,
2079 struct string_list *pack_lockfiles,
2080 enum protocol_version version)
2081 {
2082 struct ref *ref_cpy;
2083 struct shallow_info si;
2084 struct oid_array shallows_scratch = OID_ARRAY_INIT;
2085
2086 fetch_pack_setup();
2087 if (nr_sought)
2088 nr_sought = remove_duplicates_in_refs(sought, nr_sought);
2089
2090 if (version != protocol_v2 && !ref) {
2091 packet_flush(fd[1]);
2092 die(_("no matching remote head"));
2093 }
2094 if (version == protocol_v2) {
2095 if (shallow->nr)
2096 BUG("Protocol V2 does not provide shallows at this point in the fetch");
2097 memset(&si, 0, sizeof(si));
2098 ref_cpy = do_fetch_pack_v2(args, fd, ref, sought, nr_sought,
2099 &shallows_scratch, &si,
2100 pack_lockfiles);
2101 } else {
2102 prepare_shallow_info(&si, shallow);
2103 ref_cpy = do_fetch_pack(args, fd, ref, sought, nr_sought,
2104 &si, pack_lockfiles);
2105 }
2106 reprepare_packed_git(the_repository);
2107
2108 if (!args->cloning && args->deepen) {
2109 struct check_connected_options opt = CHECK_CONNECTED_INIT;
2110 struct ref *iterator = ref_cpy;
2111 opt.shallow_file = alternate_shallow_file;
2112 if (args->deepen)
2113 opt.is_deepening_fetch = 1;
2114 if (check_connected(iterate_ref_map, &iterator, &opt)) {
2115 error(_("remote did not send all necessary objects"));
2116 free_refs(ref_cpy);
2117 ref_cpy = NULL;
2118 rollback_shallow_file(the_repository, &shallow_lock);
2119 goto cleanup;
2120 }
2121 args->connectivity_checked = 1;
2122 }
2123
2124 update_shallow(args, sought, nr_sought, &si);
2125 cleanup:
2126 clear_shallow_info(&si);
2127 oid_array_clear(&shallows_scratch);
2128 return ref_cpy;
2129 }
2130
2131 static int add_to_object_array(const struct object_id *oid, void *data)
2132 {
2133 struct object_array *a = data;
2134
2135 add_object_array(lookup_object(the_repository, oid), "", a);
2136 return 0;
2137 }
2138
2139 static void clear_common_flag(struct oidset *s)
2140 {
2141 struct oidset_iter iter;
2142 const struct object_id *oid;
2143 oidset_iter_init(s, &iter);
2144
2145 while ((oid = oidset_iter_next(&iter))) {
2146 struct object *obj = lookup_object(the_repository, oid);
2147 obj->flags &= ~COMMON;
2148 }
2149 }
2150
2151 void negotiate_using_fetch(const struct oid_array *negotiation_tips,
2152 const struct string_list *server_options,
2153 int stateless_rpc,
2154 int fd[],
2155 struct oidset *acked_commits)
2156 {
2157 struct fetch_negotiator negotiator;
2158 struct packet_reader reader;
2159 struct object_array nt_object_array = OBJECT_ARRAY_INIT;
2160 struct strbuf req_buf = STRBUF_INIT;
2161 int haves_to_send = INITIAL_FLUSH;
2162 int in_vain = 0;
2163 int seen_ack = 0;
2164 int last_iteration = 0;
2165 int negotiation_round = 0;
2166 timestamp_t min_generation = GENERATION_NUMBER_INFINITY;
2167
2168 fetch_negotiator_init(the_repository, &negotiator);
2169 mark_tips(&negotiator, negotiation_tips);
2170
2171 packet_reader_init(&reader, fd[0], NULL, 0,
2172 PACKET_READ_CHOMP_NEWLINE |
2173 PACKET_READ_DIE_ON_ERR_PACKET);
2174
2175 oid_array_for_each((struct oid_array *) negotiation_tips,
2176 add_to_object_array,
2177 &nt_object_array);
2178
2179 trace2_region_enter("fetch-pack", "negotiate_using_fetch", the_repository);
2180 while (!last_iteration) {
2181 int haves_added;
2182 struct object_id common_oid;
2183 int received_ready = 0;
2184
2185 negotiation_round++;
2186
2187 trace2_region_enter_printf("negotiate_using_fetch", "round",
2188 the_repository, "%d",
2189 negotiation_round);
2190 strbuf_reset(&req_buf);
2191 write_fetch_command_and_capabilities(&req_buf, server_options);
2192
2193 packet_buf_write(&req_buf, "wait-for-done");
2194
2195 haves_added = add_haves(&negotiator, &req_buf, &haves_to_send);
2196 in_vain += haves_added;
2197 if (!haves_added || (seen_ack && in_vain >= MAX_IN_VAIN))
2198 last_iteration = 1;
2199
2200 trace2_data_intmax("negotiate_using_fetch", the_repository,
2201 "haves_added", haves_added);
2202 trace2_data_intmax("negotiate_using_fetch", the_repository,
2203 "in_vain", in_vain);
2204
2205 /* Send request */
2206 packet_buf_flush(&req_buf);
2207 if (write_in_full(fd[1], req_buf.buf, req_buf.len) < 0)
2208 die_errno(_("unable to write request to remote"));
2209
2210 /* Process ACKs/NAKs */
2211 process_section_header(&reader, "acknowledgments", 0);
2212 while (process_ack(&negotiator, &reader, &common_oid,
2213 &received_ready)) {
2214 struct commit *commit = lookup_commit(the_repository,
2215 &common_oid);
2216 if (commit) {
2217 timestamp_t generation;
2218
2219 parse_commit_or_die(commit);
2220 commit->object.flags |= COMMON;
2221 generation = commit_graph_generation(commit);
2222 if (generation < min_generation)
2223 min_generation = generation;
2224 }
2225 in_vain = 0;
2226 seen_ack = 1;
2227 oidset_insert(acked_commits, &common_oid);
2228 }
2229 if (received_ready)
2230 die(_("unexpected 'ready' from remote"));
2231 else
2232 do_check_stateless_delimiter(stateless_rpc, &reader);
2233 if (can_all_from_reach_with_flag(&nt_object_array, COMMON,
2234 REACH_SCRATCH, 0,
2235 min_generation))
2236 last_iteration = 1;
2237 trace2_region_leave_printf("negotiation", "round",
2238 the_repository, "%d",
2239 negotiation_round);
2240 }
2241 trace2_region_leave("fetch-pack", "negotiate_using_fetch", the_repository);
2242 trace2_data_intmax("negotiate_using_fetch", the_repository,
2243 "total_rounds", negotiation_round);
2244
2245 clear_common_flag(acked_commits);
2246 object_array_clear(&nt_object_array);
2247 negotiator.release(&negotiator);
2248 strbuf_release(&req_buf);
2249 }
2250
2251 int report_unmatched_refs(struct ref **sought, int nr_sought)
2252 {
2253 int i, ret = 0;
2254
2255 for (i = 0; i < nr_sought; i++) {
2256 if (!sought[i])
2257 continue;
2258 switch (sought[i]->match_status) {
2259 case REF_MATCHED:
2260 continue;
2261 case REF_NOT_MATCHED:
2262 error(_("no such remote ref %s"), sought[i]->name);
2263 break;
2264 case REF_UNADVERTISED_NOT_ALLOWED:
2265 error(_("Server does not allow request for unadvertised object %s"),
2266 sought[i]->name);
2267 break;
2268 }
2269 ret = 1;
2270 }
2271 return ret;
2272 }