]> git.ipfire.org Git - thirdparty/git.git/commitdiff
midx.c: avoid cruft packs with non-zero `repack --batch-size`
authorTaylor Blau <me@ttaylorr.com>
Tue, 20 Sep 2022 01:55:56 +0000 (21:55 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 21 Sep 2022 17:21:47 +0000 (10:21 -0700)
Apply similar treatment with respect to cruft packs as in a few commits
ago to `repack` with a non-zero `--batch-size`.

Since the case of a non-zero `--batch-size` is handled separately (in
`fill_included_packs_batch()` instead of `fill_included_packs_all()`), a
separate fix must be applied for this case.

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 273704caedb7aacbdee531a1cbaff4d0ba3de3a5..3a8dcfe98e2e937c23d80db3e27fa89ccd36308b 100644 (file)
--- a/midx.c
+++ b/midx.c
@@ -1946,6 +1946,8 @@ static int fill_included_packs_batch(struct repository *r,
                        continue;
                if (!pack_kept_objects && p->pack_keep)
                        continue;
+               if (p->is_cruft)
+                       continue;
                if (open_pack_index(p) || !p->num_objects)
                        continue;
 
index d967d92c201842776af0324499cbf3c2ad50eec4..b5f9b1092229d3d8c1879d41c5c3f02f4ad04923 100755 (executable)
@@ -807,6 +807,47 @@ test_expect_success 'repack (all) ignores cruft pack' '
        )
 '
 
+test_expect_success 'repack (--batch-size) ignores cruft pack' '
+       git init repo &&
+       test_when_finished "rm -fr repo" &&
+       (
+               cd repo &&
+
+               test_commit_bulk 5 &&
+               test_commit --no-tag unreachable &&
+
+               git reset --hard HEAD^ &&
+               git reflog expire --all --expire=all &&
+               git repack --cruft -d &&
+
+               test_commit four &&
+
+               find $objdir/pack -type f -name "*.pack" | sort >before &&
+               git repack -d &&
+               find $objdir/pack -type f -name "*.pack" | sort >after &&
+
+               pack="$(comm -13 before after)" &&
+               test_file_size "$pack" >sz &&
+               # Set --batch-size to twice the size of the pack created
+               # in the previous step, since this is enough to
+               # accommodate it and the cruft pack.
+               #
+               # This means that the MIDX machinery *could* combine the
+               # new and cruft packs together.
+               #
+               # We ensure that it does not below.
+               batch="$((($(cat sz) * 2)))" &&
+
+               git multi-pack-index write &&
+
+               find $objdir/pack | sort >before &&
+               git multi-pack-index repack --batch-size=$batch &&
+               find $objdir/pack | sort >after &&
+
+               test_cmp before after
+       )
+'
+
 test_expect_success 'expire removes repacked packs' '
        (
                cd dup &&