9 #include "fetch-pack.h"
11 #include "run-command.h"
12 #include "transport.h"
14 static int transfer_unpack_limit
= -1;
15 static int fetch_unpack_limit
= -1;
16 static int unpack_limit
= 100;
17 static int prefer_ofs_delta
= 1;
19 static int fetch_fsck_objects
= -1;
20 static int transfer_fsck_objects
= -1;
21 static struct fetch_pack_args args
= {
22 /* .uploadpack = */ "git-upload-pack",
25 static const char fetch_pack_usage
[] =
26 "git fetch-pack [--all] [--stdin] [--quiet|-q] [--keep|-k] [--thin] "
27 "[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
28 "[--no-progress] [-v] [<host>:]<directory> [<refs>...]";
30 #define COMPLETE (1U << 0)
31 #define COMMON (1U << 1)
32 #define COMMON_REF (1U << 2)
33 #define SEEN (1U << 3)
34 #define POPPED (1U << 4)
39 * After sending this many "have"s if we do not get any new ACK , we
40 * give up traversing our history.
42 #define MAX_IN_VAIN 256
44 static struct commit_list
*rev_list
;
45 static int non_common_revs
, multi_ack
, use_sideband
;
47 static void rev_list_push(struct commit
*commit
, int mark
)
49 if (!(commit
->object
.flags
& mark
)) {
50 commit
->object
.flags
|= mark
;
52 if (!(commit
->object
.parsed
))
53 if (parse_commit(commit
))
56 commit_list_insert_by_date(commit
, &rev_list
);
58 if (!(commit
->object
.flags
& COMMON
))
63 static int rev_list_insert_ref(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
65 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
67 if (o
&& o
->type
== OBJ_COMMIT
)
68 rev_list_push((struct commit
*)o
, SEEN
);
73 static int clear_marks(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
75 struct object
*o
= deref_tag(parse_object(sha1
), refname
, 0);
77 if (o
&& o
->type
== OBJ_COMMIT
)
78 clear_commit_marks((struct commit
*)o
,
79 COMMON
| COMMON_REF
| SEEN
| POPPED
);
84 This function marks a rev and its ancestors as common.
85 In some cases, it is desirable to mark only the ancestors (for example
86 when only the server does not yet know that they are common).
89 static void mark_common(struct commit
*commit
,
90 int ancestors_only
, int dont_parse
)
92 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
93 struct object
*o
= (struct object
*)commit
;
98 if (!(o
->flags
& SEEN
))
99 rev_list_push(commit
, SEEN
);
101 struct commit_list
*parents
;
103 if (!ancestors_only
&& !(o
->flags
& POPPED
))
105 if (!o
->parsed
&& !dont_parse
)
106 if (parse_commit(commit
))
109 for (parents
= commit
->parents
;
111 parents
= parents
->next
)
112 mark_common(parents
->item
, 0, dont_parse
);
118 Get the next rev to send, ignoring the common.
121 static const unsigned char *get_rev(void)
123 struct commit
*commit
= NULL
;
125 while (commit
== NULL
) {
127 struct commit_list
*parents
;
129 if (rev_list
== NULL
|| non_common_revs
== 0)
132 commit
= rev_list
->item
;
133 if (!commit
->object
.parsed
)
134 parse_commit(commit
);
135 parents
= commit
->parents
;
137 commit
->object
.flags
|= POPPED
;
138 if (!(commit
->object
.flags
& COMMON
))
141 if (commit
->object
.flags
& COMMON
) {
142 /* do not send "have", and ignore ancestors */
144 mark
= COMMON
| SEEN
;
145 } else if (commit
->object
.flags
& COMMON_REF
)
146 /* send "have", and ignore ancestors */
147 mark
= COMMON
| SEEN
;
149 /* send "have", also for its ancestors */
153 if (!(parents
->item
->object
.flags
& SEEN
))
154 rev_list_push(parents
->item
, mark
);
156 mark_common(parents
->item
, 1, 0);
157 parents
= parents
->next
;
160 rev_list
= rev_list
->next
;
163 return commit
->object
.sha1
;
174 static void consume_shallow_list(int fd
)
176 if (args
.stateless_rpc
&& args
.depth
> 0) {
177 /* If we sent a depth we will get back "duplicate"
178 * shallow and unshallow commands every time there
179 * is a block of have lines exchanged.
182 while (packet_read_line(fd
, line
, sizeof(line
))) {
183 if (!prefixcmp(line
, "shallow "))
185 if (!prefixcmp(line
, "unshallow "))
187 die("git fetch-pack: expected shallow list");
192 struct write_shallow_data
{
194 int use_pack_protocol
;
198 static int write_one_shallow(const struct commit_graft
*graft
, void *cb_data
)
200 struct write_shallow_data
*data
= cb_data
;
201 const char *hex
= sha1_to_hex(graft
->sha1
);
203 if (data
->use_pack_protocol
)
204 packet_buf_write(data
->out
, "shallow %s", hex
);
206 strbuf_addstr(data
->out
, hex
);
207 strbuf_addch(data
->out
, '\n');
212 static int write_shallow_commits(struct strbuf
*out
, int use_pack_protocol
)
214 struct write_shallow_data data
;
216 data
.use_pack_protocol
= use_pack_protocol
;
218 for_each_commit_graft(write_one_shallow
, &data
);
222 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
224 static char line
[1000];
225 int len
= packet_read_line(fd
, line
, sizeof(line
));
228 die("git fetch-pack: expected ACK/NAK, got EOF");
229 if (line
[len
-1] == '\n')
231 if (!strcmp(line
, "NAK"))
233 if (!prefixcmp(line
, "ACK ")) {
234 if (!get_sha1_hex(line
+4, result_sha1
)) {
235 if (strstr(line
+45, "continue"))
237 if (strstr(line
+45, "common"))
239 if (strstr(line
+45, "ready"))
244 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
247 static void send_request(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(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(int fd
[2], unsigned char *result_sha1
,
280 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
281 const unsigned char *sha1
;
282 unsigned in_vain
= 0;
283 int got_continue
= 0;
285 struct strbuf req_buf
= STRBUF_INIT
;
286 size_t state_len
= 0;
288 if (args
.stateless_rpc
&& multi_ack
== 1)
289 die("--stateless-rpc requires multi_ack_detailed");
291 for_each_ref(clear_marks
, NULL
);
294 for_each_ref(rev_list_insert_ref
, NULL
);
295 for_each_alternate_ref(insert_one_alternate_ref
, NULL
);
298 for ( ; refs
; refs
= refs
->next
) {
299 unsigned char *remote
= refs
->old_sha1
;
300 const char *remote_hex
;
304 * If that object is complete (i.e. it is an ancestor of a
305 * local ref), we tell them we have it but do not have to
306 * tell them about its ancestors, which they already know
309 * We use lookup_object here because we are only
310 * interested in the case we *know* the object is
311 * reachable and we have already scanned it.
313 if (((o
= lookup_object(remote
)) != NULL
) &&
314 (o
->flags
& COMPLETE
)) {
318 remote_hex
= sha1_to_hex(remote
);
320 struct strbuf c
= STRBUF_INIT
;
321 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
322 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
323 if (no_done
) strbuf_addstr(&c
, " no-done");
324 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
325 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
326 if (args
.use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
327 if (args
.no_progress
) strbuf_addstr(&c
, " no-progress");
328 if (args
.include_tag
) strbuf_addstr(&c
, " include-tag");
329 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
330 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
333 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
338 strbuf_release(&req_buf
);
343 if (is_repository_shallow())
344 write_shallow_commits(&req_buf
, 1);
346 packet_buf_write(&req_buf
, "deepen %d", args
.depth
);
347 packet_buf_flush(&req_buf
);
348 state_len
= req_buf
.len
;
350 if (args
.depth
> 0) {
352 unsigned char sha1
[20];
354 send_request(fd
[1], &req_buf
);
355 while (packet_read_line(fd
[0], line
, sizeof(line
))) {
356 if (!prefixcmp(line
, "shallow ")) {
357 if (get_sha1_hex(line
+ 8, sha1
))
358 die("invalid shallow line: %s", line
);
359 register_shallow(sha1
);
362 if (!prefixcmp(line
, "unshallow ")) {
363 if (get_sha1_hex(line
+ 10, sha1
))
364 die("invalid unshallow line: %s", line
);
365 if (!lookup_object(sha1
))
366 die("object not found: %s", line
);
367 /* make sure that it is parsed as shallow */
368 if (!parse_object(sha1
))
369 die("error in object: %s", line
);
370 if (unregister_shallow(sha1
))
371 die("no shallow found: %s", line
);
374 die("expected shallow/unshallow, got %s", line
);
376 } else if (!args
.stateless_rpc
)
377 send_request(fd
[1], &req_buf
);
379 if (!args
.stateless_rpc
) {
380 /* If we aren't using the stateless-rpc interface
381 * we don't need to retain the headers.
383 strbuf_setlen(&req_buf
, 0);
389 while ((sha1
= get_rev())) {
390 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
392 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
394 if (flush_at
<= ++count
) {
397 packet_buf_flush(&req_buf
);
398 send_request(fd
[1], &req_buf
);
399 strbuf_setlen(&req_buf
, state_len
);
401 flush_at
= next_flush(count
);
404 * We keep one window "ahead" of the other side, and
405 * will wait for an ACK only on the next one
407 if (!args
.stateless_rpc
&& count
== INITIAL_FLUSH
)
410 consume_shallow_list(fd
[0]);
412 ack
= get_ack(fd
[0], result_sha1
);
413 if (args
.verbose
&& ack
)
414 fprintf(stderr
, "got ack %d %s\n", ack
,
415 sha1_to_hex(result_sha1
));
425 struct commit
*commit
=
426 lookup_commit(result_sha1
);
428 die("invalid commit %s", sha1_to_hex(result_sha1
));
429 if (args
.stateless_rpc
431 && !(commit
->object
.flags
& COMMON
)) {
432 /* We need to replay the have for this object
433 * on the next RPC request so the peer knows
434 * it is in common with us.
436 const char *hex
= sha1_to_hex(result_sha1
);
437 packet_buf_write(&req_buf
, "have %s\n", hex
);
438 state_len
= req_buf
.len
;
440 mark_common(commit
, 0, 1);
444 if (ack
== ACK_ready
) {
453 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
455 fprintf(stderr
, "giving up\n");
461 if (!got_ready
|| !no_done
) {
462 packet_buf_write(&req_buf
, "done\n");
463 send_request(fd
[1], &req_buf
);
466 fprintf(stderr
, "done\n");
471 strbuf_release(&req_buf
);
473 consume_shallow_list(fd
[0]);
474 while (flushes
|| multi_ack
) {
475 int ack
= get_ack(fd
[0], result_sha1
);
478 fprintf(stderr
, "got ack (%d) %s\n", ack
,
479 sha1_to_hex(result_sha1
));
487 /* it is no error to fetch into a completely empty repo */
488 return count
? retval
: 0;
491 static struct commit_list
*complete
;
493 static int mark_complete(const char *refname
, const unsigned char *sha1
, int flag
, void *cb_data
)
495 struct object
*o
= parse_object(sha1
);
497 while (o
&& o
->type
== OBJ_TAG
) {
498 struct tag
*t
= (struct tag
*) o
;
500 break; /* broken repository */
501 o
->flags
|= COMPLETE
;
502 o
= parse_object(t
->tagged
->sha1
);
504 if (o
&& o
->type
== OBJ_COMMIT
) {
505 struct commit
*commit
= (struct commit
*)o
;
506 if (!(commit
->object
.flags
& COMPLETE
)) {
507 commit
->object
.flags
|= COMPLETE
;
508 commit_list_insert_by_date(commit
, &complete
);
514 static void mark_recent_complete_commits(unsigned long cutoff
)
516 while (complete
&& cutoff
<= complete
->item
->date
) {
518 fprintf(stderr
, "Marking %s as complete\n",
519 sha1_to_hex(complete
->item
->object
.sha1
));
520 pop_most_recent_commit(&complete
, COMPLETE
);
524 static void filter_refs(struct ref
**refs
, int nr_match
, char **match
)
526 struct ref
**return_refs
;
527 struct ref
*newlist
= NULL
;
528 struct ref
**newtail
= &newlist
;
529 struct ref
*ref
, *next
;
530 struct ref
*fastarray
[32];
532 if (nr_match
&& !args
.fetch_all
) {
533 if (ARRAY_SIZE(fastarray
) < nr_match
)
534 return_refs
= xcalloc(nr_match
, sizeof(struct ref
*));
536 return_refs
= fastarray
;
537 memset(return_refs
, 0, sizeof(struct ref
*) * nr_match
);
543 for (ref
= *refs
; ref
; ref
= next
) {
545 if (!memcmp(ref
->name
, "refs/", 5) &&
546 check_refname_format(ref
->name
+ 5, 0))
548 else if (args
.fetch_all
&&
549 (!args
.depth
|| prefixcmp(ref
->name
, "refs/tags/") )) {
552 newtail
= &ref
->next
;
557 for (i
= 0; i
< nr_match
; i
++) {
558 if (!strcmp(ref
->name
, match
[i
])) {
560 return_refs
[i
] = ref
;
565 continue; /* we will link it later */
570 if (!args
.fetch_all
) {
572 for (i
= 0; i
< nr_match
; i
++) {
573 ref
= return_refs
[i
];
577 newtail
= &ref
->next
;
580 if (return_refs
!= fastarray
)
586 static void mark_alternate_complete(const struct ref
*ref
, void *unused
)
588 mark_complete(NULL
, ref
->old_sha1
, 0, NULL
);
591 static int everything_local(struct ref
**refs
, int nr_match
, char **match
)
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(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(refs
, nr_match
, match
);
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(int xd
[2], char **pack_lockfile
)
682 const char *argv
[20];
686 int do_keep
= args
.keep_pack
;
687 struct child_process cmd
;
689 memset(&demux
, 0, sizeof(demux
));
691 /* xd[] is talking with upload-pack; subprocess reads from
692 * xd[0], spits out band#2 to stderr, and feeds us band#1
693 * through demux->out.
695 demux
.proc
= sideband_demux
;
698 if (start_async(&demux
))
699 die("fetch-pack: unable to fork off sideband"
705 memset(&cmd
, 0, sizeof(cmd
));
709 if (!args
.keep_pack
&& unpack_limit
) {
710 struct pack_header header
;
712 if (read_pack_header(demux
.out
, &header
))
713 die("protocol error: bad pack header");
714 snprintf(hdr_arg
, sizeof(hdr_arg
),
715 "--pack_header=%"PRIu32
",%"PRIu32
,
716 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
717 if (ntohl(header
.hdr_entries
) < unpack_limit
)
726 *av
++ = "index-pack";
728 if (!args
.quiet
&& !args
.no_progress
)
730 if (args
.use_thin_pack
)
731 *av
++ = "--fix-thin";
732 if (args
.lock_pack
|| unpack_limit
) {
733 int s
= sprintf(keep_arg
,
734 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
735 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
736 strcpy(keep_arg
+ s
, "localhost");
741 *av
++ = "unpack-objects";
742 if (args
.quiet
|| args
.no_progress
)
747 if (fetch_fsck_objects
>= 0
749 : transfer_fsck_objects
>= 0
750 ? transfer_fsck_objects
757 if (start_command(&cmd
))
758 die("fetch-pack: unable to fork off %s", argv
[0]);
759 if (do_keep
&& pack_lockfile
) {
760 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
764 if (finish_command(&cmd
))
765 die("%s failed", argv
[0]);
766 if (use_sideband
&& finish_async(&demux
))
767 die("error in sideband demultiplexer");
771 static struct ref
*do_fetch_pack(int fd
[2],
772 const struct ref
*orig_ref
,
775 char **pack_lockfile
)
777 struct ref
*ref
= copy_ref_list(orig_ref
);
778 unsigned char sha1
[20];
780 sort_ref_list(&ref
, ref_compare_name
);
782 if (is_repository_shallow() && !server_supports("shallow"))
783 die("Server does not support shallow clients");
784 if (server_supports("multi_ack_detailed")) {
786 fprintf(stderr
, "Server supports multi_ack_detailed\n");
788 if (server_supports("no-done")) {
790 fprintf(stderr
, "Server supports no-done\n");
791 if (args
.stateless_rpc
)
795 else if (server_supports("multi_ack")) {
797 fprintf(stderr
, "Server supports multi_ack\n");
800 if (server_supports("side-band-64k")) {
802 fprintf(stderr
, "Server supports side-band-64k\n");
805 else if (server_supports("side-band")) {
807 fprintf(stderr
, "Server supports side-band\n");
810 if (server_supports("ofs-delta")) {
812 fprintf(stderr
, "Server supports ofs-delta\n");
814 prefer_ofs_delta
= 0;
815 if (everything_local(&ref
, nr_match
, match
)) {
819 if (find_common(fd
, sha1
, ref
) < 0)
821 /* When cloning, it is not unusual to have
824 warning("no common commits");
826 if (args
.stateless_rpc
)
828 if (get_pack(fd
, pack_lockfile
))
829 die("git fetch-pack: fetch failed.");
835 static int remove_duplicates(int nr_heads
, char **heads
)
842 for (src
= dst
= 1; src
< nr_heads
; src
++)
843 if (strcmp(heads
[src
], heads
[dst
-1]))
844 heads
[dst
++] = heads
[src
];
848 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
850 if (strcmp(var
, "fetch.unpacklimit") == 0) {
851 fetch_unpack_limit
= git_config_int(var
, value
);
855 if (strcmp(var
, "transfer.unpacklimit") == 0) {
856 transfer_unpack_limit
= git_config_int(var
, value
);
860 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
861 prefer_ofs_delta
= git_config_bool(var
, value
);
865 if (!strcmp(var
, "fetch.fsckobjects")) {
866 fetch_fsck_objects
= git_config_bool(var
, value
);
870 if (!strcmp(var
, "transfer.fsckobjects")) {
871 transfer_fsck_objects
= git_config_bool(var
, value
);
875 return git_default_config(var
, value
, cb
);
878 static struct lock_file lock
;
880 static void fetch_pack_setup(void)
882 static int did_setup
;
885 git_config(fetch_pack_config
, NULL
);
886 if (0 <= transfer_unpack_limit
)
887 unpack_limit
= transfer_unpack_limit
;
888 else if (0 <= fetch_unpack_limit
)
889 unpack_limit
= fetch_unpack_limit
;
893 int cmd_fetch_pack(int argc
, const char **argv
, const char *prefix
)
895 int i
, ret
, nr_heads
;
896 struct ref
*ref
= NULL
;
897 char *dest
= NULL
, **heads
;
899 char *pack_lockfile
= NULL
;
900 char **pack_lockfile_ptr
= NULL
;
901 struct child_process
*conn
;
903 packet_trace_identity("fetch-pack");
907 for (i
= 1; i
< argc
; i
++) {
908 const char *arg
= argv
[i
];
911 if (!prefixcmp(arg
, "--upload-pack=")) {
912 args
.uploadpack
= arg
+ 14;
915 if (!prefixcmp(arg
, "--exec=")) {
916 args
.uploadpack
= arg
+ 7;
919 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
923 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
924 args
.lock_pack
= args
.keep_pack
;
928 if (!strcmp("--thin", arg
)) {
929 args
.use_thin_pack
= 1;
932 if (!strcmp("--include-tag", arg
)) {
933 args
.include_tag
= 1;
936 if (!strcmp("--all", arg
)) {
940 if (!strcmp("--stdin", arg
)) {
944 if (!strcmp("-v", arg
)) {
948 if (!prefixcmp(arg
, "--depth=")) {
949 args
.depth
= strtol(arg
+ 8, NULL
, 0);
952 if (!strcmp("--no-progress", arg
)) {
953 args
.no_progress
= 1;
956 if (!strcmp("--stateless-rpc", arg
)) {
957 args
.stateless_rpc
= 1;
960 if (!strcmp("--lock-pack", arg
)) {
962 pack_lockfile_ptr
= &pack_lockfile
;
965 usage(fetch_pack_usage
);
968 heads
= (char **)(argv
+ i
+ 1);
969 nr_heads
= argc
- i
- 1;
973 usage(fetch_pack_usage
);
975 if (args
.stdin_refs
) {
977 * Copy refs from cmdline to new growable list, then
978 * append the refs from the standard input.
980 int alloc_heads
= nr_heads
;
981 int size
= nr_heads
* sizeof(*heads
);
982 heads
= memcpy(xmalloc(size
), heads
, size
);
983 if (args
.stateless_rpc
) {
984 /* in stateless RPC mode we use pkt-line to read
985 * from stdin, until we get a flush packet
987 static char line
[1000];
989 int n
= packet_read_line(0, line
, sizeof(line
));
992 if (line
[n
-1] == '\n')
994 ALLOC_GROW(heads
, nr_heads
+ 1, alloc_heads
);
995 heads
[nr_heads
++] = xmemdupz(line
, n
);
999 /* read from stdin one ref per line, until EOF */
1000 struct strbuf line
= STRBUF_INIT
;
1001 while (strbuf_getline(&line
, stdin
, '\n') != EOF
) {
1002 ALLOC_GROW(heads
, nr_heads
+ 1, alloc_heads
);
1003 heads
[nr_heads
++] = strbuf_detach(&line
, NULL
);
1005 strbuf_release(&line
);
1009 if (args
.stateless_rpc
) {
1014 conn
= git_connect(fd
, (char *)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 nr_heads
, heads
, pack_lockfile_ptr
);
1022 if (pack_lockfile
) {
1023 printf("lock %s\n", pack_lockfile
);
1028 if (finish_connect(conn
))
1032 if (!ret
&& nr_heads
) {
1033 /* If the heads to pull were given, we should have
1034 * consumed all of them by matching the remote.
1035 * Otherwise, 'git fetch remote no-such-ref' would
1036 * silently succeed without issuing an error.
1038 for (i
= 0; i
< nr_heads
; i
++)
1039 if (heads
[i
] && heads
[i
][0]) {
1040 error("no such remote ref %s", heads
[i
]);
1046 sha1_to_hex(ref
->old_sha1
), ref
->name
);
1053 static int compare_heads(const void *a
, const void *b
)
1055 return strcmp(*(const char **)a
, *(const char **)b
);
1058 struct ref
*fetch_pack(struct fetch_pack_args
*my_args
,
1059 int fd
[], struct child_process
*conn
,
1060 const struct ref
*ref
,
1064 char **pack_lockfile
)
1067 struct ref
*ref_cpy
;
1070 if (&args
!= my_args
)
1071 memcpy(&args
, my_args
, sizeof(args
));
1072 if (args
.depth
> 0) {
1073 if (stat(git_path("shallow"), &st
))
1077 if (heads
&& nr_heads
) {
1078 nr_heads
= remove_duplicates(nr_heads
, heads
);
1079 qsort(heads
, nr_heads
, sizeof(*heads
), compare_heads
);
1083 packet_flush(fd
[1]);
1084 die("no matching remote head");
1086 ref_cpy
= do_fetch_pack(fd
, ref
, nr_heads
, heads
, pack_lockfile
);
1088 if (args
.depth
> 0) {
1089 struct cache_time mtime
;
1090 struct strbuf sb
= STRBUF_INIT
;
1091 char *shallow
= git_path("shallow");
1094 mtime
.sec
= st
.st_mtime
;
1095 mtime
.nsec
= ST_MTIME_NSEC(st
);
1096 if (stat(shallow
, &st
)) {
1098 die("shallow file was removed during fetch");
1099 } else if (st
.st_mtime
!= mtime
.sec
1101 || ST_MTIME_NSEC(st
) != mtime
.nsec
1104 die("shallow file was changed during fetch");
1106 fd
= hold_lock_file_for_update(&lock
, shallow
,
1108 if (!write_shallow_commits(&sb
, 0)
1109 || write_in_full(fd
, sb
.buf
, sb
.len
) != sb
.len
) {
1110 unlink_or_warn(shallow
);
1111 rollback_lock_file(&lock
);
1113 commit_lock_file(&lock
);
1115 strbuf_release(&sb
);
1118 reprepare_packed_git();