]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-objects: introduce pack.allowPackReuse
authorJeff King <peff@peff.net>
Wed, 18 Dec 2019 11:25:43 +0000 (12:25 +0100)
committerJunio C Hamano <gitster@pobox.com>
Thu, 23 Jan 2020 18:51:50 +0000 (10:51 -0800)
Let's make it possible to configure if we want pack reuse or not.

The main reason it might not be wanted is probably debugging and
performance testing, though pack reuse _might_ cause larger packs,
because we wouldn't consider the reused objects as bases for
finding new deltas.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/pack.txt
builtin/pack-objects.c

index 9cdcfa7324784299f431d94b5237cc136aa585d1..6e64943311f11db2cfafea82543dad2cb9534166 100644 (file)
@@ -27,6 +27,13 @@ Note that changing the compression level will not automatically recompress
 all existing objects. You can force recompression by passing the -F option
 to linkgit:git-repack[1].
 
+pack.allowPackReuse::
+       When true, and when reachability bitmaps are enabled,
+       pack-objects will try to send parts of the bitmapped packfile
+       verbatim. This can reduce memory and CPU usage to serve fetches,
+       but might result in sending a slightly larger pack. Defaults to
+       true.
+
 pack.island::
        An extended regular expression configuring a set of delta
        islands. See "DELTA ISLANDS" in linkgit:git-pack-objects[1]
index c11b2ea8d43a7110eca6fa149e48c6ae2c2d9f9d..9075f57bf5cc4cce3aabce681742c27a9db4cc3e 100644 (file)
@@ -96,6 +96,7 @@ static off_t reuse_packfile_offset;
 
 static int use_bitmap_index_default = 1;
 static int use_bitmap_index = -1;
+static int allow_pack_reuse = 1;
 static enum {
        WRITE_BITMAP_FALSE = 0,
        WRITE_BITMAP_QUIET,
@@ -2715,6 +2716,10 @@ static int git_pack_config(const char *k, const char *v, void *cb)
                use_bitmap_index_default = git_config_bool(k, v);
                return 0;
        }
+       if (!strcmp(k, "pack.allowpackreuse")) {
+               allow_pack_reuse = git_config_bool(k, v);
+               return 0;
+       }
        if (!strcmp(k, "pack.usesparse")) {
                sparse = git_config_bool(k, v);
                return 0;
@@ -3050,7 +3055,8 @@ static void loosen_unused_packed_objects(void)
  */
 static int pack_options_allow_reuse(void)
 {
-       return pack_to_stdout &&
+       return allow_pack_reuse &&
+              pack_to_stdout &&
               allow_ofs_delta &&
               !ignore_packed_keep_on_disk &&
               !ignore_packed_keep_in_core &&