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