repack: enable bitmaps by default on bare repos

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>

Eric Wong committed Mar 14, 2019 at 09:12 UTC 36eba0323d3288a8d3dcb46e5067d88c07cee1ae
3 files changed +23 -3
Documentation/config/repack.txt
+1 -1
@@ -24,4 +24,4 @@ repack.writeBitmaps::
24 packs created for clones and fetches, at the cost of some disk
25 space and extra time spent on the initial repack. This has
26 no effect if multiple packfiles are created.
27 - Defaults to false.
27 + Defaults to true on bare repos, false otherwise.
builtin/repack.c
+4 -1
@@ -14,7 +14,7 @@
14
15 static int delta_base_offset = 1;
16 static int pack_kept_objects = -1;
17 -static int write_bitmaps;
17 +static int write_bitmaps = -1;
18 static int use_delta_islands;
19 static char *packdir, *packtmp;
20
@@ -343,6 +343,9 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
343 (unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE)))
344 die(_("--keep-unreachable and -A are incompatible"));
345
346 + if (write_bitmaps < 0)
347 + write_bitmaps = (pack_everything & ALL_INTO_ONE) &&
348 + is_bare_repository();
349 if (pack_kept_objects < 0)
350 pack_kept_objects = write_bitmaps;
351
t/t7700-repack.sh
+18 -1
@@ -221,5 +221,22 @@ test_expect_success 'repack --keep-pack' '
221 )
222 '
223
224 -test_done
224 +test_expect_success 'bitmaps are created by default in bare repos' '
225 + git clone --bare .git bare.git &&
226 + git -C bare.git repack -ad &&
227 + bitmap=$(ls bare.git/objects/pack/*.bitmap) &&
228 + test_path_is_file "$bitmap"
229 +'
230 +
231 +test_expect_success 'incremental repack does not complain' '
232 + git -C bare.git repack -q 2>repack.err &&
233 + test_must_be_empty repack.err
234 +'
235
236 +test_expect_success 'bitmaps can be disabled on bare repos' '
237 + git -c repack.writeBitmaps=false -C bare.git repack -ad &&
238 + bitmap=$(ls bare.git/objects/pack/*.bitmap 2>/dev/null || :) &&
239 + test -z "$bitmap"
240 +'
241 +
242 +test_done