diff options
author | Taylor Blau <me@ttaylorr.com> | 2022-09-19 21:55:48 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-09-21 10:21:46 -0700 |
commit | d9f772145069fc0e2aa56a76229e001e0b47248e (patch) | |
tree | 662420dc1cfb34fec5a30f288a52253fb12ab48a | |
parent | 757d457907e3efa8eb911b772a690661cd432da5 (diff) | |
download | git-d9f772145069fc0e2aa56a76229e001e0b47248e.tar.gz |
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>
-rw-r--r-- | midx.c | 2 | ||||
-rwxr-xr-x | t/t5319-multi-pack-index.sh | 23 |
2 files changed, 25 insertions, 0 deletions
@@ -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++; diff --git a/t/t5319-multi-pack-index.sh b/t/t5319-multi-pack-index.sh index 2d51b09680..d967d92c20 100755 --- a/t/t5319-multi-pack-index.sh +++ b/t/t5319-multi-pack-index.sh @@ -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 && |