1
0
mirror of https://github.com/git/git synced 2024-07-05 00:58:49 +00:00

midx.c: avoid cruft packs with repack --batch-size=0

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>
This commit is contained in:
Taylor Blau 2022-09-19 21:55:48 -04:00 committed by Junio C Hamano
parent 757d457907
commit d9f7721450
2 changed files with 25 additions and 0 deletions

2
midx.c
View File

@ -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++;

View File

@ -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 &&