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