pack-objects: turn off bitmaps when we split packs
authorJeff King <peff@peff.net>
Fri, 17 Oct 2014 01:11:43 +0000 (21:11 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sun, 19 Oct 2014 22:08:38 +0000 (15:08 -0700)
If a pack.packSizeLimit is set, we may split the pack data
across multiple packfiles. This means we cannot generate
.bitmap files, as they require that all of the reachable
objects are in the same pack. We check that condition when
we are generating the list of objects to pack (and disable
bitmaps if we are not packing everything), but we forgot to
update it when we notice that we needed to split (which
doesn't happen until the actual write phase).

The resulting bitmaps are quite bogus (they mention entries
that do not exist in the pack!) and can cause a fetch or
push to send insufficient objects.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/pack-objects.c
t/t5310-pack-bitmaps.sh
index de36c60ca11d248013c2de42d196f1aff8a2937b..a6c91fa0022220fec5ce3e4004a0869ef93a9793 100644 (file)
@@ -812,6 +812,7 @@ static void write_pack_file(void)
                        fixup_pack_header_footer(fd, sha1, pack_tmp_name,
                                                 nr_written, sha1, offset);
                        close(fd);
+                       write_bitmap_index = 0;
                }
 
                if (!pack_to_stdout) {
index f4f02ba918535d5c40a30585a54469bc12ab96d3..2366fcffa77d3eada0254eb933596e69ba227113 100755 (executable)
@@ -170,4 +170,13 @@ test_expect_success JGIT 'jgit can read our bitmaps' '
        )
 '
 
+test_expect_success 'splitting packs does not generate bogus bitmaps' '
+       test-genrandom foo $((1024 * 1024)) >rand &&
+       git add rand &&
+       git commit -m "commit with big file" &&
+       git -c pack.packSizeLimit=500k repack -adb &&
+       git init --bare no-bitmaps.git &&
+       git -C no-bitmaps.git fetch .. HEAD
+'
+
 test_done