Here is a small replacement for a series that Stolee and I worked on together to make the behavior of `collect_pack_filenames()` consistent with the rest of Git's pack liveness rules. Nothing much has changed since v1, with the exception of removing unnecessary conversions from 'ls' -> 'find ... | sort'. As always, a range-diff is included below for convenience. Thanks in advance for another look. Derrick Stolee (1): builtin/repack.c: only repack `.pack`s that exist Taylor Blau (1): builtin/repack.c: avoid dir traversal in `collect_pack_filenames()` builtin/repack.c | 38 +++++++++++++++----------------------- t/t7700-repack.sh | 36 +++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 24 deletions(-) Range-diff against v1: 1: f14a88f107 ! 1: 410d2f0165 builtin/repack.c: only repack `.pack`s that exist @@ t/t7700-repack.sh: test_expect_success 'repack --keep-pack' ' git config pack.window 0 && P1=$(commit_and_pack 1) && P2=$(commit_and_pack 2) && - P3=$(commit_and_pack 3) && - P4=$(commit_and_pack 4) && -- ls .git/objects/pack/*.pack >old-counts && -+ find .git/objects/pack -name "*.pack" -type f | sort >old-counts && - test_line_count = 4 old-counts && - git repack -a -d --keep-pack $P1 --keep-pack $P4 && -- ls .git/objects/pack/*.pack >new-counts && -+ find .git/objects/pack -name "*.pack" -type f | sort >new-counts && - grep -q $P1 new-counts && - grep -q $P4 new-counts && - test_line_count = 3 new-counts && @@ t/t7700-repack.sh: test_expect_success 'repack --keep-pack' ' mv "$from" "$to" || return 1 done && @@ t/t7700-repack.sh: test_expect_success 'repack --keep-pack' ' + # repacking what we can. + touch .git/objects/pack/pack-does-not-exist.idx && + -+ find .git/objects/pack -name "*.pack" -type f | sort >packs.before && git repack --cruft -d --keep-pack $P1 --keep-pack $P4 && -+ find .git/objects/pack -name "*.pack" -type f | sort >packs.after && -- ls .git/objects/pack/*.pack >newer-counts && -- test_cmp new-counts newer-counts && -+ test_cmp packs.before packs.after && - git fsck + ls .git/objects/pack/*.pack >newer-counts && +@@ t/t7700-repack.sh: test_expect_success 'repack --keep-pack' ' ) ' @@ t/t7700-repack.sh: test_expect_success 'repack --keep-pack' ' + P2=$(commit_and_pack 2) && + P3=$(commit_and_pack 3) && + P4=$(commit_and_pack 4) && -+ find .git/objects/pack -name "*.pack" -type f | sort >old-counts && ++ ls .git/objects/pack/*.pack >old-counts && + test_line_count = 4 old-counts && + + # Remove one .pack file + rm .git/objects/pack/$P2 && + -+ find .git/objects/pack -name "*.pack" -type f | -+ sort >before-pack-dir && ++ ls .git/objects/pack/*.pack >before-pack-dir && + + test_must_fail git fsck && + test_must_fail git repack --cruft -d 2>err && @@ t/t7700-repack.sh: test_expect_success 'repack --keep-pack' ' + + # Before failing, the repack did not modify the + # pack directory. -+ find .git/objects/pack -name "*.pack" -type f | -+ sort >after-pack-dir && ++ ls .git/objects/pack/*.pack >after-pack-dir && + test_cmp before-pack-dir after-pack-dir + ) +' 2: b3d0d9308e = 2: ffdf85f6d3 builtin/repack.c: avoid dir traversal in `collect_pack_filenames()` -- 2.41.0.329.gffdf85f6d39