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