summaryrefslogtreecommitdiff
path: root/pack-write.c
diff options
context:
space:
mode:
authorJonathan Tan <jonathantanmy@google.com>2021-02-22 19:20:09 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-02-22 20:07:40 (GMT)
commit5476e1efded571e374cd97c7d69f17962ba1c44f (patch)
tree89b90c60cb783a579dfc10e045adb1499d47ece0 /pack-write.c
parentb664e9ffa153189dae9b88f32d1c5fedcf85056a (diff)
downloadgit-5476e1efded571e374cd97c7d69f17962ba1c44f.zip
git-5476e1efded571e374cd97c7d69f17962ba1c44f.tar.gz
git-5476e1efded571e374cd97c7d69f17962ba1c44f.tar.bz2
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.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/pack-write.c b/pack-write.c
index 3513665..f66ea8e 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;
}