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
;
160 static int get_ack(int fd
, unsigned char *result_sha1
)
162 static char line
[1000];
163 int len
= packet_read_line(fd
, line
, sizeof(line
));
166 die("git fetch-pack: expected ACK/NAK, got EOF");
167 if (line
[len
-1] == '\n')
169 if (!strcmp(line
, "NAK"))
171 if (!prefixcmp(line
, "ACK ")) {
172 if (!get_sha1_hex(line
+4, result_sha1
)) {
173 if (strstr(line
+45, "continue"))
178 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
181 static int find_common(int fd
[2], unsigned char *result_sha1
,
185 int count
= 0, flushes
= 0, retval
;
186 const unsigned char *sha1
;
187 unsigned in_vain
= 0;
188 int got_continue
= 0;
189 struct strbuf req_buf
= STRBUF_INIT
;
192 for_each_ref(clear_marks
, NULL
);
195 for_each_ref(rev_list_insert_ref
, NULL
);
198 for ( ; refs
; refs
= refs
->next
) {
199 unsigned char *remote
= refs
->old_sha1
;
200 const char *remote_hex
;
204 * If that object is complete (i.e. it is an ancestor of a
205 * local ref), we tell them we have it but do not have to
206 * tell them about its ancestors, which they already know
209 * We use lookup_object here because we are only
210 * interested in the case we *know* the object is
211 * reachable and we have already scanned it.
213 if (((o
= lookup_object(remote
)) != NULL
) &&
214 (o
->flags
& COMPLETE
)) {
218 remote_hex
= sha1_to_hex(remote
);
220 struct strbuf c
= STRBUF_INIT
;
221 if (multi_ack
) strbuf_addstr(&c
, " multi_ack");
222 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
223 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
224 if (args
.use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
225 if (args
.no_progress
) strbuf_addstr(&c
, " no-progress");
226 if (args
.include_tag
) strbuf_addstr(&c
, " include-tag");
227 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
228 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
231 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
236 strbuf_release(&req_buf
);
241 if (is_repository_shallow())
242 write_shallow_commits(&req_buf
, 1);
244 packet_buf_write(&req_buf
, "deepen %d", args
.depth
);
245 packet_buf_flush(&req_buf
);
247 safe_write(fd
[1], req_buf
.buf
, req_buf
.len
);
249 if (args
.depth
> 0) {
251 unsigned char sha1
[20];
253 while (packet_read_line(fd
[0], line
, sizeof(line
))) {
254 if (!prefixcmp(line
, "shallow ")) {
255 if (get_sha1_hex(line
+ 8, sha1
))
256 die("invalid shallow line: %s", line
);
257 register_shallow(sha1
);
260 if (!prefixcmp(line
, "unshallow ")) {
261 if (get_sha1_hex(line
+ 10, sha1
))
262 die("invalid unshallow line: %s", line
);
263 if (!lookup_object(sha1
))
264 die("object not found: %s", line
);
265 /* make sure that it is parsed as shallow */
266 if (!parse_object(sha1
))
267 die("error in object: %s", line
);
268 if (unregister_shallow(sha1
))
269 die("no shallow found: %s", line
);
272 die("expected shallow/unshallow, got %s", line
);
278 while ((sha1
= get_rev())) {
279 packet_write(fd
[1], "have %s\n", sha1_to_hex(sha1
));
281 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
283 if (!(31 & ++count
)) {
290 * We keep one window "ahead" of the other side, and
291 * will wait for an ACK only on the next one
297 ack
= get_ack(fd
[0], result_sha1
);
298 if (args
.verbose
&& ack
)
299 fprintf(stderr
, "got ack %d %s\n", ack
,
300 sha1_to_hex(result_sha1
));
306 } else if (ack
== 2) {
307 struct commit
*commit
=
308 lookup_commit(result_sha1
);
309 mark_common(commit
, 0, 1);
316 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
318 fprintf(stderr
, "giving up\n");
324 packet_write(fd
[1], "done\n");
326 fprintf(stderr
, "done\n");
331 strbuf_release(&req_buf
);
333 while (flushes
|| multi_ack
) {
334 int ack
= get_ack(fd
[0], result_sha1
);
337 fprintf(stderr
, "got ack (%d) %s\n", ack
,
338 sha1_to_hex(result_sha1
));
346 /* it is no error to fetch into a completely empty repo */
347 return count
? retval
: 0;
350 static struct commit_list
*complete
;
352 static int mark_complete(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
354 struct object
*o
= parse_object(sha1
);
356 while (o
&& o
->type
== OBJ_TAG
) {
357 struct tag
*t
= (struct tag
*) o
;
359 break; /* broken repository */
360 o
->flags
|= COMPLETE
;
361 o
= parse_object(t
->tagged
->sha1
);
363 if (o
&& o
->type
== OBJ_COMMIT
) {
364 struct commit
*commit
= (struct commit
*)o
;
365 commit
->object
.flags
|= COMPLETE
;
366 insert_by_date(commit
, &complete
);
371 static void mark_recent_complete_commits(unsigned long cutoff
)
373 while (complete
&& cutoff
<= complete
->item
->date
) {
375 fprintf(stderr
, "Marking %s as complete\n",
376 sha1_to_hex(complete
->item
->object
.sha1
));
377 pop_most_recent_commit(&complete
, COMPLETE
);
381 static void filter_refs(struct ref
**refs
, int nr_match
, char **match
)
383 struct ref
**return_refs
;
384 struct ref
*newlist
= NULL
;
385 struct ref
**newtail
= &newlist
;
386 struct ref
*ref
, *next
;
387 struct ref
*fastarray
[32];
389 if (nr_match
&& !args
.fetch_all
) {
390 if (ARRAY_SIZE(fastarray
) < nr_match
)
391 return_refs
= xcalloc(nr_match
, sizeof(struct ref
*));
393 return_refs
= fastarray
;
394 memset(return_refs
, 0, sizeof(struct ref
*) * nr_match
);
400 for (ref
= *refs
; ref
; ref
= next
) {
402 if (!memcmp(ref
->name
, "refs/", 5) &&
403 check_ref_format(ref
->name
+ 5))
405 else if (args
.fetch_all
&&
406 (!args
.depth
|| prefixcmp(ref
->name
, "refs/tags/") )) {
409 newtail
= &ref
->next
;
413 int order
= path_match(ref
->name
, nr_match
, match
);
415 return_refs
[order
-1] = ref
;
416 continue; /* we will link it later */
422 if (!args
.fetch_all
) {
424 for (i
= 0; i
< nr_match
; i
++) {
425 ref
= return_refs
[i
];
429 newtail
= &ref
->next
;
432 if (return_refs
!= fastarray
)
438 static int everything_local(struct ref
**refs
, int nr_match
, char **match
)
442 unsigned long cutoff
= 0;
444 save_commit_buffer
= 0;
446 for (ref
= *refs
; ref
; ref
= ref
->next
) {
449 o
= parse_object(ref
->old_sha1
);
453 /* We already have it -- which may mean that we were
454 * in sync with the other side at some time after
455 * that (it is OK if we guess wrong here).
457 if (o
->type
== OBJ_COMMIT
) {
458 struct commit
*commit
= (struct commit
*)o
;
459 if (!cutoff
|| cutoff
< commit
->date
)
460 cutoff
= commit
->date
;
465 for_each_ref(mark_complete
, NULL
);
467 mark_recent_complete_commits(cutoff
);
471 * Mark all complete remote refs as common refs.
472 * Don't mark them common yet; the server has to be told so first.
474 for (ref
= *refs
; ref
; ref
= ref
->next
) {
475 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
478 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
481 if (!(o
->flags
& SEEN
)) {
482 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
484 mark_common((struct commit
*)o
, 1, 1);
488 filter_refs(refs
, nr_match
, match
);
490 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
491 const unsigned char *remote
= ref
->old_sha1
;
492 unsigned char local
[20];
495 o
= lookup_object(remote
);
496 if (!o
|| !(o
->flags
& COMPLETE
)) {
501 "want %s (%s)\n", sha1_to_hex(remote
),
506 hashcpy(ref
->new_sha1
, local
);
510 "already have %s (%s)\n", sha1_to_hex(remote
),
516 static int sideband_demux(int fd
, void *data
)
520 int ret
= recv_sideband("fetch-pack", xd
[0], fd
);
525 static int get_pack(int xd
[2], char **pack_lockfile
)
528 const char *argv
[20];
532 int do_keep
= args
.keep_pack
;
533 struct child_process cmd
;
535 memset(&demux
, 0, sizeof(demux
));
537 /* xd[] is talking with upload-pack; subprocess reads from
538 * xd[0], spits out band#2 to stderr, and feeds us band#1
539 * through demux->out.
541 demux
.proc
= sideband_demux
;
543 if (start_async(&demux
))
544 die("fetch-pack: unable to fork off sideband"
550 memset(&cmd
, 0, sizeof(cmd
));
554 if (!args
.keep_pack
&& unpack_limit
) {
555 struct pack_header header
;
557 if (read_pack_header(demux
.out
, &header
))
558 die("protocol error: bad pack header");
559 snprintf(hdr_arg
, sizeof(hdr_arg
),
560 "--pack_header=%"PRIu32
",%"PRIu32
,
561 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
562 if (ntohl(header
.hdr_entries
) < unpack_limit
)
571 *av
++ = "index-pack";
573 if (!args
.quiet
&& !args
.no_progress
)
575 if (args
.use_thin_pack
)
576 *av
++ = "--fix-thin";
577 if (args
.lock_pack
|| unpack_limit
) {
578 int s
= sprintf(keep_arg
,
579 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
580 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
581 strcpy(keep_arg
+ s
, "localhost");
586 *av
++ = "unpack-objects";
596 if (start_command(&cmd
))
597 die("fetch-pack: unable to fork off %s", argv
[0]);
598 if (do_keep
&& pack_lockfile
) {
599 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
603 if (finish_command(&cmd
))
604 die("%s failed", argv
[0]);
605 if (use_sideband
&& finish_async(&demux
))
606 die("error in sideband demultiplexer");
610 static struct ref
*do_fetch_pack(int fd
[2],
611 const struct ref
*orig_ref
,
614 char **pack_lockfile
)
616 struct ref
*ref
= copy_ref_list(orig_ref
);
617 unsigned char sha1
[20];
619 if (is_repository_shallow() && !server_supports("shallow"))
620 die("Server does not support shallow clients");
621 if (server_supports("multi_ack")) {
623 fprintf(stderr
, "Server supports multi_ack\n");
626 if (server_supports("side-band-64k")) {
628 fprintf(stderr
, "Server supports side-band-64k\n");
631 else if (server_supports("side-band")) {
633 fprintf(stderr
, "Server supports side-band\n");
636 if (server_supports("ofs-delta")) {
638 fprintf(stderr
, "Server supports ofs-delta\n");
640 prefer_ofs_delta
= 0;
641 if (everything_local(&ref
, nr_match
, match
)) {
645 if (find_common(fd
, sha1
, ref
) < 0)
647 /* When cloning, it is not unusual to have
650 warning("no common commits");
652 if (get_pack(fd
, pack_lockfile
))
653 die("git fetch-pack: fetch failed.");
659 static int remove_duplicates(int nr_heads
, char **heads
)
663 for (src
= dst
= 0; src
< nr_heads
; src
++) {
664 /* If heads[src] is different from any of
665 * heads[0..dst], push it in.
668 for (i
= 0; i
< dst
; i
++) {
669 if (!strcmp(heads
[i
], heads
[src
]))
675 heads
[dst
] = heads
[src
];
681 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
683 if (strcmp(var
, "fetch.unpacklimit") == 0) {
684 fetch_unpack_limit
= git_config_int(var
, value
);
688 if (strcmp(var
, "transfer.unpacklimit") == 0) {
689 transfer_unpack_limit
= git_config_int(var
, value
);
693 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
694 prefer_ofs_delta
= git_config_bool(var
, value
);
698 return git_default_config(var
, value
, cb
);
701 static struct lock_file lock
;
703 static void fetch_pack_setup(void)
705 static int did_setup
;
708 git_config(fetch_pack_config
, NULL
);
709 if (0 <= transfer_unpack_limit
)
710 unpack_limit
= transfer_unpack_limit
;
711 else if (0 <= fetch_unpack_limit
)
712 unpack_limit
= fetch_unpack_limit
;
716 int cmd_fetch_pack(int argc
, const char **argv
, const char *prefix
)
718 int i
, ret
, nr_heads
;
719 struct ref
*ref
= NULL
;
720 char *dest
= NULL
, **heads
;
722 struct child_process
*conn
;
726 for (i
= 1; i
< argc
; i
++) {
727 const char *arg
= argv
[i
];
730 if (!prefixcmp(arg
, "--upload-pack=")) {
731 args
.uploadpack
= arg
+ 14;
734 if (!prefixcmp(arg
, "--exec=")) {
735 args
.uploadpack
= arg
+ 7;
738 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
742 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
743 args
.lock_pack
= args
.keep_pack
;
747 if (!strcmp("--thin", arg
)) {
748 args
.use_thin_pack
= 1;
751 if (!strcmp("--include-tag", arg
)) {
752 args
.include_tag
= 1;
755 if (!strcmp("--all", arg
)) {
759 if (!strcmp("-v", arg
)) {
763 if (!prefixcmp(arg
, "--depth=")) {
764 args
.depth
= strtol(arg
+ 8, NULL
, 0);
767 if (!strcmp("--no-progress", arg
)) {
768 args
.no_progress
= 1;
771 usage(fetch_pack_usage
);
774 heads
= (char **)(argv
+ i
+ 1);
775 nr_heads
= argc
- i
- 1;
779 usage(fetch_pack_usage
);
781 conn
= git_connect(fd
, (char *)dest
, args
.uploadpack
,
782 args
.verbose
? CONNECT_VERBOSE
: 0);
784 get_remote_heads(fd
[0], &ref
, 0, NULL
, 0, NULL
);
786 ref
= fetch_pack(&args
, fd
, conn
, ref
, dest
, nr_heads
, heads
, NULL
);
789 if (finish_connect(conn
))
796 if (!ret
&& nr_heads
) {
797 /* If the heads to pull were given, we should have
798 * consumed all of them by matching the remote.
799 * Otherwise, 'git fetch remote no-such-ref' would
800 * silently succeed without issuing an error.
802 for (i
= 0; i
< nr_heads
; i
++)
803 if (heads
[i
] && heads
[i
][0]) {
804 error("no such remote ref %s", heads
[i
]);
810 sha1_to_hex(ref
->old_sha1
), ref
->name
);
817 struct ref
*fetch_pack(struct fetch_pack_args
*my_args
,
818 int fd
[], struct child_process
*conn
,
819 const struct ref
*ref
,
823 char **pack_lockfile
)
829 if (&args
!= my_args
)
830 memcpy(&args
, my_args
, sizeof(args
));
831 if (args
.depth
> 0) {
832 if (stat(git_path("shallow"), &st
))
836 if (heads
&& nr_heads
)
837 nr_heads
= remove_duplicates(nr_heads
, heads
);
840 die("no matching remote head");
842 ref_cpy
= do_fetch_pack(fd
, ref
, nr_heads
, heads
, pack_lockfile
);
844 if (args
.depth
> 0) {
845 struct cache_time mtime
;
846 struct strbuf sb
= STRBUF_INIT
;
847 char *shallow
= git_path("shallow");
850 mtime
.sec
= st
.st_mtime
;
851 mtime
.nsec
= ST_MTIME_NSEC(st
);
852 if (stat(shallow
, &st
)) {
854 die("shallow file was removed during fetch");
855 } else if (st
.st_mtime
!= mtime
.sec
857 || ST_MTIME_NSEC(st
) != mtime
.nsec
860 die("shallow file was changed during fetch");
862 fd
= hold_lock_file_for_update(&lock
, shallow
,
864 if (!write_shallow_commits(&sb
, 0)
865 || write_in_full(fd
, sb
.buf
, sb
.len
) != sb
.len
) {
866 unlink_or_warn(shallow
);
867 rollback_lock_file(&lock
);
869 commit_lock_file(&lock
);
874 reprepare_packed_git();