9 #include "fetch-pack.h"
11 #include "run-command.h"
13 static int transfer_unpack_limit
= -1;
14 static int fetch_unpack_limit
= -1;
15 static int unpack_limit
= 100;
16 static int prefer_ofs_delta
= 1;
17 static int no_done
= 0;
18 static struct fetch_pack_args args
= {
19 /* .uploadpack = */ "git-upload-pack",
22 static const char fetch_pack_usage
[] =
23 "git fetch-pack [--all] [--quiet|-q] [--keep|-k] [--thin] [--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] [--no-progress] [-v] [<host>:]<directory> [<refs>...]";
25 #define COMPLETE (1U << 0)
26 #define COMMON (1U << 1)
27 #define COMMON_REF (1U << 2)
28 #define SEEN (1U << 3)
29 #define POPPED (1U << 4)
34 * After sending this many "have"s if we do not get any new ACK , we
35 * give up traversing our history.
37 #define MAX_IN_VAIN 256
39 static struct commit_list
*rev_list
;
40 static int non_common_revs
, multi_ack
, use_sideband
;
42 static void rev_list_push(struct commit
*commit
, int mark
)
44 if (!(commit
->object
.flags
& mark
)) {
45 commit
->object
.flags
|= mark
;
47 if (!(commit
->object
.parsed
))
48 if (parse_commit(commit
))
51 commit_list_insert_by_date(commit
, &rev_list
);
53 if (!(commit
->object
.flags
& COMMON
))
58 static int rev_list_insert_ref(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
60 struct object
*o
= deref_tag(parse_object(sha1
), path
, 0);
62 if (o
&& o
->type
== OBJ_COMMIT
)
63 rev_list_push((struct commit
*)o
, SEEN
);
68 static int clear_marks(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
70 struct object
*o
= deref_tag(parse_object(sha1
), path
, 0);
72 if (o
&& o
->type
== OBJ_COMMIT
)
73 clear_commit_marks((struct commit
*)o
,
74 COMMON
| COMMON_REF
| SEEN
| POPPED
);
79 This function marks a rev and its ancestors as common.
80 In some cases, it is desirable to mark only the ancestors (for example
81 when only the server does not yet know that they are common).
84 static void mark_common(struct commit
*commit
,
85 int ancestors_only
, int dont_parse
)
87 if (commit
!= NULL
&& !(commit
->object
.flags
& COMMON
)) {
88 struct object
*o
= (struct object
*)commit
;
93 if (!(o
->flags
& SEEN
))
94 rev_list_push(commit
, SEEN
);
96 struct commit_list
*parents
;
98 if (!ancestors_only
&& !(o
->flags
& POPPED
))
100 if (!o
->parsed
&& !dont_parse
)
101 if (parse_commit(commit
))
104 for (parents
= commit
->parents
;
106 parents
= parents
->next
)
107 mark_common(parents
->item
, 0, dont_parse
);
113 Get the next rev to send, ignoring the common.
116 static const unsigned char *get_rev(void)
118 struct commit
*commit
= NULL
;
120 while (commit
== NULL
) {
122 struct commit_list
*parents
;
124 if (rev_list
== NULL
|| non_common_revs
== 0)
127 commit
= rev_list
->item
;
128 if (!commit
->object
.parsed
)
129 parse_commit(commit
);
130 parents
= commit
->parents
;
132 commit
->object
.flags
|= POPPED
;
133 if (!(commit
->object
.flags
& COMMON
))
136 if (commit
->object
.flags
& COMMON
) {
137 /* do not send "have", and ignore ancestors */
139 mark
= COMMON
| SEEN
;
140 } else if (commit
->object
.flags
& COMMON_REF
)
141 /* send "have", and ignore ancestors */
142 mark
= COMMON
| SEEN
;
144 /* send "have", also for its ancestors */
148 if (!(parents
->item
->object
.flags
& SEEN
))
149 rev_list_push(parents
->item
, mark
);
151 mark_common(parents
->item
, 1, 0);
152 parents
= parents
->next
;
155 rev_list
= rev_list
->next
;
158 return commit
->object
.sha1
;
169 static void consume_shallow_list(int fd
)
171 if (args
.stateless_rpc
&& args
.depth
> 0) {
172 /* If we sent a depth we will get back "duplicate"
173 * shallow and unshallow commands every time there
174 * is a block of have lines exchanged.
177 while (packet_read_line(fd
, line
, sizeof(line
))) {
178 if (!prefixcmp(line
, "shallow "))
180 if (!prefixcmp(line
, "unshallow "))
182 die("git fetch-pack: expected shallow list");
187 static enum ack_type
get_ack(int fd
, unsigned char *result_sha1
)
189 static char line
[1000];
190 int len
= packet_read_line(fd
, line
, sizeof(line
));
193 die("git fetch-pack: expected ACK/NAK, got EOF");
194 if (line
[len
-1] == '\n')
196 if (!strcmp(line
, "NAK"))
198 if (!prefixcmp(line
, "ACK ")) {
199 if (!get_sha1_hex(line
+4, result_sha1
)) {
200 if (strstr(line
+45, "continue"))
202 if (strstr(line
+45, "common"))
204 if (strstr(line
+45, "ready"))
209 die("git fetch_pack: expected ACK/NAK, got '%s'", line
);
212 static void send_request(int fd
, struct strbuf
*buf
)
214 if (args
.stateless_rpc
) {
215 send_sideband(fd
, -1, buf
->buf
, buf
->len
, LARGE_PACKET_MAX
);
218 safe_write(fd
, buf
->buf
, buf
->len
);
221 #define INITIAL_FLUSH 16
222 #define LARGE_FLUSH 1024
224 static int next_flush(int count
)
226 if (count
< INITIAL_FLUSH
* 2)
227 count
+= INITIAL_FLUSH
;
228 else if (count
< LARGE_FLUSH
)
231 count
+= LARGE_FLUSH
;
235 static int find_common(int fd
[2], unsigned char *result_sha1
,
239 int count
= 0, flushes
= 0, flush_at
= INITIAL_FLUSH
, retval
;
240 const unsigned char *sha1
;
241 unsigned in_vain
= 0;
242 int got_continue
= 0;
244 struct strbuf req_buf
= STRBUF_INIT
;
245 size_t state_len
= 0;
247 if (args
.stateless_rpc
&& multi_ack
== 1)
248 die("--stateless-rpc requires multi_ack_detailed");
250 for_each_ref(clear_marks
, NULL
);
253 for_each_ref(rev_list_insert_ref
, NULL
);
256 for ( ; refs
; refs
= refs
->next
) {
257 unsigned char *remote
= refs
->old_sha1
;
258 const char *remote_hex
;
262 * If that object is complete (i.e. it is an ancestor of a
263 * local ref), we tell them we have it but do not have to
264 * tell them about its ancestors, which they already know
267 * We use lookup_object here because we are only
268 * interested in the case we *know* the object is
269 * reachable and we have already scanned it.
271 if (((o
= lookup_object(remote
)) != NULL
) &&
272 (o
->flags
& COMPLETE
)) {
276 remote_hex
= sha1_to_hex(remote
);
278 struct strbuf c
= STRBUF_INIT
;
279 if (multi_ack
== 2) strbuf_addstr(&c
, " multi_ack_detailed");
280 if (multi_ack
== 1) strbuf_addstr(&c
, " multi_ack");
281 if (no_done
) strbuf_addstr(&c
, " no-done");
282 if (use_sideband
== 2) strbuf_addstr(&c
, " side-band-64k");
283 if (use_sideband
== 1) strbuf_addstr(&c
, " side-band");
284 if (args
.use_thin_pack
) strbuf_addstr(&c
, " thin-pack");
285 if (args
.no_progress
) strbuf_addstr(&c
, " no-progress");
286 if (args
.include_tag
) strbuf_addstr(&c
, " include-tag");
287 if (prefer_ofs_delta
) strbuf_addstr(&c
, " ofs-delta");
288 packet_buf_write(&req_buf
, "want %s%s\n", remote_hex
, c
.buf
);
291 packet_buf_write(&req_buf
, "want %s\n", remote_hex
);
296 strbuf_release(&req_buf
);
301 if (is_repository_shallow())
302 write_shallow_commits(&req_buf
, 1);
304 packet_buf_write(&req_buf
, "deepen %d", args
.depth
);
305 packet_buf_flush(&req_buf
);
306 state_len
= req_buf
.len
;
308 if (args
.depth
> 0) {
310 unsigned char sha1
[20];
312 send_request(fd
[1], &req_buf
);
313 while (packet_read_line(fd
[0], line
, sizeof(line
))) {
314 if (!prefixcmp(line
, "shallow ")) {
315 if (get_sha1_hex(line
+ 8, sha1
))
316 die("invalid shallow line: %s", line
);
317 register_shallow(sha1
);
320 if (!prefixcmp(line
, "unshallow ")) {
321 if (get_sha1_hex(line
+ 10, sha1
))
322 die("invalid unshallow line: %s", line
);
323 if (!lookup_object(sha1
))
324 die("object not found: %s", line
);
325 /* make sure that it is parsed as shallow */
326 if (!parse_object(sha1
))
327 die("error in object: %s", line
);
328 if (unregister_shallow(sha1
))
329 die("no shallow found: %s", line
);
332 die("expected shallow/unshallow, got %s", line
);
334 } else if (!args
.stateless_rpc
)
335 send_request(fd
[1], &req_buf
);
337 if (!args
.stateless_rpc
) {
338 /* If we aren't using the stateless-rpc interface
339 * we don't need to retain the headers.
341 strbuf_setlen(&req_buf
, 0);
347 while ((sha1
= get_rev())) {
348 packet_buf_write(&req_buf
, "have %s\n", sha1_to_hex(sha1
));
350 fprintf(stderr
, "have %s\n", sha1_to_hex(sha1
));
352 if (flush_at
<= ++count
) {
355 packet_buf_flush(&req_buf
);
356 send_request(fd
[1], &req_buf
);
357 strbuf_setlen(&req_buf
, state_len
);
359 flush_at
= next_flush(count
);
362 * We keep one window "ahead" of the other side, and
363 * will wait for an ACK only on the next one
365 if (!args
.stateless_rpc
&& count
== INITIAL_FLUSH
)
368 consume_shallow_list(fd
[0]);
370 ack
= get_ack(fd
[0], result_sha1
);
371 if (args
.verbose
&& ack
)
372 fprintf(stderr
, "got ack %d %s\n", ack
,
373 sha1_to_hex(result_sha1
));
383 struct commit
*commit
=
384 lookup_commit(result_sha1
);
385 if (args
.stateless_rpc
387 && !(commit
->object
.flags
& COMMON
)) {
388 /* We need to replay the have for this object
389 * on the next RPC request so the peer knows
390 * it is in common with us.
392 const char *hex
= sha1_to_hex(result_sha1
);
393 packet_buf_write(&req_buf
, "have %s\n", hex
);
394 state_len
= req_buf
.len
;
396 mark_common(commit
, 0, 1);
400 if (ack
== ACK_ready
) {
409 if (got_continue
&& MAX_IN_VAIN
< in_vain
) {
411 fprintf(stderr
, "giving up\n");
417 if (!got_ready
|| !no_done
) {
418 packet_buf_write(&req_buf
, "done\n");
419 send_request(fd
[1], &req_buf
);
422 fprintf(stderr
, "done\n");
427 strbuf_release(&req_buf
);
429 consume_shallow_list(fd
[0]);
430 while (flushes
|| multi_ack
) {
431 int ack
= get_ack(fd
[0], result_sha1
);
434 fprintf(stderr
, "got ack (%d) %s\n", ack
,
435 sha1_to_hex(result_sha1
));
443 /* it is no error to fetch into a completely empty repo */
444 return count
? retval
: 0;
447 static struct commit_list
*complete
;
449 static int mark_complete(const char *path
, const unsigned char *sha1
, int flag
, void *cb_data
)
451 struct object
*o
= parse_object(sha1
);
453 while (o
&& o
->type
== OBJ_TAG
) {
454 struct tag
*t
= (struct tag
*) o
;
456 break; /* broken repository */
457 o
->flags
|= COMPLETE
;
458 o
= parse_object(t
->tagged
->sha1
);
460 if (o
&& o
->type
== OBJ_COMMIT
) {
461 struct commit
*commit
= (struct commit
*)o
;
462 commit
->object
.flags
|= COMPLETE
;
463 commit_list_insert_by_date(commit
, &complete
);
468 static void mark_recent_complete_commits(unsigned long cutoff
)
470 while (complete
&& cutoff
<= complete
->item
->date
) {
472 fprintf(stderr
, "Marking %s as complete\n",
473 sha1_to_hex(complete
->item
->object
.sha1
));
474 pop_most_recent_commit(&complete
, COMPLETE
);
478 static void filter_refs(struct ref
**refs
, int nr_match
, char **match
)
480 struct ref
**return_refs
;
481 struct ref
*newlist
= NULL
;
482 struct ref
**newtail
= &newlist
;
483 struct ref
*ref
, *next
;
484 struct ref
*fastarray
[32];
486 if (nr_match
&& !args
.fetch_all
) {
487 if (ARRAY_SIZE(fastarray
) < nr_match
)
488 return_refs
= xcalloc(nr_match
, sizeof(struct ref
*));
490 return_refs
= fastarray
;
491 memset(return_refs
, 0, sizeof(struct ref
*) * nr_match
);
497 for (ref
= *refs
; ref
; ref
= next
) {
499 if (!memcmp(ref
->name
, "refs/", 5) &&
500 check_ref_format(ref
->name
+ 5))
502 else if (args
.fetch_all
&&
503 (!args
.depth
|| prefixcmp(ref
->name
, "refs/tags/") )) {
506 newtail
= &ref
->next
;
510 int order
= path_match(ref
->name
, nr_match
, match
);
512 return_refs
[order
-1] = ref
;
513 continue; /* we will link it later */
519 if (!args
.fetch_all
) {
521 for (i
= 0; i
< nr_match
; i
++) {
522 ref
= return_refs
[i
];
526 newtail
= &ref
->next
;
529 if (return_refs
!= fastarray
)
535 static int everything_local(struct ref
**refs
, int nr_match
, char **match
)
539 unsigned long cutoff
= 0;
541 save_commit_buffer
= 0;
543 for (ref
= *refs
; ref
; ref
= ref
->next
) {
546 o
= parse_object(ref
->old_sha1
);
550 /* We already have it -- which may mean that we were
551 * in sync with the other side at some time after
552 * that (it is OK if we guess wrong here).
554 if (o
->type
== OBJ_COMMIT
) {
555 struct commit
*commit
= (struct commit
*)o
;
556 if (!cutoff
|| cutoff
< commit
->date
)
557 cutoff
= commit
->date
;
562 for_each_ref(mark_complete
, NULL
);
564 mark_recent_complete_commits(cutoff
);
568 * Mark all complete remote refs as common refs.
569 * Don't mark them common yet; the server has to be told so first.
571 for (ref
= *refs
; ref
; ref
= ref
->next
) {
572 struct object
*o
= deref_tag(lookup_object(ref
->old_sha1
),
575 if (!o
|| o
->type
!= OBJ_COMMIT
|| !(o
->flags
& COMPLETE
))
578 if (!(o
->flags
& SEEN
)) {
579 rev_list_push((struct commit
*)o
, COMMON_REF
| SEEN
);
581 mark_common((struct commit
*)o
, 1, 1);
585 filter_refs(refs
, nr_match
, match
);
587 for (retval
= 1, ref
= *refs
; ref
; ref
= ref
->next
) {
588 const unsigned char *remote
= ref
->old_sha1
;
589 unsigned char local
[20];
592 o
= lookup_object(remote
);
593 if (!o
|| !(o
->flags
& COMPLETE
)) {
598 "want %s (%s)\n", sha1_to_hex(remote
),
603 hashcpy(ref
->new_sha1
, local
);
607 "already have %s (%s)\n", sha1_to_hex(remote
),
613 static int sideband_demux(int in
, int out
, void *data
)
617 int ret
= recv_sideband("fetch-pack", xd
[0], out
);
622 static int get_pack(int xd
[2], char **pack_lockfile
)
625 const char *argv
[20];
629 int do_keep
= args
.keep_pack
;
630 struct child_process cmd
;
632 memset(&demux
, 0, sizeof(demux
));
634 /* xd[] is talking with upload-pack; subprocess reads from
635 * xd[0], spits out band#2 to stderr, and feeds us band#1
636 * through demux->out.
638 demux
.proc
= sideband_demux
;
641 if (start_async(&demux
))
642 die("fetch-pack: unable to fork off sideband"
648 memset(&cmd
, 0, sizeof(cmd
));
652 if (!args
.keep_pack
&& unpack_limit
) {
653 struct pack_header header
;
655 if (read_pack_header(demux
.out
, &header
))
656 die("protocol error: bad pack header");
657 snprintf(hdr_arg
, sizeof(hdr_arg
),
658 "--pack_header=%"PRIu32
",%"PRIu32
,
659 ntohl(header
.hdr_version
), ntohl(header
.hdr_entries
));
660 if (ntohl(header
.hdr_entries
) < unpack_limit
)
669 *av
++ = "index-pack";
671 if (!args
.quiet
&& !args
.no_progress
)
673 if (args
.use_thin_pack
)
674 *av
++ = "--fix-thin";
675 if (args
.lock_pack
|| unpack_limit
) {
676 int s
= sprintf(keep_arg
,
677 "--keep=fetch-pack %"PRIuMAX
" on ", (uintmax_t) getpid());
678 if (gethostname(keep_arg
+ s
, sizeof(keep_arg
) - s
))
679 strcpy(keep_arg
+ s
, "localhost");
684 *av
++ = "unpack-objects";
694 if (start_command(&cmd
))
695 die("fetch-pack: unable to fork off %s", argv
[0]);
696 if (do_keep
&& pack_lockfile
) {
697 *pack_lockfile
= index_pack_lockfile(cmd
.out
);
701 if (finish_command(&cmd
))
702 die("%s failed", argv
[0]);
703 if (use_sideband
&& finish_async(&demux
))
704 die("error in sideband demultiplexer");
708 static struct ref
*do_fetch_pack(int fd
[2],
709 const struct ref
*orig_ref
,
712 char **pack_lockfile
)
714 struct ref
*ref
= copy_ref_list(orig_ref
);
715 unsigned char sha1
[20];
717 if (is_repository_shallow() && !server_supports("shallow"))
718 die("Server does not support shallow clients");
719 if (server_supports("multi_ack_detailed")) {
721 fprintf(stderr
, "Server supports multi_ack_detailed\n");
723 if (server_supports("no-done")) {
725 fprintf(stderr
, "Server supports no-done\n");
729 else if (server_supports("multi_ack")) {
731 fprintf(stderr
, "Server supports multi_ack\n");
734 if (server_supports("side-band-64k")) {
736 fprintf(stderr
, "Server supports side-band-64k\n");
739 else if (server_supports("side-band")) {
741 fprintf(stderr
, "Server supports side-band\n");
744 if (server_supports("ofs-delta")) {
746 fprintf(stderr
, "Server supports ofs-delta\n");
748 prefer_ofs_delta
= 0;
749 if (everything_local(&ref
, nr_match
, match
)) {
753 if (find_common(fd
, sha1
, ref
) < 0)
755 /* When cloning, it is not unusual to have
758 warning("no common commits");
760 if (args
.stateless_rpc
)
762 if (get_pack(fd
, pack_lockfile
))
763 die("git fetch-pack: fetch failed.");
769 static int remove_duplicates(int nr_heads
, char **heads
)
773 for (src
= dst
= 0; src
< nr_heads
; src
++) {
774 /* If heads[src] is different from any of
775 * heads[0..dst], push it in.
778 for (i
= 0; i
< dst
; i
++) {
779 if (!strcmp(heads
[i
], heads
[src
]))
785 heads
[dst
] = heads
[src
];
791 static int fetch_pack_config(const char *var
, const char *value
, void *cb
)
793 if (strcmp(var
, "fetch.unpacklimit") == 0) {
794 fetch_unpack_limit
= git_config_int(var
, value
);
798 if (strcmp(var
, "transfer.unpacklimit") == 0) {
799 transfer_unpack_limit
= git_config_int(var
, value
);
803 if (strcmp(var
, "repack.usedeltabaseoffset") == 0) {
804 prefer_ofs_delta
= git_config_bool(var
, value
);
808 return git_default_config(var
, value
, cb
);
811 static struct lock_file lock
;
813 static void fetch_pack_setup(void)
815 static int did_setup
;
818 git_config(fetch_pack_config
, NULL
);
819 if (0 <= transfer_unpack_limit
)
820 unpack_limit
= transfer_unpack_limit
;
821 else if (0 <= fetch_unpack_limit
)
822 unpack_limit
= fetch_unpack_limit
;
826 int cmd_fetch_pack(int argc
, const char **argv
, const char *prefix
)
828 int i
, ret
, nr_heads
;
829 struct ref
*ref
= NULL
;
830 char *dest
= NULL
, **heads
;
832 char *pack_lockfile
= NULL
;
833 char **pack_lockfile_ptr
= NULL
;
834 struct child_process
*conn
;
838 for (i
= 1; i
< argc
; i
++) {
839 const char *arg
= argv
[i
];
842 if (!prefixcmp(arg
, "--upload-pack=")) {
843 args
.uploadpack
= arg
+ 14;
846 if (!prefixcmp(arg
, "--exec=")) {
847 args
.uploadpack
= arg
+ 7;
850 if (!strcmp("--quiet", arg
) || !strcmp("-q", arg
)) {
854 if (!strcmp("--keep", arg
) || !strcmp("-k", arg
)) {
855 args
.lock_pack
= args
.keep_pack
;
859 if (!strcmp("--thin", arg
)) {
860 args
.use_thin_pack
= 1;
863 if (!strcmp("--include-tag", arg
)) {
864 args
.include_tag
= 1;
867 if (!strcmp("--all", arg
)) {
871 if (!strcmp("-v", arg
)) {
875 if (!prefixcmp(arg
, "--depth=")) {
876 args
.depth
= strtol(arg
+ 8, NULL
, 0);
879 if (!strcmp("--no-progress", arg
)) {
880 args
.no_progress
= 1;
883 if (!strcmp("--stateless-rpc", arg
)) {
884 args
.stateless_rpc
= 1;
887 if (!strcmp("--lock-pack", arg
)) {
889 pack_lockfile_ptr
= &pack_lockfile
;
892 usage(fetch_pack_usage
);
895 heads
= (char **)(argv
+ i
+ 1);
896 nr_heads
= argc
- i
- 1;
900 usage(fetch_pack_usage
);
902 if (args
.stateless_rpc
) {
907 conn
= git_connect(fd
, (char *)dest
, args
.uploadpack
,
908 args
.verbose
? CONNECT_VERBOSE
: 0);
911 get_remote_heads(fd
[0], &ref
, 0, NULL
, 0, NULL
);
913 ref
= fetch_pack(&args
, fd
, conn
, ref
, dest
,
914 nr_heads
, heads
, pack_lockfile_ptr
);
916 printf("lock %s\n", pack_lockfile
);
921 if (finish_connect(conn
))
925 if (!ret
&& nr_heads
) {
926 /* If the heads to pull were given, we should have
927 * consumed all of them by matching the remote.
928 * Otherwise, 'git fetch remote no-such-ref' would
929 * silently succeed without issuing an error.
931 for (i
= 0; i
< nr_heads
; i
++)
932 if (heads
[i
] && heads
[i
][0]) {
933 error("no such remote ref %s", heads
[i
]);
939 sha1_to_hex(ref
->old_sha1
), ref
->name
);
946 struct ref
*fetch_pack(struct fetch_pack_args
*my_args
,
947 int fd
[], struct child_process
*conn
,
948 const struct ref
*ref
,
952 char **pack_lockfile
)
958 if (&args
!= my_args
)
959 memcpy(&args
, my_args
, sizeof(args
));
960 if (args
.depth
> 0) {
961 if (stat(git_path("shallow"), &st
))
965 if (heads
&& nr_heads
)
966 nr_heads
= remove_duplicates(nr_heads
, heads
);
969 die("no matching remote head");
971 ref_cpy
= do_fetch_pack(fd
, ref
, nr_heads
, heads
, pack_lockfile
);
973 if (args
.depth
> 0) {
974 struct cache_time mtime
;
975 struct strbuf sb
= STRBUF_INIT
;
976 char *shallow
= git_path("shallow");
979 mtime
.sec
= st
.st_mtime
;
980 mtime
.nsec
= ST_MTIME_NSEC(st
);
981 if (stat(shallow
, &st
)) {
983 die("shallow file was removed during fetch");
984 } else if (st
.st_mtime
!= mtime
.sec
986 || ST_MTIME_NSEC(st
) != mtime
.nsec
989 die("shallow file was changed during fetch");
991 fd
= hold_lock_file_for_update(&lock
, shallow
,
993 if (!write_shallow_commits(&sb
, 0)
994 || write_in_full(fd
, sb
.buf
, sb
.len
) != sb
.len
) {
995 unlink_or_warn(shallow
);
996 rollback_lock_file(&lock
);
998 commit_lock_file(&lock
);
1000 strbuf_release(&sb
);
1003 reprepare_packed_git();