11 static int transfer_unpack_limit
= -1;
12 static int fetch_unpack_limit
= -1;
13 static int unpack_limit
= 100;
18 static const char fetch_pack_usage
[] =
19 "git-fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--upload-pack=<git-upload-pack>] [--depth=<n>] [-v] [<host>:]<directory> [<refs>...]";
20 static const char *uploadpack
= "git-upload-pack";
22 #define COMPLETE (1U << 0)
23 #define COMMON (1U << 1)
24 #define COMMON_REF (1U << 2)
25 #define SEEN (1U << 3)
26 #define POPPED (1U << 4)
29 * After sending this many "have"s if we do not get any new ACK , we
30 * give up traversing our history.
32 #define MAX_IN_VAIN 256
34 static struct commit_list
*rev_list
;
35 static int non_common_revs
, multi_ack
, use_thin_pack
, use_sideband
;
37 static void rev_list_push(struct commit
*commit
, int mark
)
39 if (!(commit
->object
.flags
& mark
)) {
40 commit
->object
.flags
|= mark
;
42 if (!(commit
->object
.parsed
))
45 insert_by_date(commit
, &rev_list
);
47 if (!(commit
->object
.flags
& COMMON
))
52 static int rev_list_insert_ref(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
54 struct object
*o
= deref_tag(parse_object(sha1
), path
, 0);
56 if (o
&& o
->type
== OBJ_COMMIT
)
57 rev_list_push((struct commit
*)o
, SEEN
);
63 This function marks a rev and its ancestors as common.
64 In some cases, it is desirable to mark only the ancestors (for example
65 when only the server does not yet know that they are common).
68 static void mark_common(struct commit
*commit
,
69 int ancestors_only
, int dont_parse
)
71 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
72 struct object
*o
= (struct object
*)commit
;
77 if (!(o
->flags
& SEEN
))
78 rev_list_push(commit
, SEEN
);
80 struct commit_list
*parents
;
82 if (!ancestors_only
&& !(o
->flags
& POPPED
))
84 if (!o
->parsed
&& !dont_parse
)
87 for (parents
= commit
->parents
;
89 parents
= parents
->next
)
90 mark_common(parents
->item
, 0, dont_parse
);
96 Get the next rev to send, ignoring the common.
99 static const unsigned char* get_rev(void)
101 struct commit
*commit
= NULL
;
103 while (commit
== NULL
) {
105 struct commit_list
* parents
;
107 if (rev_list
== NULL
|| non_common_revs
== 0)
110 commit
= rev_list
->item
;
111 if (!(commit
->object
.parsed
))
112 parse_commit(commit
);
113 commit
->object
.flags
|= POPPED
;
114 if (!(commit
->object
.flags
& COMMON
))
117 parents
= commit
->parents
;
119 if (commit
->object
.flags
& COMMON
) {
120 /* do not send "have", and ignore ancestors */
122 mark
= COMMON
| SEEN
;
123 } else if (commit
->object
.flags
& COMMON_REF
)
124 /* send "have", and ignore ancestors */
125 mark
= COMMON
| SEEN
;
127 /* send "have", also for its ancestors */
131 if (!(parents
->item
->object
.flags
& SEEN
))
132 rev_list_push(parents
->item
, mark
);
134 mark_common(parents
->item
, 1, 0);
135 parents
= parents
->next
;
138 rev_list
= rev_list
->next
;
141 return commit
->object
.sha1
;
144 static int find_common(int fd
[2], unsigned char *result_sha1
,
148 int count
= 0, flushes
= 0, retval
;
149 const unsigned char *sha1
;
150 unsigned in_vain
= 0;
151 int got_continue
= 0;
153 for_each_ref(rev_list_insert_ref
, NULL
);
156 for ( ; refs
; refs
= refs
->next
) {
157 unsigned char *remote
= refs
->old_sha1
;
161 * If that object is complete (i.e. it is an ancestor of a
162 * local ref), we tell them we have it but do not have to
163 * tell them about its ancestors, which they already know
166 * We use lookup_object here because we are only
167 * interested in the case we *know* the object is
168 * reachable and we have already scanned it.
170 if (((o
= lookup_object(remote
)) != NULL
) &&
171 (o
->flags
& COMPLETE
)) {
176 packet_write(fd
[1], "want %s%s%s%s%s%s\n",
178 (multi_ack
? " multi_ack" : ""),
179 (use_sideband
== 2 ? " side-band-64k" : ""),
180 (use_sideband
== 1 ? " side-band" : ""),
181 (use_thin_pack
? " thin-pack" : ""),
184 packet_write(fd
[1], "want %s\n", sha1_to_hex(remote
));
187 if (is_repository_shallow())
188 write_shallow_commits(fd
[1], 1);
190 packet_write(fd
[1], "deepen %d", depth
);
197 unsigned char sha1
[20];
200 while ((len
= packet_read_line(fd
[0], line
, sizeof(line
)))) {
201 if (!prefixcmp(line
, "shallow ")) {
202 if (get_sha1_hex(line
+ 8, sha1
))
203 die("invalid shallow line: %s", line
);
204 register_shallow(sha1
);
207 if (!prefixcmp(line
, "unshallow ")) {
208 if (get_sha1_hex(line
+ 10, sha1
))
209 die("invalid unshallow line: %s", line
);
210 if (!lookup_object(sha1
))
211 die("object not found: %s", line
);
212 /* make sure that it is parsed as shallow */
214 if (unregister_shallow(sha1
))
215 die("no shallow found: %s", line
);
218 die("expected shallow/unshallow, got %s", line
);
224 while ((sha1
= get_rev())) {
225 packet_write(fd
[1], "have %s\n", sha1_to_hex(sha1
));
227 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
229 if (!(31 & ++count
)) {
236 * We keep one window "ahead" of the other side, and
237 * will wait for an ACK only on the next one
243 ack
= get_ack(fd
[0], result_sha1
);
245 fprintf(stderr
, "got ack %d %s\n", ack
,
246 sha1_to_hex(result_sha1
));
252 } else if (ack
== 2) {
253 struct commit
*commit
=
254 lookup_commit(result_sha1
);
255 mark_common(commit
, 0, 1);
262 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
264 fprintf(stderr
, "giving up\n");
270 packet_write(fd
[1], "done\n");
272 fprintf(stderr
, "done\n");
277 while (flushes
|| multi_ack
) {
278 int ack
= get_ack(fd
[0], result_sha1
);
281 fprintf(stderr
, "got ack (%d) %s\n", ack
,
282 sha1_to_hex(result_sha1
));
293 static struct commit_list
*complete
;
295 static int mark_complete(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
297 struct object
*o
= parse_object(sha1
);
299 while (o
&& o
->type
== OBJ_TAG
) {
300 struct tag
*t
= (struct tag
*) o
;
302 break; /* broken repository */
303 o
->flags
|= COMPLETE
;
304 o
= parse_object(t
->tagged
->sha1
);
306 if (o
&& o
->type
== OBJ_COMMIT
) {
307 struct commit
*commit
= (struct commit
*)o
;
308 commit
->object
.flags
|= COMPLETE
;
309 insert_by_date(commit
, &complete
);
314 static void mark_recent_complete_commits(unsigned long cutoff
)
316 while (complete
&& cutoff
<= complete
->item
->date
) {
318 fprintf(stderr
, "Marking %s as complete\n",
319 sha1_to_hex(complete
->item
->object
.sha1
));
320 pop_most_recent_commit(&complete
, COMPLETE
);
324 static void filter_refs(struct ref
**refs
, int nr_match
, char **match
)
326 struct ref
**return_refs
;
327 struct ref
*newlist
= NULL
;
328 struct ref
**newtail
= &newlist
;
329 struct ref
*ref
, *next
;
330 struct ref
*fastarray
[32];
332 if (nr_match
&& !fetch_all
) {
333 if (ARRAY_SIZE(fastarray
) < nr_match
)
334 return_refs
= xcalloc(nr_match
, sizeof(struct ref
*));
336 return_refs
= fastarray
;
337 memset(return_refs
, 0, sizeof(struct ref
*) * nr_match
);
343 for (ref
= *refs
; ref
; ref
= next
) {
345 if (!memcmp(ref
->name
, "refs/", 5) &&
346 check_ref_format(ref
->name
+ 5))
348 else if (fetch_all
&&
349 (!depth
|| prefixcmp(ref
->name
, "refs/tags/") )) {
352 newtail
= &ref
->next
;
356 int order
= path_match(ref
->name
, nr_match
, match
);
358 return_refs
[order
-1] = ref
;
359 continue; /* we will link it later */
367 for (i
= 0; i
< nr_match
; i
++) {
368 ref
= return_refs
[i
];
372 newtail
= &ref
->next
;
375 if (return_refs
!= fastarray
)
381 static int everything_local(struct ref
**refs
, int nr_match
, char **match
)
385 unsigned long cutoff
= 0;
387 track_object_refs
= 0;
388 save_commit_buffer
= 0;
390 for (ref
= *refs
; ref
; ref
= ref
->next
) {
393 o
= parse_object(ref
->old_sha1
);
397 /* We already have it -- which may mean that we were
398 * in sync with the other side at some time after
399 * that (it is OK if we guess wrong here).
401 if (o
->type
== OBJ_COMMIT
) {
402 struct commit
*commit
= (struct commit
*)o
;
403 if (!cutoff
|| cutoff
< commit
->date
)
404 cutoff
= commit
->date
;
409 for_each_ref(mark_complete
, NULL
);
411 mark_recent_complete_commits(cutoff
);
415 * Mark all complete remote refs as common refs.
416 * Don't mark them common yet; the server has to be told so first.
418 for (ref
= *refs
; ref
; ref
= ref
->next
) {
419 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
422 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
425 if (!(o
->flags
& SEEN
)) {
426 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
428 mark_common((struct commit
*)o
, 1, 1);
432 filter_refs(refs
, nr_match
, match
);
434 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
435 const unsigned char *remote
= ref
->old_sha1
;
436 unsigned char local
[20];
439 o
= lookup_object(remote
);
440 if (!o
|| !(o
->flags
& COMPLETE
)) {
445 "want %s (%s)\n", sha1_to_hex(remote
),
450 hashcpy(ref
->new_sha1
, local
);
454 "already have %s (%s)\n", sha1_to_hex(remote
),
460 static pid_t
setup_sideband(int fd
[2], int xd
[2])
469 /* xd[] is talking with upload-pack; subprocess reads from
470 * xd[0], spits out band#2 to stderr, and feeds us band#1
474 die("fetch-pack: unable to set up pipe");
477 die("fetch-pack: unable to fork off sideband demultiplexer");
483 if (recv_sideband("fetch-pack", xd
[0], fd
[1], 2))
493 static int get_pack(int xd
[2])
498 const char *argv
[20];
502 int do_keep
= keep_pack
;
504 side_pid
= setup_sideband(fd
, xd
);
509 struct pack_header header
;
511 if (read_pack_header(fd
[0], &header
))
512 die("protocol error: bad pack header");
513 snprintf(hdr_arg
, sizeof(hdr_arg
), "--pack_header=%u,%u",
514 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
515 if (ntohl(header
.hdr_entries
) < unpack_limit
)
522 *av
++ = "index-pack";
527 *av
++ = "--fix-thin";
528 if (keep_pack
> 1 || unpack_limit
) {
529 int s
= sprintf(keep_arg
,
530 "--keep=fetch-pack %d on ", getpid());
531 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
532 strcpy(keep_arg
+ s
, "localhost");
537 *av
++ = "unpack-objects";
545 pid
= spawnv_git_cmd(argv
, fd
, NULL
);
547 die("fetch-pack: unable to fork off %s", argv
[0]);
549 while (waitpid(pid
, &status
, 0) < 0) {
551 die("waiting for %s: %s", argv
[0], strerror(errno
));
553 if (WIFEXITED(status
)) {
554 int code
= WEXITSTATUS(status
);
556 die("%s died with error code %d", argv
[0], code
);
559 if (WIFSIGNALED(status
)) {
560 int sig
= WTERMSIG(status
);
561 die("%s died of signal %d", argv
[0], sig
);
563 die("%s died of unnatural causes %d", argv
[0], status
);
566 static int fetch_pack(int fd
[2], int nr_match
, char **match
)
569 unsigned char sha1
[20];
571 get_remote_heads(fd
[0], &ref
, 0, NULL
, 0);
572 if (is_repository_shallow() && !server_supports("shallow"))
573 die("Server does not support shallow clients");
574 if (server_supports("multi_ack")) {
576 fprintf(stderr
, "Server supports multi_ack\n");
580 if (server_supports("side-band-64k")) {
582 fprintf(stderr
, "Server supports side-band-64k\n");
585 else if (server_supports("side-band")) {
587 fprintf(stderr
, "Server supports side-band\n");
593 die("no matching remote head");
595 if (everything_local(&ref
, nr_match
, match
)) {
599 if (find_common(fd
, sha1
, ref
) < 0)
601 /* When cloning, it is not unusual to have
604 fprintf(stderr
, "warning: no common commits\n");
607 die("git-fetch-pack: fetch failed.");
612 sha1_to_hex(ref
->old_sha1
), ref
->name
);
618 static int remove_duplicates(int nr_heads
, char **heads
)
622 for (src
= dst
= 0; src
< nr_heads
; src
++) {
623 /* If heads[src] is different from any of
624 * heads[0..dst], push it in.
627 for (i
= 0; i
< dst
; i
++) {
628 if (!strcmp(heads
[i
], heads
[src
]))
634 heads
[dst
] = heads
[src
];
641 static int fetch_pack_config(const char *var
, const char *value
)
643 if (strcmp(var
, "fetch.unpacklimit") == 0) {
644 fetch_unpack_limit
= git_config_int(var
, value
);
648 if (strcmp(var
, "transfer.unpacklimit") == 0) {
649 transfer_unpack_limit
= git_config_int(var
, value
);
653 return git_default_config(var
, value
);
656 static struct lock_file lock
;
658 int main(int argc
, char **argv
)
660 int i
, ret
, nr_heads
;
661 char *dest
= NULL
, **heads
;
666 setup_git_directory();
667 git_config(fetch_pack_config
);
669 if (0 <= transfer_unpack_limit
)
670 unpack_limit
= transfer_unpack_limit
;
671 else if (0 <= fetch_unpack_limit
)
672 unpack_limit
= fetch_unpack_limit
;
676 for (i
= 1; i
< argc
; i
++) {
680 if (!prefixcmp(arg
, "--upload-pack=")) {
681 uploadpack
= arg
+ 14;
684 if (!prefixcmp(arg
, "--exec=")) {
685 uploadpack
= arg
+ 7;
688 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
692 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
697 if (!strcmp("--thin", arg
)) {
701 if (!strcmp("--all", arg
)) {
705 if (!strcmp("-v", arg
)) {
709 if (!prefixcmp(arg
, "--depth=")) {
710 depth
= strtol(arg
+ 8, NULL
, 0);
711 if (stat(git_path("shallow"), &st
))
715 usage(fetch_pack_usage
);
718 heads
= argv
+ i
+ 1;
719 nr_heads
= argc
- i
- 1;
723 usage(fetch_pack_usage
);
724 pid
= git_connect(fd
, dest
, uploadpack
);
727 if (heads
&& nr_heads
)
728 nr_heads
= remove_duplicates(nr_heads
, heads
);
729 ret
= fetch_pack(fd
, nr_heads
, heads
);
732 ret
|= finish_connect(pid
);
734 if (!ret
&& nr_heads
) {
735 /* If the heads to pull were given, we should have
736 * consumed all of them by matching the remote.
737 * Otherwise, 'git-fetch remote no-such-ref' would
738 * silently succeed without issuing an error.
740 for (i
= 0; i
< nr_heads
; i
++)
741 if (heads
[i
] && heads
[i
][0]) {
742 error("no such remote ref %s", heads
[i
]);
747 if (!ret
&& depth
> 0) {
748 struct cache_time mtime
;
749 char *shallow
= git_path("shallow");
752 mtime
.sec
= st
.st_mtime
;
754 mtime
.usec
= st
.st_mtim
.usec
;
756 if (stat(shallow
, &st
)) {
758 die("shallow file was removed during fetch");
759 } else if (st
.st_mtime
!= mtime
.sec
761 || st
.st_mtim
.usec
!= mtime
.usec
764 die("shallow file was changed during fetch");
766 fd
= hold_lock_file_for_update(&lock
, shallow
, 1);
767 if (!write_shallow_commits(fd
, 0)) {
769 rollback_lock_file(&lock
);
772 commit_lock_file(&lock
);