Browse Source

midx.c: avoid cruft packs with non-zero `repack --batch-size`

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>
maint
Taylor Blau 2 years ago committed by Junio C Hamano
parent
commit
b62ad5681f
  1. 2
      midx.c
  2. 41
      t/t5319-multi-pack-index.sh

2
midx.c

@ -1946,6 +1946,8 @@ static int fill_included_packs_batch(struct repository *r, @@ -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;


41
t/t5319-multi-pack-index.sh

@ -807,6 +807,47 @@ test_expect_success 'repack (all) ignores cruft pack' ' @@ -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 &&

Loading…
Cancel
Save