9 #include "fetch-pack.h"
11 #include "run-command.h"
12 #include "transport.h"
15 static int transfer_unpack_limit
= -1;
16 static int fetch_unpack_limit
= -1;
17 static int unpack_limit
= 100;
18 static int prefer_ofs_delta
= 1;
20 static int fetch_fsck_objects
= -1;
21 static int transfer_fsck_objects
= -1;
22 static int agent_supported
;
24 static const char fetch_pack_usage
[] =
25 "git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] "
26 "[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
27 "[--no-progress] [-v] [<host>:]<directory> [<refs>...]";
29 #define COMPLETE (1U << 0)
30 #define COMMON (1U << 1)
31 #define COMMON_REF (1U << 2)
32 #define SEEN (1U << 3)
33 #define POPPED (1U << 4)
38 * After sending this many "have"s if we do not get any new ACK , we
39 * give up traversing our history.
41 #define MAX_IN_VAIN 256
43 static struct commit_list
*rev_list
;
44 static int non_common_revs
, multi_ack
, use_sideband
;
46 static void rev_list_push(struct commit
*commit
, int mark
)
48 if (!(commit
->object
.flags
& mark
)) {
49 commit
->object
.flags
|= mark
;
51 if (!(commit
->object
.parsed
))
52 if (parse_commit(commit
))
55 commit_list_insert_by_date(commit
, &rev_list
);
57 if (!(commit
->object
.flags
& COMMON
))
62 static int rev_list_insert_ref(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
64 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
66 if (o
&& o
->type
== OBJ_COMMIT
)
67 rev_list_push((struct commit
*)o
, SEEN
);
72 static int clear_marks(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
74 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
76 if (o
&& o
->type
== OBJ_COMMIT
)
77 clear_commit_marks((struct commit
*)o
,
78 COMMON
| COMMON_REF
| SEEN
| POPPED
);
83 This function marks a rev and its ancestors as common.
84 In some cases, it is desirable to mark only the ancestors (for example
85 when only the server does not yet know that they are common).
88 static void mark_common(struct commit
*commit
,
89 int ancestors_only
, int dont_parse
)
91 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
92 struct object
*o
= (struct object
*)commit
;
97 if (!(o
->flags
& SEEN
))
98 rev_list_push(commit
, SEEN
);
100 struct commit_list
*parents
;
102 if (!ancestors_only
&& !(o
->flags
& POPPED
))
104 if (!o
->parsed
&& !dont_parse
)
105 if (parse_commit(commit
))
108 for (parents
= commit
->parents
;
110 parents
= parents
->next
)
111 mark_common(parents
->item
, 0, dont_parse
);
117 Get the next rev to send, ignoring the common.
120 static const unsigned char *get_rev(void)
122 struct commit
*commit
= NULL
;
124 while (commit
== NULL
) {
126 struct commit_list
*parents
;
128 if (rev_list
== NULL
|| non_common_revs
== 0)
131 commit
= rev_list
->item
;
132 if (!commit
->object
.parsed
)
133 parse_commit(commit
);
134 parents
= commit
->parents
;
136 commit
->object
.flags
|= POPPED
;
137 if (!(commit
->object
.flags
& COMMON
))
140 if (commit
->object
.flags
& COMMON
) {
141 /* do not send "have", and ignore ancestors */
143 mark
= COMMON
| SEEN
;
144 } else if (commit
->object
.flags
& COMMON_REF
)
145 /* send "have", and ignore ancestors */
146 mark
= COMMON
| SEEN
;
148 /* send "have", also for its ancestors */
152 if (!(parents
->item
->object
.flags
& SEEN
))
153 rev_list_push(parents
->item
, mark
);
155 mark_common(parents
->item
, 1, 0);
156 parents
= parents
->next
;
159 rev_list
= rev_list
->next
;
162 return commit
->object
.sha1
;
173 static void consume_shallow_list(struct fetch_pack_args
*args
, int fd
)
175 if (args
->stateless_rpc
&& args
->depth
> 0) {
176 /* If we sent a depth we will get back "duplicate"
177 * shallow and unshallow commands every time there
178 * is a block of have lines exchanged.
181 while (packet_read_line(fd
, line
, sizeof(line
))) {
182 if (!prefixcmp(line
, "shallow "))
184 if (!prefixcmp(line
, "unshallow "))
186 die("git fetch-pack: expected shallow list");
191 struct write_shallow_data
{
193 int use_pack_protocol
;
197 static int write_one_shallow(const struct commit_graft
*graft
, void *cb_data
)
199 struct write_shallow_data
*data
= cb_data
;
200 const char *hex
= sha1_to_hex(graft
->sha1
);
202 if (data
->use_pack_protocol
)
203 packet_buf_write(data
->out
, "shallow %s", hex
);
205 strbuf_addstr(data
->out
, hex
);
206 strbuf_addch(data
->out
, '\n');
211 static int write_shallow_commits(struct strbuf
*out
, int use_pack_protocol
)
213 struct write_shallow_data data
;
215 data
.use_pack_protocol
= use_pack_protocol
;
217 for_each_commit_graft(write_one_shallow
, &data
);
221 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
223 static char line
[1000];
224 int len
= packet_read_line(fd
, line
, sizeof(line
));
227 die("git fetch-pack: expected ACK/NAK, got EOF");
228 if (line
[len
-1] == '\n')
230 if (!strcmp(line
, "NAK"))
232 if (!prefixcmp(line
, "ACK ")) {
233 if (!get_sha1_hex(line
+4, result_sha1
)) {
234 if (strstr(line
+45, "continue"))
236 if (strstr(line
+45, "common"))
238 if (strstr(line
+45, "ready"))
243 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
246 static void send_request(struct fetch_pack_args
*args
,
247 int fd
, struct strbuf
*buf
)
249 if (args
->stateless_rpc
) {
250 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
253 safe_write(fd
, buf
->buf
, buf
->len
);
256 static void insert_one_alternate_ref(const struct ref
*ref
, void *unused
)
258 rev_list_insert_ref(NULL
, ref
->old_sha1
, 0, NULL
);
261 #define INITIAL_FLUSH 16
262 #define PIPESAFE_FLUSH 32
263 #define LARGE_FLUSH 1024
265 static int next_flush(struct fetch_pack_args
*args
, int count
)
267 int flush_limit
= args
->stateless_rpc
? LARGE_FLUSH
: PIPESAFE_FLUSH
;
269 if (count
< flush_limit
)
272 count
+= flush_limit
;
276 static int find_common(struct fetch_pack_args
*args
,
277 int fd
[2], unsigned char *result_sha1
,
281 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
282 const unsigned char *sha1
;
283 unsigned in_vain
= 0;
284 int got_continue
= 0;
286 struct strbuf req_buf
= STRBUF_INIT
;
287 size_t state_len
= 0;
289 if (args
->stateless_rpc
&& multi_ack
== 1)
290 die("--stateless-rpc requires multi_ack_detailed");
292 for_each_ref(clear_marks
, NULL
);
295 for_each_ref(rev_list_insert_ref
, NULL
);
296 for_each_alternate_ref(insert_one_alternate_ref
, NULL
);
299 for ( ; refs
; refs
= refs
->next
) {
300 unsigned char *remote
= refs
->old_sha1
;
301 const char *remote_hex
;
305 * If that object is complete (i.e. it is an ancestor of a
306 * local ref), we tell them we have it but do not have to
307 * tell them about its ancestors, which they already know
310 * We use lookup_object here because we are only
311 * interested in the case we *know* the object is
312 * reachable and we have already scanned it.
314 if (((o
= lookup_object(remote
)) != NULL
) &&
315 (o
->flags
& COMPLETE
)) {
319 remote_hex
= sha1_to_hex(remote
);
321 struct strbuf c
= STRBUF_INIT
;
322 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
323 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
324 if (no_done
) strbuf_addstr(&c
, " no-done");
325 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
326 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
327 if (args
->use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
328 if (args
->no_progress
) strbuf_addstr(&c
, " no-progress");
329 if (args
->include_tag
) strbuf_addstr(&c
, " include-tag");
330 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
331 if (agent_supported
) strbuf_addf(&c
, " agent=%s",
332 git_user_agent_sanitized());
333 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
336 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
341 strbuf_release(&req_buf
);
346 if (is_repository_shallow())
347 write_shallow_commits(&req_buf
, 1);
349 packet_buf_write(&req_buf
, "deepen %d", args
->depth
);
350 packet_buf_flush(&req_buf
);
351 state_len
= req_buf
.len
;
353 if (args
->depth
> 0) {
355 unsigned char sha1
[20];
357 send_request(args
, fd
[1], &req_buf
);
358 while (packet_read_line(fd
[0], line
, sizeof(line
))) {
359 if (!prefixcmp(line
, "shallow ")) {
360 if (get_sha1_hex(line
+ 8, sha1
))
361 die("invalid shallow line: %s", line
);
362 register_shallow(sha1
);
365 if (!prefixcmp(line
, "unshallow ")) {
366 if (get_sha1_hex(line
+ 10, sha1
))
367 die("invalid unshallow line: %s", line
);
368 if (!lookup_object(sha1
))
369 die("object not found: %s", line
);
370 /* make sure that it is parsed as shallow */
371 if (!parse_object(sha1
))
372 die("error in object: %s", line
);
373 if (unregister_shallow(sha1
))
374 die("no shallow found: %s", line
);
377 die("expected shallow/unshallow, got %s", line
);
379 } else if (!args
->stateless_rpc
)
380 send_request(args
, fd
[1], &req_buf
);
382 if (!args
->stateless_rpc
) {
383 /* If we aren't using the stateless-rpc interface
384 * we don't need to retain the headers.
386 strbuf_setlen(&req_buf
, 0);
392 while ((sha1
= get_rev())) {
393 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
395 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
397 if (flush_at
<= ++count
) {
400 packet_buf_flush(&req_buf
);
401 send_request(args
, fd
[1], &req_buf
);
402 strbuf_setlen(&req_buf
, state_len
);
404 flush_at
= next_flush(args
, count
);
407 * We keep one window "ahead" of the other side, and
408 * will wait for an ACK only on the next one
410 if (!args
->stateless_rpc
&& count
== INITIAL_FLUSH
)
413 consume_shallow_list(args
, fd
[0]);
415 ack
= get_ack(fd
[0], result_sha1
);
416 if (args
->verbose
&& ack
)
417 fprintf(stderr
, "got ack %d %s\n", ack
,
418 sha1_to_hex(result_sha1
));
428 struct commit
*commit
=
429 lookup_commit(result_sha1
);
431 die("invalid commit %s", sha1_to_hex(result_sha1
));
432 if (args
->stateless_rpc
434 && !(commit
->object
.flags
& COMMON
)) {
435 /* We need to replay the have for this object
436 * on the next RPC request so the peer knows
437 * it is in common with us.
439 const char *hex
= sha1_to_hex(result_sha1
);
440 packet_buf_write(&req_buf
, "have %s\n", hex
);
441 state_len
= req_buf
.len
;
443 mark_common(commit
, 0, 1);
447 if (ack
== ACK_ready
) {
456 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
458 fprintf(stderr
, "giving up\n");
464 if (!got_ready
|| !no_done
) {
465 packet_buf_write(&req_buf
, "done\n");
466 send_request(args
, fd
[1], &req_buf
);
469 fprintf(stderr
, "done\n");
474 strbuf_release(&req_buf
);
476 consume_shallow_list(args
, fd
[0]);
477 while (flushes
|| multi_ack
) {
478 int ack
= get_ack(fd
[0], result_sha1
);
481 fprintf(stderr
, "got ack (%d) %s\n", ack
,
482 sha1_to_hex(result_sha1
));
490 /* it is no error to fetch into a completely empty repo */
491 return count
? retval
: 0;
494 static struct commit_list
*complete
;
496 static int mark_complete(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
498 struct object
*o
= parse_object(sha1
);
500 while (o
&& o
->type
== OBJ_TAG
) {
501 struct tag
*t
= (struct tag
*) o
;
503 break; /* broken repository */
504 o
->flags
|= COMPLETE
;
505 o
= parse_object(t
->tagged
->sha1
);
507 if (o
&& o
->type
== OBJ_COMMIT
) {
508 struct commit
*commit
= (struct commit
*)o
;
509 if (!(commit
->object
.flags
& COMPLETE
)) {
510 commit
->object
.flags
|= COMPLETE
;
511 commit_list_insert_by_date(commit
, &complete
);
517 static void mark_recent_complete_commits(struct fetch_pack_args
*args
,
518 unsigned long cutoff
)
520 while (complete
&& cutoff
<= complete
->item
->date
) {
522 fprintf(stderr
, "Marking %s as complete\n",
523 sha1_to_hex(complete
->item
->object
.sha1
));
524 pop_most_recent_commit(&complete
, COMPLETE
);
528 static int non_matching_ref(struct string_list_item
*item
, void *unused
)
538 static void filter_refs(struct fetch_pack_args
*args
,
539 struct ref
**refs
, struct string_list
*sought
)
541 struct ref
*newlist
= NULL
;
542 struct ref
**newtail
= &newlist
;
543 struct ref
*ref
, *next
;
547 for (ref
= *refs
; ref
; ref
= next
) {
550 if (!memcmp(ref
->name
, "refs/", 5) &&
551 check_refname_format(ref
->name
+ 5, 0))
554 while (sought_pos
< sought
->nr
) {
555 int cmp
= strcmp(ref
->name
, sought
->items
[sought_pos
].string
);
557 break; /* definitely do not have it */
559 keep
= 1; /* definitely have it */
560 sought
->items
[sought_pos
++].util
= "matched";
564 sought_pos
++; /* might have it; keep looking */
568 if (! keep
&& args
->fetch_all
&&
569 (!args
->depth
|| prefixcmp(ref
->name
, "refs/tags/")))
575 newtail
= &ref
->next
;
581 filter_string_list(sought
, 0, non_matching_ref
, NULL
);
585 static void mark_alternate_complete(const struct ref
*ref
, void *unused
)
587 mark_complete(NULL
, ref
->old_sha1
, 0, NULL
);
590 static int everything_local(struct fetch_pack_args
*args
,
591 struct ref
**refs
, struct string_list
*sought
)
595 unsigned long cutoff
= 0;
597 save_commit_buffer
= 0;
599 for (ref
= *refs
; ref
; ref
= ref
->next
) {
602 o
= parse_object(ref
->old_sha1
);
606 /* We already have it -- which may mean that we were
607 * in sync with the other side at some time after
608 * that (it is OK if we guess wrong here).
610 if (o
->type
== OBJ_COMMIT
) {
611 struct commit
*commit
= (struct commit
*)o
;
612 if (!cutoff
|| cutoff
< commit
->date
)
613 cutoff
= commit
->date
;
618 for_each_ref(mark_complete
, NULL
);
619 for_each_alternate_ref(mark_alternate_complete
, NULL
);
621 mark_recent_complete_commits(args
, cutoff
);
625 * Mark all complete remote refs as common refs.
626 * Don't mark them common yet; the server has to be told so first.
628 for (ref
= *refs
; ref
; ref
= ref
->next
) {
629 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
632 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
635 if (!(o
->flags
& SEEN
)) {
636 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
638 mark_common((struct commit
*)o
, 1, 1);
642 filter_refs(args
, refs
, sought
);
644 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
645 const unsigned char *remote
= ref
->old_sha1
;
646 unsigned char local
[20];
649 o
= lookup_object(remote
);
650 if (!o
|| !(o
->flags
& COMPLETE
)) {
655 "want %s (%s)\n", sha1_to_hex(remote
),
660 hashcpy(ref
->new_sha1
, local
);
664 "already have %s (%s)\n", sha1_to_hex(remote
),
670 static int sideband_demux(int in
, int out
, void *data
)
674 int ret
= recv_sideband("fetch-pack", xd
[0], out
);
679 static int get_pack(struct fetch_pack_args
*args
,
680 int xd
[2], char **pack_lockfile
)
683 const char *argv
[20];
687 int do_keep
= args
->keep_pack
;
688 struct child_process cmd
;
690 memset(&demux
, 0, sizeof(demux
));
692 /* xd[] is talking with upload-pack; subprocess reads from
693 * xd[0], spits out band#2 to stderr, and feeds us band#1
694 * through demux->out.
696 demux
.proc
= sideband_demux
;
699 if (start_async(&demux
))
700 die("fetch-pack: unable to fork off sideband"
706 memset(&cmd
, 0, sizeof(cmd
));
710 if (!args
->keep_pack
&& unpack_limit
) {
711 struct pack_header header
;
713 if (read_pack_header(demux
.out
, &header
))
714 die("protocol error: bad pack header");
715 snprintf(hdr_arg
, sizeof(hdr_arg
),
716 "--pack_header=%"PRIu32
",%"PRIu32
,
717 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
718 if (ntohl(header
.hdr_entries
) < unpack_limit
)
727 *av
++ = "index-pack";
729 if (!args
->quiet
&& !args
->no_progress
)
731 if (args
->use_thin_pack
)
732 *av
++ = "--fix-thin";
733 if (args
->lock_pack
|| unpack_limit
) {
734 int s
= sprintf(keep_arg
,
735 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
736 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
737 strcpy(keep_arg
+ s
, "localhost");
742 *av
++ = "unpack-objects";
743 if (args
->quiet
|| args
->no_progress
)
748 if (fetch_fsck_objects
>= 0
750 : transfer_fsck_objects
>= 0
751 ? transfer_fsck_objects
758 if (start_command(&cmd
))
759 die("fetch-pack: unable to fork off %s", argv
[0]);
760 if (do_keep
&& pack_lockfile
) {
761 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
765 if (finish_command(&cmd
))
766 die("%s failed", argv
[0]);
767 if (use_sideband
&& finish_async(&demux
))
768 die("error in sideband demultiplexer");
772 static struct ref
*do_fetch_pack(struct fetch_pack_args
*args
,
774 const struct ref
*orig_ref
,
775 struct string_list
*sought
,
776 char **pack_lockfile
)
778 struct ref
*ref
= copy_ref_list(orig_ref
);
779 unsigned char sha1
[20];
780 const char *agent_feature
;
783 sort_ref_list(&ref
, ref_compare_name
);
785 if (is_repository_shallow() && !server_supports("shallow"))
786 die("Server does not support shallow clients");
787 if (server_supports("multi_ack_detailed")) {
789 fprintf(stderr
, "Server supports multi_ack_detailed\n");
791 if (server_supports("no-done")) {
793 fprintf(stderr
, "Server supports no-done\n");
794 if (args
->stateless_rpc
)
798 else if (server_supports("multi_ack")) {
800 fprintf(stderr
, "Server supports multi_ack\n");
803 if (server_supports("side-band-64k")) {
805 fprintf(stderr
, "Server supports side-band-64k\n");
808 else if (server_supports("side-band")) {
810 fprintf(stderr
, "Server supports side-band\n");
813 if (!server_supports("thin-pack"))
814 args
->use_thin_pack
= 0;
815 if (!server_supports("no-progress"))
816 args
->no_progress
= 0;
817 if (!server_supports("include-tag"))
818 args
->include_tag
= 0;
819 if (server_supports("ofs-delta")) {
821 fprintf(stderr
, "Server supports ofs-delta\n");
823 prefer_ofs_delta
= 0;
825 if ((agent_feature
= server_feature_value("agent", &agent_len
))) {
827 if (args
->verbose
&& agent_len
)
828 fprintf(stderr
, "Server version is %.*s\n",
829 agent_len
, agent_feature
);
832 if (everything_local(args
, &ref
, sought
)) {
836 if (find_common(args
, fd
, sha1
, ref
) < 0)
837 if (!args
->keep_pack
)
838 /* When cloning, it is not unusual to have
841 warning("no common commits");
843 if (args
->stateless_rpc
)
845 if (get_pack(args
, fd
, pack_lockfile
))
846 die("git fetch-pack: fetch failed.");
852 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
854 if (strcmp(var
, "fetch.unpacklimit") == 0) {
855 fetch_unpack_limit
= git_config_int(var
, value
);
859 if (strcmp(var
, "transfer.unpacklimit") == 0) {
860 transfer_unpack_limit
= git_config_int(var
, value
);
864 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
865 prefer_ofs_delta
= git_config_bool(var
, value
);
869 if (!strcmp(var
, "fetch.fsckobjects")) {
870 fetch_fsck_objects
= git_config_bool(var
, value
);
874 if (!strcmp(var
, "transfer.fsckobjects")) {
875 transfer_fsck_objects
= git_config_bool(var
, value
);
879 return git_default_config(var
, value
, cb
);
882 static struct lock_file lock
;
884 static void fetch_pack_setup(void)
886 static int did_setup
;
889 git_config(fetch_pack_config
, NULL
);
890 if (0 <= transfer_unpack_limit
)
891 unpack_limit
= transfer_unpack_limit
;
892 else if (0 <= fetch_unpack_limit
)
893 unpack_limit
= fetch_unpack_limit
;
897 int cmd_fetch_pack(int argc
, const char **argv
, const char *prefix
)
900 struct ref
*ref
= NULL
;
901 const char *dest
= NULL
;
902 struct string_list sought
= STRING_LIST_INIT_DUP
;
904 char *pack_lockfile
= NULL
;
905 char **pack_lockfile_ptr
= NULL
;
906 struct child_process
*conn
;
907 struct fetch_pack_args args
;
909 packet_trace_identity("fetch-pack");
911 memset(&args
, 0, sizeof(args
));
912 args
.uploadpack
= "git-upload-pack";
914 for (i
= 1; i
< argc
&& *argv
[i
] == '-'; i
++) {
915 const char *arg
= argv
[i
];
917 if (!prefixcmp(arg
, "--upload-pack=")) {
918 args
.uploadpack
= arg
+ 14;
921 if (!prefixcmp(arg
, "--exec=")) {
922 args
.uploadpack
= arg
+ 7;
925 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
929 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
930 args
.lock_pack
= args
.keep_pack
;
934 if (!strcmp("--thin", arg
)) {
935 args
.use_thin_pack
= 1;
938 if (!strcmp("--include-tag", arg
)) {
939 args
.include_tag
= 1;
942 if (!strcmp("--all", arg
)) {
946 if (!strcmp("--stdin", arg
)) {
950 if (!strcmp("-v", arg
)) {
954 if (!prefixcmp(arg
, "--depth=")) {
955 args
.depth
= strtol(arg
+ 8, NULL
, 0);
958 if (!strcmp("--no-progress", arg
)) {
959 args
.no_progress
= 1;
962 if (!strcmp("--stateless-rpc", arg
)) {
963 args
.stateless_rpc
= 1;
966 if (!strcmp("--lock-pack", arg
)) {
968 pack_lockfile_ptr
= &pack_lockfile
;
971 usage(fetch_pack_usage
);
977 usage(fetch_pack_usage
);
980 * Copy refs from cmdline to growable list, then append any
981 * refs from the standard input:
983 for (; i
< argc
; i
++)
984 string_list_append(&sought
, xstrdup(argv
[i
]));
985 if (args
.stdin_refs
) {
986 if (args
.stateless_rpc
) {
987 /* in stateless RPC mode we use pkt-line to read
988 * from stdin, until we get a flush packet
990 static char line
[1000];
992 int n
= packet_read_line(0, line
, sizeof(line
));
995 if (line
[n
-1] == '\n')
997 string_list_append(&sought
, xmemdupz(line
, n
));
1001 /* read from stdin one ref per line, until EOF */
1002 struct strbuf line
= STRBUF_INIT
;
1003 while (strbuf_getline(&line
, stdin
, '\n') != EOF
)
1004 string_list_append(&sought
, strbuf_detach(&line
, NULL
));
1005 strbuf_release(&line
);
1009 if (args
.stateless_rpc
) {
1014 conn
= git_connect(fd
, dest
, args
.uploadpack
,
1015 args
.verbose
? CONNECT_VERBOSE
: 0);
1018 get_remote_heads(fd
[0], &ref
, 0, NULL
);
1020 ref
= fetch_pack(&args
, fd
, conn
, ref
, dest
,
1021 &sought
, pack_lockfile_ptr
);
1022 if (pack_lockfile
) {
1023 printf("lock %s\n", pack_lockfile
);
1028 if (finish_connect(conn
))
1031 ret
= !ref
|| sought
.nr
;
1034 * If the heads to pull were given, we should have consumed
1035 * all of them by matching the remote. Otherwise, 'git fetch
1036 * remote no-such-ref' would silently succeed without issuing
1039 for (i
= 0; i
< sought
.nr
; i
++)
1040 error("no such remote ref %s", sought
.items
[i
].string
);
1043 sha1_to_hex(ref
->old_sha1
), ref
->name
);
1050 struct ref
*fetch_pack(struct fetch_pack_args
*args
,
1051 int fd
[], struct child_process
*conn
,
1052 const struct ref
*ref
,
1054 struct string_list
*sought
,
1055 char **pack_lockfile
)
1058 struct ref
*ref_cpy
;
1061 if (args
->depth
> 0) {
1062 if (stat(git_path("shallow"), &st
))
1067 sort_string_list(sought
);
1068 string_list_remove_duplicates(sought
, 0);
1072 packet_flush(fd
[1]);
1073 die("no matching remote head");
1075 ref_cpy
= do_fetch_pack(args
, fd
, ref
, sought
, pack_lockfile
);
1077 if (args
->depth
> 0) {
1078 struct cache_time mtime
;
1079 struct strbuf sb
= STRBUF_INIT
;
1080 char *shallow
= git_path("shallow");
1083 mtime
.sec
= st
.st_mtime
;
1084 mtime
.nsec
= ST_MTIME_NSEC(st
);
1085 if (stat(shallow
, &st
)) {
1087 die("shallow file was removed during fetch");
1088 } else if (st
.st_mtime
!= mtime
.sec
1090 || ST_MTIME_NSEC(st
) != mtime
.nsec
1093 die("shallow file was changed during fetch");
1095 fd
= hold_lock_file_for_update(&lock
, shallow
,
1097 if (!write_shallow_commits(&sb
, 0)
1098 || write_in_full(fd
, sb
.buf
, sb
.len
) != sb
.len
) {
1099 unlink_or_warn(shallow
);
1100 rollback_lock_file(&lock
);
1102 commit_lock_file(&lock
);
1104 strbuf_release(&sb
);
1107 reprepare_packed_git();