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 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
190 static char line
[1000];
191 int len
= packet_read_line(fd
, line
, sizeof(line
));
194 die("git fetch-pack: expected ACK/NAK, got EOF");
195 if (line
[len
-1] == '\n')
197 if (!strcmp(line
, "NAK"))
199 if (!prefixcmp(line
, "ACK ")) {
200 if (!get_sha1_hex(line
+4, result_sha1
)) {
201 if (strstr(line
+45, "continue"))
203 if (strstr(line
+45, "common"))
205 if (strstr(line
+45, "ready"))
210 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
213 static void send_request(int fd
, struct strbuf
*buf
)
215 if (args
.stateless_rpc
) {
216 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
219 safe_write(fd
, buf
->buf
, buf
->len
);
222 static void insert_one_alternate_ref(const struct ref
*ref
, void *unused
)
224 rev_list_insert_ref(NULL
, ref
->old_sha1
, 0, NULL
);
227 static void insert_alternate_refs(void)
229 foreach_alt_odb(refs_from_alternate_cb
, insert_one_alternate_ref
);
232 #define INITIAL_FLUSH 16
233 #define PIPESAFE_FLUSH 32
234 #define LARGE_FLUSH 1024
236 static int next_flush(int count
)
238 int flush_limit
= args
.stateless_rpc
? LARGE_FLUSH
: PIPESAFE_FLUSH
;
240 if (count
< flush_limit
)
243 count
+= flush_limit
;
247 static int find_common(int fd
[2], unsigned char *result_sha1
,
251 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
252 const unsigned char *sha1
;
253 unsigned in_vain
= 0;
254 int got_continue
= 0;
256 struct strbuf req_buf
= STRBUF_INIT
;
257 size_t state_len
= 0;
259 if (args
.stateless_rpc
&& multi_ack
== 1)
260 die("--stateless-rpc requires multi_ack_detailed");
262 for_each_ref(clear_marks
, NULL
);
265 for_each_ref(rev_list_insert_ref
, NULL
);
266 insert_alternate_refs();
269 for ( ; refs
; refs
= refs
->next
) {
270 unsigned char *remote
= refs
->old_sha1
;
271 const char *remote_hex
;
275 * If that object is complete (i.e. it is an ancestor of a
276 * local ref), we tell them we have it but do not have to
277 * tell them about its ancestors, which they already know
280 * We use lookup_object here because we are only
281 * interested in the case we *know* the object is
282 * reachable and we have already scanned it.
284 if (((o
= lookup_object(remote
)) != NULL
) &&
285 (o
->flags
& COMPLETE
)) {
289 remote_hex
= sha1_to_hex(remote
);
291 struct strbuf c
= STRBUF_INIT
;
292 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
293 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
294 if (no_done
) strbuf_addstr(&c
, " no-done");
295 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
296 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
297 if (args
.use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
298 if (args
.no_progress
) strbuf_addstr(&c
, " no-progress");
299 if (args
.include_tag
) strbuf_addstr(&c
, " include-tag");
300 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
301 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
304 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
309 strbuf_release(&req_buf
);
314 if (is_repository_shallow())
315 write_shallow_commits(&req_buf
, 1);
317 packet_buf_write(&req_buf
, "deepen %d", args
.depth
);
318 packet_buf_flush(&req_buf
);
319 state_len
= req_buf
.len
;
321 if (args
.depth
> 0) {
323 unsigned char sha1
[20];
325 send_request(fd
[1], &req_buf
);
326 while (packet_read_line(fd
[0], line
, sizeof(line
))) {
327 if (!prefixcmp(line
, "shallow ")) {
328 if (get_sha1_hex(line
+ 8, sha1
))
329 die("invalid shallow line: %s", line
);
330 register_shallow(sha1
);
333 if (!prefixcmp(line
, "unshallow ")) {
334 if (get_sha1_hex(line
+ 10, sha1
))
335 die("invalid unshallow line: %s", line
);
336 if (!lookup_object(sha1
))
337 die("object not found: %s", line
);
338 /* make sure that it is parsed as shallow */
339 if (!parse_object(sha1
))
340 die("error in object: %s", line
);
341 if (unregister_shallow(sha1
))
342 die("no shallow found: %s", line
);
345 die("expected shallow/unshallow, got %s", line
);
347 } else if (!args
.stateless_rpc
)
348 send_request(fd
[1], &req_buf
);
350 if (!args
.stateless_rpc
) {
351 /* If we aren't using the stateless-rpc interface
352 * we don't need to retain the headers.
354 strbuf_setlen(&req_buf
, 0);
360 while ((sha1
= get_rev())) {
361 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
363 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
365 if (flush_at
<= ++count
) {
368 packet_buf_flush(&req_buf
);
369 send_request(fd
[1], &req_buf
);
370 strbuf_setlen(&req_buf
, state_len
);
372 flush_at
= next_flush(count
);
375 * We keep one window "ahead" of the other side, and
376 * will wait for an ACK only on the next one
378 if (!args
.stateless_rpc
&& count
== INITIAL_FLUSH
)
381 consume_shallow_list(fd
[0]);
383 ack
= get_ack(fd
[0], result_sha1
);
384 if (args
.verbose
&& ack
)
385 fprintf(stderr
, "got ack %d %s\n", ack
,
386 sha1_to_hex(result_sha1
));
396 struct commit
*commit
=
397 lookup_commit(result_sha1
);
398 if (args
.stateless_rpc
400 && !(commit
->object
.flags
& COMMON
)) {
401 /* We need to replay the have for this object
402 * on the next RPC request so the peer knows
403 * it is in common with us.
405 const char *hex
= sha1_to_hex(result_sha1
);
406 packet_buf_write(&req_buf
, "have %s\n", hex
);
407 state_len
= req_buf
.len
;
409 mark_common(commit
, 0, 1);
413 if (ack
== ACK_ready
) {
422 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
424 fprintf(stderr
, "giving up\n");
430 if (!got_ready
|| !no_done
) {
431 packet_buf_write(&req_buf
, "done\n");
432 send_request(fd
[1], &req_buf
);
435 fprintf(stderr
, "done\n");
440 strbuf_release(&req_buf
);
442 consume_shallow_list(fd
[0]);
443 while (flushes
|| multi_ack
) {
444 int ack
= get_ack(fd
[0], result_sha1
);
447 fprintf(stderr
, "got ack (%d) %s\n", ack
,
448 sha1_to_hex(result_sha1
));
456 /* it is no error to fetch into a completely empty repo */
457 return count
? retval
: 0;
460 static struct commit_list
*complete
;
462 static int mark_complete(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
464 struct object
*o
= parse_object(sha1
);
466 while (o
&& o
->type
== OBJ_TAG
) {
467 struct tag
*t
= (struct tag
*) o
;
469 break; /* broken repository */
470 o
->flags
|= COMPLETE
;
471 o
= parse_object(t
->tagged
->sha1
);
473 if (o
&& o
->type
== OBJ_COMMIT
) {
474 struct commit
*commit
= (struct commit
*)o
;
475 commit
->object
.flags
|= COMPLETE
;
476 commit_list_insert_by_date(commit
, &complete
);
481 static void mark_recent_complete_commits(unsigned long cutoff
)
483 while (complete
&& cutoff
<= complete
->item
->date
) {
485 fprintf(stderr
, "Marking %s as complete\n",
486 sha1_to_hex(complete
->item
->object
.sha1
));
487 pop_most_recent_commit(&complete
, COMPLETE
);
491 static void filter_refs(struct ref
**refs
, int nr_match
, char **match
)
493 struct ref
**return_refs
;
494 struct ref
*newlist
= NULL
;
495 struct ref
**newtail
= &newlist
;
496 struct ref
*ref
, *next
;
497 struct ref
*fastarray
[32];
499 if (nr_match
&& !args
.fetch_all
) {
500 if (ARRAY_SIZE(fastarray
) < nr_match
)
501 return_refs
= xcalloc(nr_match
, sizeof(struct ref
*));
503 return_refs
= fastarray
;
504 memset(return_refs
, 0, sizeof(struct ref
*) * nr_match
);
510 for (ref
= *refs
; ref
; ref
= next
) {
512 if (!memcmp(ref
->name
, "refs/", 5) &&
513 check_ref_format(ref
->name
+ 5))
515 else if (args
.fetch_all
&&
516 (!args
.depth
|| prefixcmp(ref
->name
, "refs/tags/") )) {
519 newtail
= &ref
->next
;
523 int order
= path_match(ref
->name
, nr_match
, match
);
525 return_refs
[order
-1] = ref
;
526 continue; /* we will link it later */
532 if (!args
.fetch_all
) {
534 for (i
= 0; i
< nr_match
; i
++) {
535 ref
= return_refs
[i
];
539 newtail
= &ref
->next
;
542 if (return_refs
!= fastarray
)
548 static int everything_local(struct ref
**refs
, int nr_match
, char **match
)
552 unsigned long cutoff
= 0;
554 save_commit_buffer
= 0;
556 for (ref
= *refs
; ref
; ref
= ref
->next
) {
559 o
= parse_object(ref
->old_sha1
);
563 /* We already have it -- which may mean that we were
564 * in sync with the other side at some time after
565 * that (it is OK if we guess wrong here).
567 if (o
->type
== OBJ_COMMIT
) {
568 struct commit
*commit
= (struct commit
*)o
;
569 if (!cutoff
|| cutoff
< commit
->date
)
570 cutoff
= commit
->date
;
575 for_each_ref(mark_complete
, NULL
);
577 mark_recent_complete_commits(cutoff
);
581 * Mark all complete remote refs as common refs.
582 * Don't mark them common yet; the server has to be told so first.
584 for (ref
= *refs
; ref
; ref
= ref
->next
) {
585 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
588 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
591 if (!(o
->flags
& SEEN
)) {
592 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
594 mark_common((struct commit
*)o
, 1, 1);
598 filter_refs(refs
, nr_match
, match
);
600 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
601 const unsigned char *remote
= ref
->old_sha1
;
602 unsigned char local
[20];
605 o
= lookup_object(remote
);
606 if (!o
|| !(o
->flags
& COMPLETE
)) {
611 "want %s (%s)\n", sha1_to_hex(remote
),
616 hashcpy(ref
->new_sha1
, local
);
620 "already have %s (%s)\n", sha1_to_hex(remote
),
626 static int sideband_demux(int in
, int out
, void *data
)
630 int ret
= recv_sideband("fetch-pack", xd
[0], out
);
635 static int get_pack(int xd
[2], char **pack_lockfile
)
638 const char *argv
[20];
642 int do_keep
= args
.keep_pack
;
643 struct child_process cmd
;
645 memset(&demux
, 0, sizeof(demux
));
647 /* xd[] is talking with upload-pack; subprocess reads from
648 * xd[0], spits out band#2 to stderr, and feeds us band#1
649 * through demux->out.
651 demux
.proc
= sideband_demux
;
654 if (start_async(&demux
))
655 die("fetch-pack: unable to fork off sideband"
661 memset(&cmd
, 0, sizeof(cmd
));
665 if (!args
.keep_pack
&& unpack_limit
) {
666 struct pack_header header
;
668 if (read_pack_header(demux
.out
, &header
))
669 die("protocol error: bad pack header");
670 snprintf(hdr_arg
, sizeof(hdr_arg
),
671 "--pack_header=%"PRIu32
",%"PRIu32
,
672 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
673 if (ntohl(header
.hdr_entries
) < unpack_limit
)
682 *av
++ = "index-pack";
684 if (!args
.quiet
&& !args
.no_progress
)
686 if (args
.use_thin_pack
)
687 *av
++ = "--fix-thin";
688 if (args
.lock_pack
|| unpack_limit
) {
689 int s
= sprintf(keep_arg
,
690 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
691 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
692 strcpy(keep_arg
+ s
, "localhost");
697 *av
++ = "unpack-objects";
707 if (start_command(&cmd
))
708 die("fetch-pack: unable to fork off %s", argv
[0]);
709 if (do_keep
&& pack_lockfile
) {
710 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
714 if (finish_command(&cmd
))
715 die("%s failed", argv
[0]);
716 if (use_sideband
&& finish_async(&demux
))
717 die("error in sideband demultiplexer");
721 static struct ref
*do_fetch_pack(int fd
[2],
722 const struct ref
*orig_ref
,
725 char **pack_lockfile
)
727 struct ref
*ref
= copy_ref_list(orig_ref
);
728 unsigned char sha1
[20];
730 if (is_repository_shallow() && !server_supports("shallow"))
731 die("Server does not support shallow clients");
732 if (server_supports("multi_ack_detailed")) {
734 fprintf(stderr
, "Server supports multi_ack_detailed\n");
736 if (server_supports("no-done")) {
738 fprintf(stderr
, "Server supports no-done\n");
739 if (args
.stateless_rpc
)
743 else if (server_supports("multi_ack")) {
745 fprintf(stderr
, "Server supports multi_ack\n");
748 if (server_supports("side-band-64k")) {
750 fprintf(stderr
, "Server supports side-band-64k\n");
753 else if (server_supports("side-band")) {
755 fprintf(stderr
, "Server supports side-band\n");
758 if (server_supports("ofs-delta")) {
760 fprintf(stderr
, "Server supports ofs-delta\n");
762 prefer_ofs_delta
= 0;
763 if (everything_local(&ref
, nr_match
, match
)) {
767 if (find_common(fd
, sha1
, ref
) < 0)
769 /* When cloning, it is not unusual to have
772 warning("no common commits");
774 if (args
.stateless_rpc
)
776 if (get_pack(fd
, pack_lockfile
))
777 die("git fetch-pack: fetch failed.");
783 static int remove_duplicates(int nr_heads
, char **heads
)
787 for (src
= dst
= 0; src
< nr_heads
; src
++) {
788 /* If heads[src] is different from any of
789 * heads[0..dst], push it in.
792 for (i
= 0; i
< dst
; i
++) {
793 if (!strcmp(heads
[i
], heads
[src
]))
799 heads
[dst
] = heads
[src
];
805 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
807 if (strcmp(var
, "fetch.unpacklimit") == 0) {
808 fetch_unpack_limit
= git_config_int(var
, value
);
812 if (strcmp(var
, "transfer.unpacklimit") == 0) {
813 transfer_unpack_limit
= git_config_int(var
, value
);
817 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
818 prefer_ofs_delta
= git_config_bool(var
, value
);
822 return git_default_config(var
, value
, cb
);
825 static struct lock_file lock
;
827 static void fetch_pack_setup(void)
829 static int did_setup
;
832 git_config(fetch_pack_config
, NULL
);
833 if (0 <= transfer_unpack_limit
)
834 unpack_limit
= transfer_unpack_limit
;
835 else if (0 <= fetch_unpack_limit
)
836 unpack_limit
= fetch_unpack_limit
;
840 int cmd_fetch_pack(int argc
, const char **argv
, const char *prefix
)
842 int i
, ret
, nr_heads
;
843 struct ref
*ref
= NULL
;
844 char *dest
= NULL
, **heads
;
846 char *pack_lockfile
= NULL
;
847 char **pack_lockfile_ptr
= NULL
;
848 struct child_process
*conn
;
850 packet_trace_identity("fetch-pack");
854 for (i
= 1; i
< argc
; i
++) {
855 const char *arg
= argv
[i
];
858 if (!prefixcmp(arg
, "--upload-pack=")) {
859 args
.uploadpack
= arg
+ 14;
862 if (!prefixcmp(arg
, "--exec=")) {
863 args
.uploadpack
= arg
+ 7;
866 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
870 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
871 args
.lock_pack
= args
.keep_pack
;
875 if (!strcmp("--thin", arg
)) {
876 args
.use_thin_pack
= 1;
879 if (!strcmp("--include-tag", arg
)) {
880 args
.include_tag
= 1;
883 if (!strcmp("--all", arg
)) {
887 if (!strcmp("-v", arg
)) {
891 if (!prefixcmp(arg
, "--depth=")) {
892 args
.depth
= strtol(arg
+ 8, NULL
, 0);
895 if (!strcmp("--no-progress", arg
)) {
896 args
.no_progress
= 1;
899 if (!strcmp("--stateless-rpc", arg
)) {
900 args
.stateless_rpc
= 1;
903 if (!strcmp("--lock-pack", arg
)) {
905 pack_lockfile_ptr
= &pack_lockfile
;
908 usage(fetch_pack_usage
);
911 heads
= (char **)(argv
+ i
+ 1);
912 nr_heads
= argc
- i
- 1;
916 usage(fetch_pack_usage
);
918 if (args
.stateless_rpc
) {
923 conn
= git_connect(fd
, (char *)dest
, args
.uploadpack
,
924 args
.verbose
? CONNECT_VERBOSE
: 0);
927 get_remote_heads(fd
[0], &ref
, 0, NULL
, 0, NULL
);
929 ref
= fetch_pack(&args
, fd
, conn
, ref
, dest
,
930 nr_heads
, heads
, pack_lockfile_ptr
);
932 printf("lock %s\n", pack_lockfile
);
937 if (finish_connect(conn
))
941 if (!ret
&& nr_heads
) {
942 /* If the heads to pull were given, we should have
943 * consumed all of them by matching the remote.
944 * Otherwise, 'git fetch remote no-such-ref' would
945 * silently succeed without issuing an error.
947 for (i
= 0; i
< nr_heads
; i
++)
948 if (heads
[i
] && heads
[i
][0]) {
949 error("no such remote ref %s", heads
[i
]);
955 sha1_to_hex(ref
->old_sha1
), ref
->name
);
962 struct ref
*fetch_pack(struct fetch_pack_args
*my_args
,
963 int fd
[], struct child_process
*conn
,
964 const struct ref
*ref
,
968 char **pack_lockfile
)
974 if (&args
!= my_args
)
975 memcpy(&args
, my_args
, sizeof(args
));
976 if (args
.depth
> 0) {
977 if (stat(git_path("shallow"), &st
))
981 if (heads
&& nr_heads
)
982 nr_heads
= remove_duplicates(nr_heads
, heads
);
985 die("no matching remote head");
987 ref_cpy
= do_fetch_pack(fd
, ref
, nr_heads
, heads
, pack_lockfile
);
989 if (args
.depth
> 0) {
990 struct cache_time mtime
;
991 struct strbuf sb
= STRBUF_INIT
;
992 char *shallow
= git_path("shallow");
995 mtime
.sec
= st
.st_mtime
;
996 mtime
.nsec
= ST_MTIME_NSEC(st
);
997 if (stat(shallow
, &st
)) {
999 die("shallow file was removed during fetch");
1000 } else if (st
.st_mtime
!= mtime
.sec
1002 || ST_MTIME_NSEC(st
) != mtime
.nsec
1005 die("shallow file was changed during fetch");
1007 fd
= hold_lock_file_for_update(&lock
, shallow
,
1009 if (!write_shallow_commits(&sb
, 0)
1010 || write_in_full(fd
, sb
.buf
, sb
.len
) != sb
.len
) {
1011 unlink_or_warn(shallow
);
1012 rollback_lock_file(&lock
);
1014 commit_lock_file(&lock
);
1016 strbuf_release(&sb
);
1019 reprepare_packed_git();