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