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;
18 static int no_done
= 0;
19 static struct fetch_pack_args args
= {
20 /* .uploadpack = */ "git-upload-pack",
23 static const char fetch_pack_usage
[] =
24 "git fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [-v] [<host>:]<directory> [<refs>...]";
26 #define COMPLETE (1U << 0)
27 #define COMMON (1U << 1)
28 #define COMMON_REF (1U << 2)
29 #define SEEN (1U << 3)
30 #define POPPED (1U << 4)
35 * After sending this many "have"s if we do not get any new ACK , we
36 * give up traversing our history.
38 #define MAX_IN_VAIN 256
40 static struct commit_list
*rev_list
;
41 static int non_common_revs
, multi_ack
, use_sideband
;
43 static void rev_list_push(struct commit
*commit
, int mark
)
45 if (!(commit
->object
.flags
& mark
)) {
46 commit
->object
.flags
|= mark
;
48 if (!(commit
->object
.parsed
))
49 if (parse_commit(commit
))
52 commit_list_insert_by_date(commit
, &rev_list
);
54 if (!(commit
->object
.flags
& COMMON
))
59 static int rev_list_insert_ref(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
61 struct object
*o
= deref_tag(parse_object(sha1
), path
, 0);
63 if (o
&& o
->type
== OBJ_COMMIT
)
64 rev_list_push((struct commit
*)o
, SEEN
);
69 static int clear_marks(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
71 struct object
*o
= deref_tag(parse_object(sha1
), path
, 0);
73 if (o
&& o
->type
== OBJ_COMMIT
)
74 clear_commit_marks((struct commit
*)o
,
75 COMMON
| COMMON_REF
| SEEN
| POPPED
);
80 This function marks a rev and its ancestors as common.
81 In some cases, it is desirable to mark only the ancestors (for example
82 when only the server does not yet know that they are common).
85 static void mark_common(struct commit
*commit
,
86 int ancestors_only
, int dont_parse
)
88 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
89 struct object
*o
= (struct object
*)commit
;
94 if (!(o
->flags
& SEEN
))
95 rev_list_push(commit
, SEEN
);
97 struct commit_list
*parents
;
99 if (!ancestors_only
&& !(o
->flags
& POPPED
))
101 if (!o
->parsed
&& !dont_parse
)
102 if (parse_commit(commit
))
105 for (parents
= commit
->parents
;
107 parents
= parents
->next
)
108 mark_common(parents
->item
, 0, dont_parse
);
114 Get the next rev to send, ignoring the common.
117 static const unsigned char *get_rev(void)
119 struct commit
*commit
= NULL
;
121 while (commit
== NULL
) {
123 struct commit_list
*parents
;
125 if (rev_list
== NULL
|| non_common_revs
== 0)
128 commit
= rev_list
->item
;
129 if (!commit
->object
.parsed
)
130 parse_commit(commit
);
131 parents
= commit
->parents
;
133 commit
->object
.flags
|= POPPED
;
134 if (!(commit
->object
.flags
& COMMON
))
137 if (commit
->object
.flags
& COMMON
) {
138 /* do not send "have", and ignore ancestors */
140 mark
= COMMON
| SEEN
;
141 } else if (commit
->object
.flags
& COMMON_REF
)
142 /* send "have", and ignore ancestors */
143 mark
= COMMON
| SEEN
;
145 /* send "have", also for its ancestors */
149 if (!(parents
->item
->object
.flags
& SEEN
))
150 rev_list_push(parents
->item
, mark
);
152 mark_common(parents
->item
, 1, 0);
153 parents
= parents
->next
;
156 rev_list
= rev_list
->next
;
159 return commit
->object
.sha1
;
170 static void consume_shallow_list(int fd
)
172 if (args
.stateless_rpc
&& args
.depth
> 0) {
173 /* If we sent a depth we will get back "duplicate"
174 * shallow and unshallow commands every time there
175 * is a block of have lines exchanged.
178 while (packet_read_line(fd
, line
, sizeof(line
))) {
179 if (!prefixcmp(line
, "shallow "))
181 if (!prefixcmp(line
, "unshallow "))
183 die("git fetch-pack: expected shallow list");
188 struct write_shallow_data
{
190 int use_pack_protocol
;
194 static int write_one_shallow(const struct commit_graft
*graft
, void *cb_data
)
196 struct write_shallow_data
*data
= cb_data
;
197 const char *hex
= sha1_to_hex(graft
->sha1
);
199 if (data
->use_pack_protocol
)
200 packet_buf_write(data
->out
, "shallow %s", hex
);
202 strbuf_addstr(data
->out
, hex
);
203 strbuf_addch(data
->out
, '\n');
208 static int write_shallow_commits(struct strbuf
*out
, int use_pack_protocol
)
210 struct write_shallow_data data
;
212 data
.use_pack_protocol
= use_pack_protocol
;
214 for_each_commit_graft(write_one_shallow
, &data
);
218 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
220 static char line
[1000];
221 int len
= packet_read_line(fd
, line
, sizeof(line
));
224 die("git fetch-pack: expected ACK/NAK, got EOF");
225 if (line
[len
-1] == '\n')
227 if (!strcmp(line
, "NAK"))
229 if (!prefixcmp(line
, "ACK ")) {
230 if (!get_sha1_hex(line
+4, result_sha1
)) {
231 if (strstr(line
+45, "continue"))
233 if (strstr(line
+45, "common"))
235 if (strstr(line
+45, "ready"))
240 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
243 static void send_request(int fd
, struct strbuf
*buf
)
245 if (args
.stateless_rpc
) {
246 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
249 safe_write(fd
, buf
->buf
, buf
->len
);
252 static void insert_one_alternate_ref(const struct ref
*ref
, void *unused
)
254 rev_list_insert_ref(NULL
, ref
->old_sha1
, 0, NULL
);
257 static void insert_alternate_refs(void)
259 for_each_alternate_ref(insert_one_alternate_ref
, NULL
);
262 #define INITIAL_FLUSH 16
263 #define PIPESAFE_FLUSH 32
264 #define LARGE_FLUSH 1024
266 static int next_flush(int count
)
268 int flush_limit
= args
.stateless_rpc
? LARGE_FLUSH
: PIPESAFE_FLUSH
;
270 if (count
< flush_limit
)
273 count
+= flush_limit
;
277 static int find_common(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 insert_alternate_refs();
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 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
334 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
339 strbuf_release(&req_buf
);
344 if (is_repository_shallow())
345 write_shallow_commits(&req_buf
, 1);
347 packet_buf_write(&req_buf
, "deepen %d", args
.depth
);
348 packet_buf_flush(&req_buf
);
349 state_len
= req_buf
.len
;
351 if (args
.depth
> 0) {
353 unsigned char sha1
[20];
355 send_request(fd
[1], &req_buf
);
356 while (packet_read_line(fd
[0], line
, sizeof(line
))) {
357 if (!prefixcmp(line
, "shallow ")) {
358 if (get_sha1_hex(line
+ 8, sha1
))
359 die("invalid shallow line: %s", line
);
360 register_shallow(sha1
);
363 if (!prefixcmp(line
, "unshallow ")) {
364 if (get_sha1_hex(line
+ 10, sha1
))
365 die("invalid unshallow line: %s", line
);
366 if (!lookup_object(sha1
))
367 die("object not found: %s", line
);
368 /* make sure that it is parsed as shallow */
369 if (!parse_object(sha1
))
370 die("error in object: %s", line
);
371 if (unregister_shallow(sha1
))
372 die("no shallow found: %s", line
);
375 die("expected shallow/unshallow, got %s", line
);
377 } else if (!args
.stateless_rpc
)
378 send_request(fd
[1], &req_buf
);
380 if (!args
.stateless_rpc
) {
381 /* If we aren't using the stateless-rpc interface
382 * we don't need to retain the headers.
384 strbuf_setlen(&req_buf
, 0);
390 while ((sha1
= get_rev())) {
391 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
393 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
395 if (flush_at
<= ++count
) {
398 packet_buf_flush(&req_buf
);
399 send_request(fd
[1], &req_buf
);
400 strbuf_setlen(&req_buf
, state_len
);
402 flush_at
= next_flush(count
);
405 * We keep one window "ahead" of the other side, and
406 * will wait for an ACK only on the next one
408 if (!args
.stateless_rpc
&& count
== INITIAL_FLUSH
)
411 consume_shallow_list(fd
[0]);
413 ack
= get_ack(fd
[0], result_sha1
);
414 if (args
.verbose
&& ack
)
415 fprintf(stderr
, "got ack %d %s\n", ack
,
416 sha1_to_hex(result_sha1
));
426 struct commit
*commit
=
427 lookup_commit(result_sha1
);
428 if (args
.stateless_rpc
430 && !(commit
->object
.flags
& COMMON
)) {
431 /* We need to replay the have for this object
432 * on the next RPC request so the peer knows
433 * it is in common with us.
435 const char *hex
= sha1_to_hex(result_sha1
);
436 packet_buf_write(&req_buf
, "have %s\n", hex
);
437 state_len
= req_buf
.len
;
439 mark_common(commit
, 0, 1);
443 if (ack
== ACK_ready
) {
452 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
454 fprintf(stderr
, "giving up\n");
460 if (!got_ready
|| !no_done
) {
461 packet_buf_write(&req_buf
, "done\n");
462 send_request(fd
[1], &req_buf
);
465 fprintf(stderr
, "done\n");
470 strbuf_release(&req_buf
);
472 consume_shallow_list(fd
[0]);
473 while (flushes
|| multi_ack
) {
474 int ack
= get_ack(fd
[0], result_sha1
);
477 fprintf(stderr
, "got ack (%d) %s\n", ack
,
478 sha1_to_hex(result_sha1
));
486 /* it is no error to fetch into a completely empty repo */
487 return count
? retval
: 0;
490 static struct commit_list
*complete
;
492 static int mark_complete(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
494 struct object
*o
= parse_object(sha1
);
496 while (o
&& o
->type
== OBJ_TAG
) {
497 struct tag
*t
= (struct tag
*) o
;
499 break; /* broken repository */
500 o
->flags
|= COMPLETE
;
501 o
= parse_object(t
->tagged
->sha1
);
503 if (o
&& o
->type
== OBJ_COMMIT
) {
504 struct commit
*commit
= (struct commit
*)o
;
505 if (!(commit
->object
.flags
& COMPLETE
)) {
506 commit
->object
.flags
|= COMPLETE
;
507 commit_list_insert_by_date(commit
, &complete
);
513 static void mark_recent_complete_commits(unsigned long cutoff
)
515 while (complete
&& cutoff
<= complete
->item
->date
) {
517 fprintf(stderr
, "Marking %s as complete\n",
518 sha1_to_hex(complete
->item
->object
.sha1
));
519 pop_most_recent_commit(&complete
, COMPLETE
);
523 static void filter_refs(struct ref
**refs
, int nr_match
, char **match
)
525 struct ref
**return_refs
;
526 struct ref
*newlist
= NULL
;
527 struct ref
**newtail
= &newlist
;
528 struct ref
*ref
, *next
;
529 struct ref
*fastarray
[32];
531 if (nr_match
&& !args
.fetch_all
) {
532 if (ARRAY_SIZE(fastarray
) < nr_match
)
533 return_refs
= xcalloc(nr_match
, sizeof(struct ref
*));
535 return_refs
= fastarray
;
536 memset(return_refs
, 0, sizeof(struct ref
*) * nr_match
);
542 for (ref
= *refs
; ref
; ref
= next
) {
544 if (!memcmp(ref
->name
, "refs/", 5) &&
545 check_ref_format(ref
->name
+ 5))
547 else if (args
.fetch_all
&&
548 (!args
.depth
|| prefixcmp(ref
->name
, "refs/tags/") )) {
551 newtail
= &ref
->next
;
555 int order
= path_match(ref
->name
, nr_match
, match
);
557 return_refs
[order
-1] = ref
;
558 continue; /* we will link it later */
564 if (!args
.fetch_all
) {
566 for (i
= 0; i
< nr_match
; i
++) {
567 ref
= return_refs
[i
];
571 newtail
= &ref
->next
;
574 if (return_refs
!= fastarray
)
580 static int everything_local(struct ref
**refs
, int nr_match
, char **match
)
584 unsigned long cutoff
= 0;
586 save_commit_buffer
= 0;
588 for (ref
= *refs
; ref
; ref
= ref
->next
) {
591 o
= parse_object(ref
->old_sha1
);
595 /* We already have it -- which may mean that we were
596 * in sync with the other side at some time after
597 * that (it is OK if we guess wrong here).
599 if (o
->type
== OBJ_COMMIT
) {
600 struct commit
*commit
= (struct commit
*)o
;
601 if (!cutoff
|| cutoff
< commit
->date
)
602 cutoff
= commit
->date
;
607 for_each_ref(mark_complete
, NULL
);
609 mark_recent_complete_commits(cutoff
);
613 * Mark all complete remote refs as common refs.
614 * Don't mark them common yet; the server has to be told so first.
616 for (ref
= *refs
; ref
; ref
= ref
->next
) {
617 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
620 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
623 if (!(o
->flags
& SEEN
)) {
624 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
626 mark_common((struct commit
*)o
, 1, 1);
630 filter_refs(refs
, nr_match
, match
);
632 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
633 const unsigned char *remote
= ref
->old_sha1
;
634 unsigned char local
[20];
637 o
= lookup_object(remote
);
638 if (!o
|| !(o
->flags
& COMPLETE
)) {
643 "want %s (%s)\n", sha1_to_hex(remote
),
648 hashcpy(ref
->new_sha1
, local
);
652 "already have %s (%s)\n", sha1_to_hex(remote
),
658 static int sideband_demux(int in
, int out
, void *data
)
662 int ret
= recv_sideband("fetch-pack", xd
[0], out
);
667 static int get_pack(int xd
[2], char **pack_lockfile
)
670 const char *argv
[20];
674 int do_keep
= args
.keep_pack
;
675 struct child_process cmd
;
677 memset(&demux
, 0, sizeof(demux
));
679 /* xd[] is talking with upload-pack; subprocess reads from
680 * xd[0], spits out band#2 to stderr, and feeds us band#1
681 * through demux->out.
683 demux
.proc
= sideband_demux
;
686 if (start_async(&demux
))
687 die("fetch-pack: unable to fork off sideband"
693 memset(&cmd
, 0, sizeof(cmd
));
697 if (!args
.keep_pack
&& unpack_limit
) {
698 struct pack_header header
;
700 if (read_pack_header(demux
.out
, &header
))
701 die("protocol error: bad pack header");
702 snprintf(hdr_arg
, sizeof(hdr_arg
),
703 "--pack_header=%"PRIu32
",%"PRIu32
,
704 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
705 if (ntohl(header
.hdr_entries
) < unpack_limit
)
714 *av
++ = "index-pack";
716 if (!args
.quiet
&& !args
.no_progress
)
718 if (args
.use_thin_pack
)
719 *av
++ = "--fix-thin";
720 if (args
.lock_pack
|| unpack_limit
) {
721 int s
= sprintf(keep_arg
,
722 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
723 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
724 strcpy(keep_arg
+ s
, "localhost");
729 *av
++ = "unpack-objects";
739 if (start_command(&cmd
))
740 die("fetch-pack: unable to fork off %s", argv
[0]);
741 if (do_keep
&& pack_lockfile
) {
742 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
746 if (finish_command(&cmd
))
747 die("%s failed", argv
[0]);
748 if (use_sideband
&& finish_async(&demux
))
749 die("error in sideband demultiplexer");
753 static struct ref
*do_fetch_pack(int fd
[2],
754 const struct ref
*orig_ref
,
757 char **pack_lockfile
)
759 struct ref
*ref
= copy_ref_list(orig_ref
);
760 unsigned char sha1
[20];
762 if (is_repository_shallow() && !server_supports("shallow"))
763 die("Server does not support shallow clients");
764 if (server_supports("multi_ack_detailed")) {
766 fprintf(stderr
, "Server supports multi_ack_detailed\n");
768 if (server_supports("no-done")) {
770 fprintf(stderr
, "Server supports no-done\n");
771 if (args
.stateless_rpc
)
775 else if (server_supports("multi_ack")) {
777 fprintf(stderr
, "Server supports multi_ack\n");
780 if (server_supports("side-band-64k")) {
782 fprintf(stderr
, "Server supports side-band-64k\n");
785 else if (server_supports("side-band")) {
787 fprintf(stderr
, "Server supports side-band\n");
790 if (server_supports("ofs-delta")) {
792 fprintf(stderr
, "Server supports ofs-delta\n");
794 prefer_ofs_delta
= 0;
795 if (everything_local(&ref
, nr_match
, match
)) {
799 if (find_common(fd
, sha1
, ref
) < 0)
801 /* When cloning, it is not unusual to have
804 warning("no common commits");
806 if (args
.stateless_rpc
)
808 if (get_pack(fd
, pack_lockfile
))
809 die("git fetch-pack: fetch failed.");
815 static int remove_duplicates(int nr_heads
, char **heads
)
819 for (src
= dst
= 0; src
< nr_heads
; src
++) {
820 /* If heads[src] is different from any of
821 * heads[0..dst], push it in.
824 for (i
= 0; i
< dst
; i
++) {
825 if (!strcmp(heads
[i
], heads
[src
]))
831 heads
[dst
] = heads
[src
];
837 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
839 if (strcmp(var
, "fetch.unpacklimit") == 0) {
840 fetch_unpack_limit
= git_config_int(var
, value
);
844 if (strcmp(var
, "transfer.unpacklimit") == 0) {
845 transfer_unpack_limit
= git_config_int(var
, value
);
849 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
850 prefer_ofs_delta
= git_config_bool(var
, value
);
854 return git_default_config(var
, value
, cb
);
857 static struct lock_file lock
;
859 static void fetch_pack_setup(void)
861 static int did_setup
;
864 git_config(fetch_pack_config
, NULL
);
865 if (0 <= transfer_unpack_limit
)
866 unpack_limit
= transfer_unpack_limit
;
867 else if (0 <= fetch_unpack_limit
)
868 unpack_limit
= fetch_unpack_limit
;
872 int cmd_fetch_pack(int argc
, const char **argv
, const char *prefix
)
874 int i
, ret
, nr_heads
;
875 struct ref
*ref
= NULL
;
876 char *dest
= NULL
, **heads
;
878 char *pack_lockfile
= NULL
;
879 char **pack_lockfile_ptr
= NULL
;
880 struct child_process
*conn
;
882 packet_trace_identity("fetch-pack");
886 for (i
= 1; i
< argc
; i
++) {
887 const char *arg
= argv
[i
];
890 if (!prefixcmp(arg
, "--upload-pack=")) {
891 args
.uploadpack
= arg
+ 14;
894 if (!prefixcmp(arg
, "--exec=")) {
895 args
.uploadpack
= arg
+ 7;
898 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
902 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
903 args
.lock_pack
= args
.keep_pack
;
907 if (!strcmp("--thin", arg
)) {
908 args
.use_thin_pack
= 1;
911 if (!strcmp("--include-tag", arg
)) {
912 args
.include_tag
= 1;
915 if (!strcmp("--all", arg
)) {
919 if (!strcmp("-v", arg
)) {
923 if (!prefixcmp(arg
, "--depth=")) {
924 args
.depth
= strtol(arg
+ 8, NULL
, 0);
927 if (!strcmp("--no-progress", arg
)) {
928 args
.no_progress
= 1;
931 if (!strcmp("--stateless-rpc", arg
)) {
932 args
.stateless_rpc
= 1;
935 if (!strcmp("--lock-pack", arg
)) {
937 pack_lockfile_ptr
= &pack_lockfile
;
940 usage(fetch_pack_usage
);
943 heads
= (char **)(argv
+ i
+ 1);
944 nr_heads
= argc
- i
- 1;
948 usage(fetch_pack_usage
);
950 if (args
.stateless_rpc
) {
955 conn
= git_connect(fd
, (char *)dest
, args
.uploadpack
,
956 args
.verbose
? CONNECT_VERBOSE
: 0);
959 get_remote_heads(fd
[0], &ref
, 0, NULL
, 0, NULL
);
961 ref
= fetch_pack(&args
, fd
, conn
, ref
, dest
,
962 nr_heads
, heads
, pack_lockfile_ptr
);
964 printf("lock %s\n", pack_lockfile
);
969 if (finish_connect(conn
))
973 if (!ret
&& nr_heads
) {
974 /* If the heads to pull were given, we should have
975 * consumed all of them by matching the remote.
976 * Otherwise, 'git fetch remote no-such-ref' would
977 * silently succeed without issuing an error.
979 for (i
= 0; i
< nr_heads
; i
++)
980 if (heads
[i
] && heads
[i
][0]) {
981 error("no such remote ref %s", heads
[i
]);
987 sha1_to_hex(ref
->old_sha1
), ref
->name
);
994 struct ref
*fetch_pack(struct fetch_pack_args
*my_args
,
995 int fd
[], struct child_process
*conn
,
996 const struct ref
*ref
,
1000 char **pack_lockfile
)
1003 struct ref
*ref_cpy
;
1006 if (&args
!= my_args
)
1007 memcpy(&args
, my_args
, sizeof(args
));
1008 if (args
.depth
> 0) {
1009 if (stat(git_path("shallow"), &st
))
1013 if (heads
&& nr_heads
)
1014 nr_heads
= remove_duplicates(nr_heads
, heads
);
1016 packet_flush(fd
[1]);
1017 die("no matching remote head");
1019 ref_cpy
= do_fetch_pack(fd
, ref
, nr_heads
, heads
, pack_lockfile
);
1021 if (args
.depth
> 0) {
1022 struct cache_time mtime
;
1023 struct strbuf sb
= STRBUF_INIT
;
1024 char *shallow
= git_path("shallow");
1027 mtime
.sec
= st
.st_mtime
;
1028 mtime
.nsec
= ST_MTIME_NSEC(st
);
1029 if (stat(shallow
, &st
)) {
1031 die("shallow file was removed during fetch");
1032 } else if (st
.st_mtime
!= mtime
.sec
1034 || ST_MTIME_NSEC(st
) != mtime
.nsec
1037 die("shallow file was changed during fetch");
1039 fd
= hold_lock_file_for_update(&lock
, shallow
,
1041 if (!write_shallow_commits(&sb
, 0)
1042 || write_in_full(fd
, sb
.buf
, sb
.len
) != sb
.len
) {
1043 unlink_or_warn(shallow
);
1044 rollback_lock_file(&lock
);
1046 commit_lock_file(&lock
);
1048 strbuf_release(&sb
);
1051 reprepare_packed_git();