[PATCH 7/7] midx.c: avoid cruft packs with non-zero `repack --batch-size`
- From
Taylor Blau <me@ttaylorr.com>
- Date
- Sep 20, 2022, 01:55 UTC
- Message-ID
- <5f06a2e244a4efb166267cd3a7c975d5f04c07d5.1663638929.git.me@ttaylorr.com>
- In-Reply-To
- <cover.1663638929.git.me@ttaylorr.com>
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> --- midx.c | 2 ++ t/t5319-multi-pack-index.sh | 41 +++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+)
diff --git a/midx.c b/midx.c index 273704caed..3a8dcfe98e 100644 --- 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; diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh index d967d92c20..b5f9b10922 100755 --- a/t/t5319-multi-pack-index.sh +++ b/t/t5319-multi-pack-index.sh @@ -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 &&
-- 2.37.0.1.g1379af2e9d