repack: enable bitmaps by default on bare repos
authorEric Wong <e@80x24.org>
Thu, 14 Mar 2019 09:12:54 +0000 (09:12 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 18 Mar 2019 05:09:54 +0000 (14:09 +0900)
A typical use case for bare repos is for serving clones and
fetches to clients. Enable bitmaps by default on bare repos to
make it easier for admins to host git repos in a performant way.

Signed-off-by: Eric Wong <e@80x24.org>
Helped-by: Jeff King <peff@peff.net>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/repack.txt
builtin/repack.c
t/t7700-repack.sh
index a5c37813fdad63791d2be8b09bc2ef128fd4a37e..9c413e177e02c6f28865ed79d84de3c5ccf43dd9 100644 (file)
@@ -24,4 +24,4 @@ repack.writeBitmaps::
        packs created for clones and fetches, at the cost of some disk
        space and extra time spent on the initial repack.  This has
        no effect if multiple packfiles are created.
-       Defaults to false.
+       Defaults to true on bare repos, false otherwise.
index 67f8978043a43988d653092f83f21bd5baad9751..caca11392713eb92816d1e503f286bfe0d9be78a 100644 (file)
@@ -14,7 +14,7 @@
 
 static int delta_base_offset = 1;
 static int pack_kept_objects = -1;
-static int write_bitmaps;
+static int write_bitmaps = -1;
 static int use_delta_islands;
 static char *packdir, *packtmp;
 
@@ -343,6 +343,9 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
            (unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE)))
                die(_("--keep-unreachable and -A are incompatible"));
 
+       if (write_bitmaps < 0)
+               write_bitmaps = (pack_everything & ALL_INTO_ONE) &&
+                                is_bare_repository();
        if (pack_kept_objects < 0)
                pack_kept_objects = write_bitmaps;
 
index 6162e2a8e66f6f0e42e0a8ba6ee3b728e8e84918..86d05160a3589cefd7ad21dbf64c655658f26342 100755 (executable)
@@ -221,5 +221,22 @@ test_expect_success 'repack --keep-pack' '
        )
 '
 
-test_done
+test_expect_success 'bitmaps are created by default in bare repos' '
+       git clone --bare .git bare.git &&
+       git -C bare.git repack -ad &&
+       bitmap=$(ls bare.git/objects/pack/*.bitmap) &&
+       test_path_is_file "$bitmap"
+'
+
+test_expect_success 'incremental repack does not complain' '
+       git -C bare.git repack -q 2>repack.err &&
+       test_must_be_empty repack.err
+'
 
+test_expect_success 'bitmaps can be disabled on bare repos' '
+       git -c repack.writeBitmaps=false -C bare.git repack -ad &&
+       bitmap=$(ls bare.git/objects/pack/*.bitmap 2>/dev/null || :) &&
+       test -z "$bitmap"
+'
+
+test_done