diff options
author | Jonathan Tan <jonathantanmy@google.com> | 2021-02-22 20:20:09 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2021-02-22 21:07:40 +0100 |
commit | 5476e1efded571e374cd97c7d69f17962ba1c44f (patch) | |
tree | 89b90c60cb783a579dfc10e045adb1499d47ece0 /pack-write.c | |
parent | fetch-pack: with packfile URIs, use index-pack arg (diff) | |
download | git-5476e1efded571e374cd97c7d69f17962ba1c44f.tar.xz git-5476e1efded571e374cd97c7d69f17962ba1c44f.zip |
fetch-pack: print and use dangling .gitmodules
Teach index-pack to print dangling .gitmodules links after its "keep" or
"pack" line instead of declaring an error, and teach fetch-pack to check
such lines printed.
This allows the tree side of the .gitmodules link to be in one packfile
and the blob side to be in another without failing the fsck check,
because it is now fetch-pack which checks such objects after all
packfiles have been downloaded and indexed (and not index-pack on an
individual packfile, as it is before this commit).
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'pack-write.c')
-rw-r--r-- | pack-write.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/pack-write.c b/pack-write.c index 3513665e1e..f66ea8e5a1 100644 --- a/pack-write.c +++ b/pack-write.c @@ -272,7 +272,7 @@ void fixup_pack_header_footer(int pack_fd, fsync_or_die(pack_fd, pack_name); } -char *index_pack_lockfile(int ip_out) +char *index_pack_lockfile(int ip_out, int *is_well_formed) { char packname[GIT_MAX_HEXSZ + 6]; const int len = the_hash_algo->hexsz + 6; @@ -286,11 +286,17 @@ char *index_pack_lockfile(int ip_out) */ if (read_in_full(ip_out, packname, len) == len && packname[len-1] == '\n') { const char *name; + + if (is_well_formed) + *is_well_formed = 1; packname[len-1] = 0; if (skip_prefix(packname, "keep\t", &name)) return xstrfmt("%s/pack/pack-%s.keep", get_object_directory(), name); + return NULL; } + if (is_well_formed) + *is_well_formed = 0; return NULL; } |