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

[PATCH 4/7] midx.c: avoid cruft packs with `repack --batch-size=0`

From
Taylor Blau <me@ttaylorr.com>
Date
Sep 20, 2022, 01:55 UTC
Message-ID
<b3a70d486e8c163d57f8d1d1f156ca0196ae6d45.1663638929.git.me@ttaylorr.com>
In-Reply-To
<cover.1663638929.git.me@ttaylorr.com>

The `repack` sub-command of the `git multi-pack-index` builtin creates a new pack aggregating smaller packs contained in the MIDX up to some given `--batch-size`.

When `--batch-size=0`, this instructs the MIDX builtin to repack everything contained in the MIDX into a single pack.

In similar spirit as a previous commit, it is undesirable to repack the contents of a cruft pack in this step. Teach `repack` to ignore any cruft pack(s) when `--batch-size=0` for the same reason(s).

(The case of a non-zero `--batch-size` will be handled in a subsequent commit).

Signed-off-by: Taylor Blau <me@ttaylorr.com>
---
 midx.c                      |  2 ++
 t/t5319-multi-pack-index.sh | 23 +++++++++++++++++++++++
 2 files changed, 25 insertions(+)
diff --git a/midx.c b/midx.c
index bff5b99933..05bcfc6f02 100644
--- a/midx.c
+++ b/midx.c
@@ -1895,6 +1895,8 @@ static int fill_included_packs_all(struct repository *r,
 			continue;
 		if (!pack_kept_objects && m->packs[i]->pack_keep)
 			continue;
+		if (m->packs[i]->is_cruft)
+			continue;
 
 		include_pack[i] = 1;
 		count++;
diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh
index 2d51b09680..d967d92c20 100755
--- a/t/t5319-multi-pack-index.sh
+++ b/t/t5319-multi-pack-index.sh
@@ -784,6 +784,29 @@ test_expect_success 'repack creates a new pack' '
 	)
 '
 
+test_expect_success 'repack (all) ignores cruft pack' '
+	git init repo &&
+	test_when_finished "rm -fr repo" &&
+	(
+		cd repo &&
+
+		test_commit base &&
+		test_commit --no-tag unreachable &&
+
+		git reset --hard base &&
+		git reflog expire --all --expire=all &&
+		git repack --cruft -d &&
+
+		git multi-pack-index write &&
+
+		find $objdir/pack | sort >before &&
+		git multi-pack-index repack --batch-size=0 &&
+		find $objdir/pack | sort >after &&
+
+		test_cmp before after
+	)
+'
+
 test_expect_success 'expire removes repacked packs' '
 	(
 		cd dup &&
-- 
2.37.0.1.g1379af2e9d
Previous: Derrick StoleeNext: Taylor Blau
Message 6 of 11 in “midx: ignore cruft pack with `repack`, `expire`”
  1. 0/7 midx: ignore cruft pack with `repack`, `expire`Taylor Blau, Sep 20, 2022
  2. 1/7 Documentation/git-multi-pack-index.txt: fix typoTaylor Blau, Sep 20, 2022
  3. 2/7 Documentation/git-multi-pack-index.txt: clarify expire behaviorTaylor Blau, Sep 20, 2022
  4. 3/7 midx.c: prevent `expire` from removing the cruft packTaylor Blau, Sep 20, 2022
  5. Derrick StoleeSep 22, 2022
  6. 4/7 midx.c: avoid cruft packs with `repack --batch-size=0`Taylor Blau, Sep 20, 2022
  7. 5/7 midx.c: replace `xcalloc()` with `CALLOC_ARRAY()`Taylor Blau, Sep 20, 2022
  8. 6/7 midx.c: remove unnecessary loop conditionTaylor Blau, Sep 20, 2022
  9. 7/7 midx.c: avoid cruft packs with non-zero `repack --batch-size`Taylor Blau, Sep 20, 2022
  10. Christian CouderSep 20, 2022
  11. Derrick StoleeSep 22, 2022

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.