9 #include "fetch-pack.h"
11 #include "run-command.h"
13 static int transfer_unpack_limit = -1;
14 static int fetch_unpack_limit = -1;
15 static int unpack_limit = 100;
16 static int prefer_ofs_delta = 1;
17 static int no_done = 0;
18 static struct fetch_pack_args args = {
19 /* .uploadpack = */ "git-upload-pack",
22 static const char fetch_pack_usage[] =
23 "git fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [-v] [<host>:]<directory> [<refs>...]";
25 #define COMPLETE (1U << 0)
26 #define COMMON (1U << 1)
27 #define COMMON_REF (1U << 2)
28 #define SEEN (1U << 3)
29 #define POPPED (1U << 4)
34 * After sending this many "have"s if we do not get any new ACK , we
35 * give up traversing our history.
37 #define MAX_IN_VAIN 256
39 static struct commit_list *rev_list;
40 static int non_common_revs, multi_ack, use_sideband;
42 static void rev_list_push(struct commit *commit, int mark)
44 if (!(commit->object.flags & mark)) {
45 commit->object.flags |= mark;
47 if (!(commit->object.parsed))
48 if (parse_commit(commit))
51 commit_list_insert_by_date(commit, &rev_list);
53 if (!(commit->object.flags & COMMON))
58 static int rev_list_insert_ref(const char *path, const unsigned char *sha1, int flag, void *cb_data)
60 struct object *o = deref_tag(parse_object(sha1), path, 0);
62 if (o && o->type == OBJ_COMMIT)
63 rev_list_push((struct commit *)o, SEEN);
68 static int clear_marks(const char *path, const unsigned char *sha1, int flag, void *cb_data)
70 struct object *o = deref_tag(parse_object(sha1), path, 0);
72 if (o && o->type == OBJ_COMMIT)
73 clear_commit_marks((struct commit *)o,
74 COMMON | COMMON_REF | SEEN | POPPED);
79 This function marks a rev and its ancestors as common.
80 In some cases, it is desirable to mark only the ancestors (for example
81 when only the server does not yet know that they are common).
84 static void mark_common(struct commit *commit,
85 int ancestors_only, int dont_parse)
87 if (commit != NULL && !(commit->object.flags & COMMON)) {
88 struct object *o = (struct object *)commit;
93 if (!(o->flags & SEEN))
94 rev_list_push(commit, SEEN);
96 struct commit_list *parents;
98 if (!ancestors_only && !(o->flags & POPPED))
100 if (!o->parsed && !dont_parse)
101 if (parse_commit(commit))
104 for (parents = commit->parents;
106 parents = parents->next)
107 mark_common(parents->item, 0, dont_parse);
113 Get the next rev to send, ignoring the common.
116 static const unsigned char *get_rev(void)
118 struct commit *commit = NULL;
120 while (commit == NULL) {
122 struct commit_list *parents;
124 if (rev_list == NULL || non_common_revs == 0)
127 commit = rev_list->item;
128 if (!commit->object.parsed)
129 parse_commit(commit);
130 parents = commit->parents;
132 commit->object.flags |= POPPED;
133 if (!(commit->object.flags & COMMON))
136 if (commit->object.flags & COMMON) {
137 /* do not send "have", and ignore ancestors */
139 mark = COMMON | SEEN;
140 } else if (commit->object.flags & COMMON_REF)
141 /* send "have", and ignore ancestors */
142 mark = COMMON | SEEN;
144 /* send "have", also for its ancestors */
148 if (!(parents->item->object.flags & SEEN))
149 rev_list_push(parents->item, mark);
151 mark_common(parents->item, 1, 0);
152 parents = parents->next;
155 rev_list = rev_list->next;
158 return commit->object.sha1;
169 static void consume_shallow_list(int fd)
171 if (args.stateless_rpc && args.depth > 0) {
172 /* If we sent a depth we will get back "duplicate"
173 * shallow and unshallow commands every time there
174 * is a block of have lines exchanged.
177 while (packet_read_line(fd, line, sizeof(line))) {
178 if (!prefixcmp(line, "shallow "))
180 if (!prefixcmp(line, "unshallow "))
182 die("git fetch-pack: expected shallow list");
187 static enum ack_type get_ack(int fd, unsigned char *result_sha1)
189 static char line[1000];
190 int len = packet_read_line(fd, line, sizeof(line));
193 die("git fetch-pack: expected ACK/NAK, got EOF");
194 if (line[len-1] == '\n')
196 if (!strcmp(line, "NAK"))
198 if (!prefixcmp(line, "ACK ")) {
199 if (!get_sha1_hex(line+4, result_sha1)) {
200 if (strstr(line+45, "continue"))
202 if (strstr(line+45, "common"))
204 if (strstr(line+45, "ready"))
209 die("git fetch_pack: expected ACK/NAK, got '%s'", line);
212 static void send_request(int fd, struct strbuf *buf)
214 if (args.stateless_rpc) {
215 send_sideband(fd, -1, buf->buf, buf->len, LARGE_PACKET_MAX);
218 safe_write(fd, buf->buf, buf->len);
221 #define INITIAL_FLUSH 32
222 #define LARGE_FLUSH 1024
224 static int next_flush(int count)
226 if (count < LARGE_FLUSH)
229 count += LARGE_FLUSH;
233 static int find_common(int fd[2], unsigned char *result_sha1,
237 int count = 0, flushes = 0, flush_at = INITIAL_FLUSH, retval;
238 const unsigned char *sha1;
239 unsigned in_vain = 0;
240 int got_continue = 0;
242 struct strbuf req_buf = STRBUF_INIT;
243 size_t state_len = 0;
245 if (args.stateless_rpc && multi_ack == 1)
246 die("--stateless-rpc requires multi_ack_detailed");
248 for_each_ref(clear_marks, NULL);
251 for_each_ref(rev_list_insert_ref, NULL);
254 for ( ; refs ; refs = refs->next) {
255 unsigned char *remote = refs->old_sha1;
256 const char *remote_hex;
260 * If that object is complete (i.e. it is an ancestor of a
261 * local ref), we tell them we have it but do not have to
262 * tell them about its ancestors, which they already know
265 * We use lookup_object here because we are only
266 * interested in the case we *know* the object is
267 * reachable and we have already scanned it.
269 if (((o = lookup_object(remote)) != NULL) &&
270 (o->flags & COMPLETE)) {
274 remote_hex = sha1_to_hex(remote);
276 struct strbuf c = STRBUF_INIT;
277 if (multi_ack == 2) strbuf_addstr(&c, " multi_ack_detailed");
278 if (multi_ack == 1) strbuf_addstr(&c, " multi_ack");
279 if (no_done) strbuf_addstr(&c, " no-done");
280 if (use_sideband == 2) strbuf_addstr(&c, " side-band-64k");
281 if (use_sideband == 1) strbuf_addstr(&c, " side-band");
282 if (args.use_thin_pack) strbuf_addstr(&c, " thin-pack");
283 if (args.no_progress) strbuf_addstr(&c, " no-progress");
284 if (args.include_tag) strbuf_addstr(&c, " include-tag");
285 if (prefer_ofs_delta) strbuf_addstr(&c, " ofs-delta");
286 packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
289 packet_buf_write(&req_buf, "want %s\n", remote_hex);
294 strbuf_release(&req_buf);
299 if (is_repository_shallow())
300 write_shallow_commits(&req_buf, 1);
302 packet_buf_write(&req_buf, "deepen %d", args.depth);
303 packet_buf_flush(&req_buf);
304 state_len = req_buf.len;
306 if (args.depth > 0) {
308 unsigned char sha1[20];
310 send_request(fd[1], &req_buf);
311 while (packet_read_line(fd[0], line, sizeof(line))) {
312 if (!prefixcmp(line, "shallow ")) {
313 if (get_sha1_hex(line + 8, sha1))
314 die("invalid shallow line: %s", line);
315 register_shallow(sha1);
318 if (!prefixcmp(line, "unshallow ")) {
319 if (get_sha1_hex(line + 10, sha1))
320 die("invalid unshallow line: %s", line);
321 if (!lookup_object(sha1))
322 die("object not found: %s", line);
323 /* make sure that it is parsed as shallow */
324 if (!parse_object(sha1))
325 die("error in object: %s", line);
326 if (unregister_shallow(sha1))
327 die("no shallow found: %s", line);
330 die("expected shallow/unshallow, got %s", line);
332 } else if (!args.stateless_rpc)
333 send_request(fd[1], &req_buf);
335 if (!args.stateless_rpc) {
336 /* If we aren't using the stateless-rpc interface
337 * we don't need to retain the headers.
339 strbuf_setlen(&req_buf, 0);
345 while ((sha1 = get_rev())) {
346 packet_buf_write(&req_buf, "have %s\n", sha1_to_hex(sha1));
348 fprintf(stderr, "have %s\n", sha1_to_hex(sha1));
350 if (flush_at <= ++count) {
353 packet_buf_flush(&req_buf);
354 send_request(fd[1], &req_buf);
355 strbuf_setlen(&req_buf, state_len);
357 flush_at = next_flush(count);
360 * We keep one window "ahead" of the other side, and
361 * will wait for an ACK only on the next one
363 if (!args.stateless_rpc && count == INITIAL_FLUSH)
366 consume_shallow_list(fd[0]);
368 ack = get_ack(fd[0], result_sha1);
369 if (args.verbose && ack)
370 fprintf(stderr, "got ack %d %s\n", ack,
371 sha1_to_hex(result_sha1));
381 struct commit *commit =
382 lookup_commit(result_sha1);
383 if (args.stateless_rpc
385 && !(commit->object.flags & COMMON)) {
386 /* We need to replay the have for this object
387 * on the next RPC request so the peer knows
388 * it is in common with us.
390 const char *hex = sha1_to_hex(result_sha1);
391 packet_buf_write(&req_buf, "have %s\n", hex);
392 state_len = req_buf.len;
394 mark_common(commit, 0, 1);
398 if (ack == ACK_ready) {
407 if (got_continue && MAX_IN_VAIN < in_vain) {
409 fprintf(stderr, "giving up\n");
415 if (!got_ready || !no_done) {
416 packet_buf_write(&req_buf, "done\n");
417 send_request(fd[1], &req_buf);
420 fprintf(stderr, "done\n");
425 strbuf_release(&req_buf);
427 consume_shallow_list(fd[0]);
428 while (flushes || multi_ack) {
429 int ack = get_ack(fd[0], result_sha1);
432 fprintf(stderr, "got ack (%d) %s\n", ack,
433 sha1_to_hex(result_sha1));
441 /* it is no error to fetch into a completely empty repo */
442 return count ? retval : 0;
445 static struct commit_list *complete;
447 static int mark_complete(const char *path, const unsigned char *sha1, int flag, void *cb_data)
449 struct object *o = parse_object(sha1);
451 while (o && o->type == OBJ_TAG) {
452 struct tag *t = (struct tag *) o;
454 break; /* broken repository */
455 o->flags |= COMPLETE;
456 o = parse_object(t->tagged->sha1);
458 if (o && o->type == OBJ_COMMIT) {
459 struct commit *commit = (struct commit *)o;
460 commit->object.flags |= COMPLETE;
461 commit_list_insert_by_date(commit, &complete);
466 static void mark_recent_complete_commits(unsigned long cutoff)
468 while (complete && cutoff <= complete->item->date) {
470 fprintf(stderr, "Marking %s as complete\n",
471 sha1_to_hex(complete->item->object.sha1));
472 pop_most_recent_commit(&complete, COMPLETE);
476 static void filter_refs(struct ref **refs, int nr_match, char **match)
478 struct ref **return_refs;
479 struct ref *newlist = NULL;
480 struct ref **newtail = &newlist;
481 struct ref *ref, *next;
482 struct ref *fastarray[32];
484 if (nr_match && !args.fetch_all) {
485 if (ARRAY_SIZE(fastarray) < nr_match)
486 return_refs = xcalloc(nr_match, sizeof(struct ref *));
488 return_refs = fastarray;
489 memset(return_refs, 0, sizeof(struct ref *) * nr_match);
495 for (ref = *refs; ref; ref = next) {
497 if (!memcmp(ref->name, "refs/", 5) &&
498 check_ref_format(ref->name + 5))
500 else if (args.fetch_all &&
501 (!args.depth || prefixcmp(ref->name, "refs/tags/") )) {
504 newtail = &ref->next;
508 int order = path_match(ref->name, nr_match, match);
510 return_refs[order-1] = ref;
511 continue; /* we will link it later */
517 if (!args.fetch_all) {
519 for (i = 0; i < nr_match; i++) {
520 ref = return_refs[i];
524 newtail = &ref->next;
527 if (return_refs != fastarray)
533 static int everything_local(struct ref **refs, int nr_match, char **match)
537 unsigned long cutoff = 0;
539 save_commit_buffer = 0;
541 for (ref = *refs; ref; ref = ref->next) {
544 o = parse_object(ref->old_sha1);
548 /* We already have it -- which may mean that we were
549 * in sync with the other side at some time after
550 * that (it is OK if we guess wrong here).
552 if (o->type == OBJ_COMMIT) {
553 struct commit *commit = (struct commit *)o;
554 if (!cutoff || cutoff < commit->date)
555 cutoff = commit->date;
560 for_each_ref(mark_complete, NULL);
562 mark_recent_complete_commits(cutoff);
566 * Mark all complete remote refs as common refs.
567 * Don't mark them common yet; the server has to be told so first.
569 for (ref = *refs; ref; ref = ref->next) {
570 struct object *o = deref_tag(lookup_object(ref->old_sha1),
573 if (!o || o->type != OBJ_COMMIT || !(o->flags & COMPLETE))
576 if (!(o->flags & SEEN)) {
577 rev_list_push((struct commit *)o, COMMON_REF | SEEN);
579 mark_common((struct commit *)o, 1, 1);
583 filter_refs(refs, nr_match, match);
585 for (retval = 1, ref = *refs; ref ; ref = ref->next) {
586 const unsigned char *remote = ref->old_sha1;
587 unsigned char local[20];
590 o = lookup_object(remote);
591 if (!o || !(o->flags & COMPLETE)) {
596 "want %s (%s)\n", sha1_to_hex(remote),
601 hashcpy(ref->new_sha1, local);
605 "already have %s (%s)\n", sha1_to_hex(remote),
611 static int sideband_demux(int in, int out, void *data)
615 int ret = recv_sideband("fetch-pack", xd[0], out);
620 static int get_pack(int xd[2], char **pack_lockfile)
623 const char *argv[20];
627 int do_keep = args.keep_pack;
628 struct child_process cmd;
630 memset(&demux, 0, sizeof(demux));
632 /* xd[] is talking with upload-pack; subprocess reads from
633 * xd[0], spits out band#2 to stderr, and feeds us band#1
634 * through demux->out.
636 demux.proc = sideband_demux;
639 if (start_async(&demux))
640 die("fetch-pack: unable to fork off sideband"
646 memset(&cmd, 0, sizeof(cmd));
650 if (!args.keep_pack && unpack_limit) {
651 struct pack_header header;
653 if (read_pack_header(demux.out, &header))
654 die("protocol error: bad pack header");
655 snprintf(hdr_arg, sizeof(hdr_arg),
656 "--pack_header=%"PRIu32",%"PRIu32,
657 ntohl(header.hdr_version), ntohl(header.hdr_entries));
658 if (ntohl(header.hdr_entries) < unpack_limit)
667 *av++ = "index-pack";
669 if (!args.quiet && !args.no_progress)
671 if (args.use_thin_pack)
672 *av++ = "--fix-thin";
673 if (args.lock_pack || unpack_limit) {
674 int s = sprintf(keep_arg,
675 "--keep=fetch-pack %"PRIuMAX " on ", (uintmax_t) getpid());
676 if (gethostname(keep_arg + s, sizeof(keep_arg) - s))
677 strcpy(keep_arg + s, "localhost");
682 *av++ = "unpack-objects";
692 if (start_command(&cmd))
693 die("fetch-pack: unable to fork off %s", argv[0]);
694 if (do_keep && pack_lockfile) {
695 *pack_lockfile = index_pack_lockfile(cmd.out);
699 if (finish_command(&cmd))
700 die("%s failed", argv[0]);
701 if (use_sideband && finish_async(&demux))
702 die("error in sideband demultiplexer");
706 static struct ref *do_fetch_pack(int fd[2],
707 const struct ref *orig_ref,
710 char **pack_lockfile)
712 struct ref *ref = copy_ref_list(orig_ref);
713 unsigned char sha1[20];
715 if (is_repository_shallow() && !server_supports("shallow"))
716 die("Server does not support shallow clients");
717 if (server_supports("multi_ack_detailed")) {
719 fprintf(stderr, "Server supports multi_ack_detailed\n");
721 if (server_supports("no-done")) {
723 fprintf(stderr, "Server supports no-done\n");
727 else if (server_supports("multi_ack")) {
729 fprintf(stderr, "Server supports multi_ack\n");
732 if (server_supports("side-band-64k")) {
734 fprintf(stderr, "Server supports side-band-64k\n");
737 else if (server_supports("side-band")) {
739 fprintf(stderr, "Server supports side-band\n");
742 if (server_supports("ofs-delta")) {
744 fprintf(stderr, "Server supports ofs-delta\n");
746 prefer_ofs_delta = 0;
747 if (everything_local(&ref, nr_match, match)) {
751 if (find_common(fd, sha1, ref) < 0)
753 /* When cloning, it is not unusual to have
756 warning("no common commits");
758 if (args.stateless_rpc)
760 if (get_pack(fd, pack_lockfile))
761 die("git fetch-pack: fetch failed.");
767 static int remove_duplicates(int nr_heads, char **heads)
771 for (src = dst = 0; src < nr_heads; src++) {
772 /* If heads[src] is different from any of
773 * heads[0..dst], push it in.
776 for (i = 0; i < dst; i++) {
777 if (!strcmp(heads[i], heads[src]))
783 heads[dst] = heads[src];
789 static int fetch_pack_config(const char *var, const char *value, void *cb)
791 if (strcmp(var, "fetch.unpacklimit") == 0) {
792 fetch_unpack_limit = git_config_int(var, value);
796 if (strcmp(var, "transfer.unpacklimit") == 0) {
797 transfer_unpack_limit = git_config_int(var, value);
801 if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
802 prefer_ofs_delta = git_config_bool(var, value);
806 return git_default_config(var, value, cb);
809 static struct lock_file lock;
811 static void fetch_pack_setup(void)
813 static int did_setup;
816 git_config(fetch_pack_config, NULL);
817 if (0 <= transfer_unpack_limit)
818 unpack_limit = transfer_unpack_limit;
819 else if (0 <= fetch_unpack_limit)
820 unpack_limit = fetch_unpack_limit;
824 int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
826 int i, ret, nr_heads;
827 struct ref *ref = NULL;
828 char *dest = NULL, **heads;
830 char *pack_lockfile = NULL;
831 char **pack_lockfile_ptr = NULL;
832 struct child_process *conn;
836 for (i = 1; i < argc; i++) {
837 const char *arg = argv[i];
840 if (!prefixcmp(arg, "--upload-pack=")) {
841 args.uploadpack = arg + 14;
844 if (!prefixcmp(arg, "--exec=")) {
845 args.uploadpack = arg + 7;
848 if (!strcmp("--quiet", arg) || !strcmp("-q", arg)) {
852 if (!strcmp("--keep", arg) || !strcmp("-k", arg)) {
853 args.lock_pack = args.keep_pack;
857 if (!strcmp("--thin", arg)) {
858 args.use_thin_pack = 1;
861 if (!strcmp("--include-tag", arg)) {
862 args.include_tag = 1;
865 if (!strcmp("--all", arg)) {
869 if (!strcmp("-v", arg)) {
873 if (!prefixcmp(arg, "--depth=")) {
874 args.depth = strtol(arg + 8, NULL, 0);
877 if (!strcmp("--no-progress", arg)) {
878 args.no_progress = 1;
881 if (!strcmp("--stateless-rpc", arg)) {
882 args.stateless_rpc = 1;
885 if (!strcmp("--lock-pack", arg)) {
887 pack_lockfile_ptr = &pack_lockfile;
890 usage(fetch_pack_usage);
893 heads = (char **)(argv + i + 1);
894 nr_heads = argc - i - 1;
898 usage(fetch_pack_usage);
900 if (args.stateless_rpc) {
905 conn = git_connect(fd, (char *)dest, args.uploadpack,
906 args.verbose ? CONNECT_VERBOSE : 0);
909 get_remote_heads(fd[0], &ref, 0, NULL, 0, NULL);
911 ref = fetch_pack(&args, fd, conn, ref, dest,
912 nr_heads, heads, pack_lockfile_ptr);
914 printf("lock %s\n", pack_lockfile);
919 if (finish_connect(conn))
923 if (!ret && nr_heads) {
924 /* If the heads to pull were given, we should have
925 * consumed all of them by matching the remote.
926 * Otherwise, 'git fetch remote no-such-ref' would
927 * silently succeed without issuing an error.
929 for (i = 0; i < nr_heads; i++)
930 if (heads[i] && heads[i][0]) {
931 error("no such remote ref %s", heads[i]);
937 sha1_to_hex(ref->old_sha1), ref->name);
944 struct ref *fetch_pack(struct fetch_pack_args *my_args,
945 int fd[], struct child_process *conn,
946 const struct ref *ref,
950 char **pack_lockfile)
956 if (&args != my_args)
957 memcpy(&args, my_args, sizeof(args));
958 if (args.depth > 0) {
959 if (stat(git_path("shallow"), &st))
963 if (heads && nr_heads)
964 nr_heads = remove_duplicates(nr_heads, heads);
967 die("no matching remote head");
969 ref_cpy = do_fetch_pack(fd, ref, nr_heads, heads, pack_lockfile);
971 if (args.depth > 0) {
972 struct cache_time mtime;
973 struct strbuf sb = STRBUF_INIT;
974 char *shallow = git_path("shallow");
977 mtime.sec = st.st_mtime;
978 mtime.nsec = ST_MTIME_NSEC(st);
979 if (stat(shallow, &st)) {
981 die("shallow file was removed during fetch");
982 } else if (st.st_mtime != mtime.sec
984 || ST_MTIME_NSEC(st) != mtime.nsec
987 die("shallow file was changed during fetch");
989 fd = hold_lock_file_for_update(&lock, shallow,
991 if (!write_shallow_commits(&sb, 0)
992 || write_in_full(fd, sb.buf, sb.len) != sb.len) {
993 unlink_or_warn(shallow);
994 rollback_lock_file(&lock);
996 commit_lock_file(&lock);
1001 reprepare_packed_git();