]> git.ipfire.org Git - thirdparty/git.git/commitdiff
midx.c: avoid cruft packs with `repack --batch-size=0`
authorTaylor Blau <me@ttaylorr.com>
Tue, 20 Sep 2022 01:55:48 +0000 (21:55 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 21 Sep 2022 17:21:46 +0000 (10:21 -0700)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
midx.c
t/t5319-multi-pack-index.sh

diff --git a/midx.c b/midx.c
index bff5b999333c6f390da6e23c2842af32d1793dca..05bcfc6f024c407e176785542056030c3567d103 100644 (file)
--- 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++;
index 2d51b0968012fd1f5b8e57a5f323bbe58ba686e4..d967d92c201842776af0324499cbf3c2ad50eec4 100755 (executable)
@@ -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 &&