git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 08/12] pack-objects: introduce pack.allowPackReuse

From
Christian Couder <christian.couder@gmail.com>
Date
Dec 18, 2019, 11:25 UTC
Message-ID
<20191218112547.4974-9-chriscool@tuxfamily.org>
In-Reply-To
<20191218112547.4974-1-chriscool@tuxfamily.org>
From: Jeff King <peff@peff.net>
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>
---
 Documentation/config/pack.txt | 7 +++++++
 builtin/pack-objects.c        | 8 +++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.txt
index 1d66f0c992..0dac580581 100644
--- a/Documentation/config/pack.txt
+++ b/Documentation/config/pack.txt
@@ -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]
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 369f46fbc5..801e23dfe7 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -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,
@@ -2699,6 +2700,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.threads")) {
 		delta_search_threads = git_config_int(k, v);
 		if (delta_search_threads < 0)
@@ -3030,7 +3035,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 &&
-- 
2.24.1.498.g561400140f
Previous: Christian CouderNext: Christian Couder
Message 10 of 13 in “Rewrite packfile reuse code”
  1. 00/12 Rewrite packfile reuse codeChristian Couder, Dec 18, 2019
  2. 01/12 builtin/pack-objects: report reused packfile objectsChristian Couder, Dec 18, 2019
  3. 03/12 ewah/bitmap: introduce bitmap_word_alloc()Christian Couder, Dec 18, 2019
  4. 02/12 packfile: expose get_delta_base()Christian Couder, Dec 18, 2019
  5. 04/12 pack-bitmap: introduce bitmap_walk_contains()Christian Couder, Dec 18, 2019
  6. 05/12 pack-bitmap: uninteresting oid can be outside bitmapped packfileChristian Couder, Dec 18, 2019
  7. 06/12 pack-bitmap: simplify bitmap_has_oid_in_uninteresting()Christian Couder, Dec 18, 2019
  8. 09/12 builtin/pack-objects: introduce obj_is_packed()Christian Couder, Dec 18, 2019
  9. 07/12 csum-file: introduce hashfile_total()Christian Couder, Dec 18, 2019
  10. 08/12 pack-objects: introduce pack.allowPackReuseChristian Couder, Dec 18, 2019
  11. 10/12 pack-objects: improve partial packfile reuseChristian Couder, Dec 18, 2019
  12. 12/12 pack-bitmap: don't rely on bitmap_git->reuse_objectsChristian Couder, Dec 18, 2019
  13. 11/12 pack-objects: add checks for duplicate objectsChristian Couder, Dec 18, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.