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 struct fetch_pack_args args
= {
18 /* .uploadpack = */ "git-upload-pack",
21 static const char fetch_pack_usage
[] =
22 "git fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [-v] [<host>:]<directory> [<refs>...]";
24 #define COMPLETE (1U << 0)
25 #define COMMON (1U << 1)
26 #define COMMON_REF (1U << 2)
27 #define SEEN (1U << 3)
28 #define POPPED (1U << 4)
33 * After sending this many "have"s if we do not get any new ACK , we
34 * give up traversing our history.
36 #define MAX_IN_VAIN 256
38 static struct commit_list
*rev_list
;
39 static int non_common_revs
, multi_ack
, use_sideband
;
41 static void rev_list_push(struct commit
*commit
, int mark
)
43 if (!(commit
->object
.flags
& mark
)) {
44 commit
->object
.flags
|= mark
;
46 if (!(commit
->object
.parsed
))
47 if (parse_commit(commit
))
50 insert_by_date(commit
, &rev_list
);
52 if (!(commit
->object
.flags
& COMMON
))
57 static int rev_list_insert_ref(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
59 struct object
*o
= deref_tag(parse_object(sha1
), path
, 0);
61 if (o
&& o
->type
== OBJ_COMMIT
)
62 rev_list_push((struct commit
*)o
, SEEN
);
67 static int clear_marks(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
69 struct object
*o
= deref_tag(parse_object(sha1
), path
, 0);
71 if (o
&& o
->type
== OBJ_COMMIT
)
72 clear_commit_marks((struct commit
*)o
,
73 COMMON
| COMMON_REF
| SEEN
| POPPED
);
78 This function marks a rev and its ancestors as common.
79 In some cases, it is desirable to mark only the ancestors (for example
80 when only the server does not yet know that they are common).
83 static void mark_common(struct commit
*commit
,
84 int ancestors_only
, int dont_parse
)
86 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
87 struct object
*o
= (struct object
*)commit
;
92 if (!(o
->flags
& SEEN
))
93 rev_list_push(commit
, SEEN
);
95 struct commit_list
*parents
;
97 if (!ancestors_only
&& !(o
->flags
& POPPED
))
99 if (!o
->parsed
&& !dont_parse
)
100 if (parse_commit(commit
))
103 for (parents
= commit
->parents
;
105 parents
= parents
->next
)
106 mark_common(parents
->item
, 0, dont_parse
);
112 Get the next rev to send, ignoring the common.
115 static const unsigned char *get_rev(void)
117 struct commit
*commit
= NULL
;
119 while (commit
== NULL
) {
121 struct commit_list
*parents
;
123 if (rev_list
== NULL
|| non_common_revs
== 0)
126 commit
= rev_list
->item
;
127 if (!commit
->object
.parsed
)
128 parse_commit(commit
);
129 parents
= commit
->parents
;
131 commit
->object
.flags
|= POPPED
;
132 if (!(commit
->object
.flags
& COMMON
))
135 if (commit
->object
.flags
& COMMON
) {
136 /* do not send "have", and ignore ancestors */
138 mark
= COMMON
| SEEN
;
139 } else if (commit
->object
.flags
& COMMON_REF
)
140 /* send "have", and ignore ancestors */
141 mark
= COMMON
| SEEN
;
143 /* send "have", also for its ancestors */
147 if (!(parents
->item
->object
.flags
& SEEN
))
148 rev_list_push(parents
->item
, mark
);
150 mark_common(parents
->item
, 1, 0);
151 parents
= parents
->next
;
154 rev_list
= rev_list
->next
;
157 return commit
->object
.sha1
;
168 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
170 static char line
[1000];
171 int len
= packet_read_line(fd
, line
, sizeof(line
));
174 die("git fetch-pack: expected ACK/NAK, got EOF");
175 if (line
[len
-1] == '\n')
177 if (!strcmp(line
, "NAK"))
179 if (!prefixcmp(line
, "ACK ")) {
180 if (!get_sha1_hex(line
+4, result_sha1
)) {
181 if (strstr(line
+45, "continue"))
183 if (strstr(line
+45, "common"))
185 if (strstr(line
+45, "ready"))
190 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
193 static int find_common(int fd
[2], unsigned char *result_sha1
,
197 int count
= 0, flushes
= 0, retval
;
198 const unsigned char *sha1
;
199 unsigned in_vain
= 0;
200 int got_continue
= 0;
201 struct strbuf req_buf
= STRBUF_INIT
;
204 for_each_ref(clear_marks
, NULL
);
207 for_each_ref(rev_list_insert_ref
, NULL
);
210 for ( ; refs
; refs
= refs
->next
) {
211 unsigned char *remote
= refs
->old_sha1
;
212 const char *remote_hex
;
216 * If that object is complete (i.e. it is an ancestor of a
217 * local ref), we tell them we have it but do not have to
218 * tell them about its ancestors, which they already know
221 * We use lookup_object here because we are only
222 * interested in the case we *know* the object is
223 * reachable and we have already scanned it.
225 if (((o
= lookup_object(remote
)) != NULL
) &&
226 (o
->flags
& COMPLETE
)) {
230 remote_hex
= sha1_to_hex(remote
);
232 struct strbuf c
= STRBUF_INIT
;
233 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
234 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
235 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
236 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
237 if (args
.use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
238 if (args
.no_progress
) strbuf_addstr(&c
, " no-progress");
239 if (args
.include_tag
) strbuf_addstr(&c
, " include-tag");
240 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
241 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
244 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
249 strbuf_release(&req_buf
);
254 if (is_repository_shallow())
255 write_shallow_commits(&req_buf
, 1);
257 packet_buf_write(&req_buf
, "deepen %d", args
.depth
);
258 packet_buf_flush(&req_buf
);
260 safe_write(fd
[1], req_buf
.buf
, req_buf
.len
);
262 if (args
.depth
> 0) {
264 unsigned char sha1
[20];
266 while (packet_read_line(fd
[0], line
, sizeof(line
))) {
267 if (!prefixcmp(line
, "shallow ")) {
268 if (get_sha1_hex(line
+ 8, sha1
))
269 die("invalid shallow line: %s", line
);
270 register_shallow(sha1
);
273 if (!prefixcmp(line
, "unshallow ")) {
274 if (get_sha1_hex(line
+ 10, sha1
))
275 die("invalid unshallow line: %s", line
);
276 if (!lookup_object(sha1
))
277 die("object not found: %s", line
);
278 /* make sure that it is parsed as shallow */
279 if (!parse_object(sha1
))
280 die("error in object: %s", line
);
281 if (unregister_shallow(sha1
))
282 die("no shallow found: %s", line
);
285 die("expected shallow/unshallow, got %s", line
);
291 while ((sha1
= get_rev())) {
292 packet_write(fd
[1], "have %s\n", sha1_to_hex(sha1
));
294 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
296 if (!(31 & ++count
)) {
303 * We keep one window "ahead" of the other side, and
304 * will wait for an ACK only on the next one
310 ack
= get_ack(fd
[0], result_sha1
);
311 if (args
.verbose
&& ack
)
312 fprintf(stderr
, "got ack %d %s\n", ack
,
313 sha1_to_hex(result_sha1
));
323 struct commit
*commit
=
324 lookup_commit(result_sha1
);
325 mark_common(commit
, 0, 1);
334 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
336 fprintf(stderr
, "giving up\n");
342 packet_write(fd
[1], "done\n");
344 fprintf(stderr
, "done\n");
349 strbuf_release(&req_buf
);
351 while (flushes
|| multi_ack
) {
352 int ack
= get_ack(fd
[0], result_sha1
);
355 fprintf(stderr
, "got ack (%d) %s\n", ack
,
356 sha1_to_hex(result_sha1
));
364 /* it is no error to fetch into a completely empty repo */
365 return count
? retval
: 0;
368 static struct commit_list
*complete
;
370 static int mark_complete(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
372 struct object
*o
= parse_object(sha1
);
374 while (o
&& o
->type
== OBJ_TAG
) {
375 struct tag
*t
= (struct tag
*) o
;
377 break; /* broken repository */
378 o
->flags
|= COMPLETE
;
379 o
= parse_object(t
->tagged
->sha1
);
381 if (o
&& o
->type
== OBJ_COMMIT
) {
382 struct commit
*commit
= (struct commit
*)o
;
383 commit
->object
.flags
|= COMPLETE
;
384 insert_by_date(commit
, &complete
);
389 static void mark_recent_complete_commits(unsigned long cutoff
)
391 while (complete
&& cutoff
<= complete
->item
->date
) {
393 fprintf(stderr
, "Marking %s as complete\n",
394 sha1_to_hex(complete
->item
->object
.sha1
));
395 pop_most_recent_commit(&complete
, COMPLETE
);
399 static void filter_refs(struct ref
**refs
, int nr_match
, char **match
)
401 struct ref
**return_refs
;
402 struct ref
*newlist
= NULL
;
403 struct ref
**newtail
= &newlist
;
404 struct ref
*ref
, *next
;
405 struct ref
*fastarray
[32];
407 if (nr_match
&& !args
.fetch_all
) {
408 if (ARRAY_SIZE(fastarray
) < nr_match
)
409 return_refs
= xcalloc(nr_match
, sizeof(struct ref
*));
411 return_refs
= fastarray
;
412 memset(return_refs
, 0, sizeof(struct ref
*) * nr_match
);
418 for (ref
= *refs
; ref
; ref
= next
) {
420 if (!memcmp(ref
->name
, "refs/", 5) &&
421 check_ref_format(ref
->name
+ 5))
423 else if (args
.fetch_all
&&
424 (!args
.depth
|| prefixcmp(ref
->name
, "refs/tags/") )) {
427 newtail
= &ref
->next
;
431 int order
= path_match(ref
->name
, nr_match
, match
);
433 return_refs
[order
-1] = ref
;
434 continue; /* we will link it later */
440 if (!args
.fetch_all
) {
442 for (i
= 0; i
< nr_match
; i
++) {
443 ref
= return_refs
[i
];
447 newtail
= &ref
->next
;
450 if (return_refs
!= fastarray
)
456 static int everything_local(struct ref
**refs
, int nr_match
, char **match
)
460 unsigned long cutoff
= 0;
462 save_commit_buffer
= 0;
464 for (ref
= *refs
; ref
; ref
= ref
->next
) {
467 o
= parse_object(ref
->old_sha1
);
471 /* We already have it -- which may mean that we were
472 * in sync with the other side at some time after
473 * that (it is OK if we guess wrong here).
475 if (o
->type
== OBJ_COMMIT
) {
476 struct commit
*commit
= (struct commit
*)o
;
477 if (!cutoff
|| cutoff
< commit
->date
)
478 cutoff
= commit
->date
;
483 for_each_ref(mark_complete
, NULL
);
485 mark_recent_complete_commits(cutoff
);
489 * Mark all complete remote refs as common refs.
490 * Don't mark them common yet; the server has to be told so first.
492 for (ref
= *refs
; ref
; ref
= ref
->next
) {
493 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
496 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
499 if (!(o
->flags
& SEEN
)) {
500 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
502 mark_common((struct commit
*)o
, 1, 1);
506 filter_refs(refs
, nr_match
, match
);
508 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
509 const unsigned char *remote
= ref
->old_sha1
;
510 unsigned char local
[20];
513 o
= lookup_object(remote
);
514 if (!o
|| !(o
->flags
& COMPLETE
)) {
519 "want %s (%s)\n", sha1_to_hex(remote
),
524 hashcpy(ref
->new_sha1
, local
);
528 "already have %s (%s)\n", sha1_to_hex(remote
),
534 static int sideband_demux(int fd
, void *data
)
538 int ret
= recv_sideband("fetch-pack", xd
[0], fd
);
543 static int get_pack(int xd
[2], char **pack_lockfile
)
546 const char *argv
[20];
550 int do_keep
= args
.keep_pack
;
551 struct child_process cmd
;
553 memset(&demux
, 0, sizeof(demux
));
555 /* xd[] is talking with upload-pack; subprocess reads from
556 * xd[0], spits out band#2 to stderr, and feeds us band#1
557 * through demux->out.
559 demux
.proc
= sideband_demux
;
561 if (start_async(&demux
))
562 die("fetch-pack: unable to fork off sideband"
568 memset(&cmd
, 0, sizeof(cmd
));
572 if (!args
.keep_pack
&& unpack_limit
) {
573 struct pack_header header
;
575 if (read_pack_header(demux
.out
, &header
))
576 die("protocol error: bad pack header");
577 snprintf(hdr_arg
, sizeof(hdr_arg
),
578 "--pack_header=%"PRIu32
",%"PRIu32
,
579 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
580 if (ntohl(header
.hdr_entries
) < unpack_limit
)
589 *av
++ = "index-pack";
591 if (!args
.quiet
&& !args
.no_progress
)
593 if (args
.use_thin_pack
)
594 *av
++ = "--fix-thin";
595 if (args
.lock_pack
|| unpack_limit
) {
596 int s
= sprintf(keep_arg
,
597 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
598 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
599 strcpy(keep_arg
+ s
, "localhost");
604 *av
++ = "unpack-objects";
614 if (start_command(&cmd
))
615 die("fetch-pack: unable to fork off %s", argv
[0]);
616 if (do_keep
&& pack_lockfile
) {
617 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
621 if (finish_command(&cmd
))
622 die("%s failed", argv
[0]);
623 if (use_sideband
&& finish_async(&demux
))
624 die("error in sideband demultiplexer");
628 static struct ref
*do_fetch_pack(int fd
[2],
629 const struct ref
*orig_ref
,
632 char **pack_lockfile
)
634 struct ref
*ref
= copy_ref_list(orig_ref
);
635 unsigned char sha1
[20];
637 if (is_repository_shallow() && !server_supports("shallow"))
638 die("Server does not support shallow clients");
639 if (server_supports("multi_ack_detailed")) {
641 fprintf(stderr
, "Server supports multi_ack_detailed\n");
644 else if (server_supports("multi_ack")) {
646 fprintf(stderr
, "Server supports multi_ack\n");
649 if (server_supports("side-band-64k")) {
651 fprintf(stderr
, "Server supports side-band-64k\n");
654 else if (server_supports("side-band")) {
656 fprintf(stderr
, "Server supports side-band\n");
659 if (server_supports("ofs-delta")) {
661 fprintf(stderr
, "Server supports ofs-delta\n");
663 prefer_ofs_delta
= 0;
664 if (everything_local(&ref
, nr_match
, match
)) {
668 if (find_common(fd
, sha1
, ref
) < 0)
670 /* When cloning, it is not unusual to have
673 warning("no common commits");
675 if (get_pack(fd
, pack_lockfile
))
676 die("git fetch-pack: fetch failed.");
682 static int remove_duplicates(int nr_heads
, char **heads
)
686 for (src
= dst
= 0; src
< nr_heads
; src
++) {
687 /* If heads[src] is different from any of
688 * heads[0..dst], push it in.
691 for (i
= 0; i
< dst
; i
++) {
692 if (!strcmp(heads
[i
], heads
[src
]))
698 heads
[dst
] = heads
[src
];
704 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
706 if (strcmp(var
, "fetch.unpacklimit") == 0) {
707 fetch_unpack_limit
= git_config_int(var
, value
);
711 if (strcmp(var
, "transfer.unpacklimit") == 0) {
712 transfer_unpack_limit
= git_config_int(var
, value
);
716 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
717 prefer_ofs_delta
= git_config_bool(var
, value
);
721 return git_default_config(var
, value
, cb
);
724 static struct lock_file lock
;
726 static void fetch_pack_setup(void)
728 static int did_setup
;
731 git_config(fetch_pack_config
, NULL
);
732 if (0 <= transfer_unpack_limit
)
733 unpack_limit
= transfer_unpack_limit
;
734 else if (0 <= fetch_unpack_limit
)
735 unpack_limit
= fetch_unpack_limit
;
739 int cmd_fetch_pack(int argc
, const char **argv
, const char *prefix
)
741 int i
, ret
, nr_heads
;
742 struct ref
*ref
= NULL
;
743 char *dest
= NULL
, **heads
;
745 struct child_process
*conn
;
749 for (i
= 1; i
< argc
; i
++) {
750 const char *arg
= argv
[i
];
753 if (!prefixcmp(arg
, "--upload-pack=")) {
754 args
.uploadpack
= arg
+ 14;
757 if (!prefixcmp(arg
, "--exec=")) {
758 args
.uploadpack
= arg
+ 7;
761 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
765 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
766 args
.lock_pack
= args
.keep_pack
;
770 if (!strcmp("--thin", arg
)) {
771 args
.use_thin_pack
= 1;
774 if (!strcmp("--include-tag", arg
)) {
775 args
.include_tag
= 1;
778 if (!strcmp("--all", arg
)) {
782 if (!strcmp("-v", arg
)) {
786 if (!prefixcmp(arg
, "--depth=")) {
787 args
.depth
= strtol(arg
+ 8, NULL
, 0);
790 if (!strcmp("--no-progress", arg
)) {
791 args
.no_progress
= 1;
794 usage(fetch_pack_usage
);
797 heads
= (char **)(argv
+ i
+ 1);
798 nr_heads
= argc
- i
- 1;
802 usage(fetch_pack_usage
);
804 conn
= git_connect(fd
, (char *)dest
, args
.uploadpack
,
805 args
.verbose
? CONNECT_VERBOSE
: 0);
807 get_remote_heads(fd
[0], &ref
, 0, NULL
, 0, NULL
);
809 ref
= fetch_pack(&args
, fd
, conn
, ref
, dest
, nr_heads
, heads
, NULL
);
812 if (finish_connect(conn
))
819 if (!ret
&& nr_heads
) {
820 /* If the heads to pull were given, we should have
821 * consumed all of them by matching the remote.
822 * Otherwise, 'git fetch remote no-such-ref' would
823 * silently succeed without issuing an error.
825 for (i
= 0; i
< nr_heads
; i
++)
826 if (heads
[i
] && heads
[i
][0]) {
827 error("no such remote ref %s", heads
[i
]);
833 sha1_to_hex(ref
->old_sha1
), ref
->name
);
840 struct ref
*fetch_pack(struct fetch_pack_args
*my_args
,
841 int fd
[], struct child_process
*conn
,
842 const struct ref
*ref
,
846 char **pack_lockfile
)
852 if (&args
!= my_args
)
853 memcpy(&args
, my_args
, sizeof(args
));
854 if (args
.depth
> 0) {
855 if (stat(git_path("shallow"), &st
))
859 if (heads
&& nr_heads
)
860 nr_heads
= remove_duplicates(nr_heads
, heads
);
863 die("no matching remote head");
865 ref_cpy
= do_fetch_pack(fd
, ref
, nr_heads
, heads
, pack_lockfile
);
867 if (args
.depth
> 0) {
868 struct cache_time mtime
;
869 struct strbuf sb
= STRBUF_INIT
;
870 char *shallow
= git_path("shallow");
873 mtime
.sec
= st
.st_mtime
;
874 mtime
.nsec
= ST_MTIME_NSEC(st
);
875 if (stat(shallow
, &st
)) {
877 die("shallow file was removed during fetch");
878 } else if (st
.st_mtime
!= mtime
.sec
880 || ST_MTIME_NSEC(st
) != mtime
.nsec
883 die("shallow file was changed during fetch");
885 fd
= hold_lock_file_for_update(&lock
, shallow
,
887 if (!write_shallow_commits(&sb
, 0)
888 || write_in_full(fd
, sb
.buf
, sb
.len
) != sb
.len
) {
889 unlink_or_warn(shallow
);
890 rollback_lock_file(&lock
);
892 commit_lock_file(&lock
);
897 reprepare_packed_git();