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