On 5/16/2022 4:38 PM, Victoria Dye wrote: > Derrick Stolee via GitGitGadget wrote: >> From: Derrick Stolee <dstolee@xxxxxxxxxxxxx> >> +test_expect_success 'sparse index is not expanded: sparse-checkout' ' >> + init_repos && >> + >> + ensure_not_expanded sparse-checkout set deep/deeper2 && >> + ensure_not_expanded sparse-checkout set deep/deeper1 && >> + ensure_not_expanded sparse-checkout set deep && >> + ensure_not_expanded sparse-checkout add folder1 && >> + ensure_not_expanded sparse-checkout set deep/deeper1 && >> + ensure_not_expanded sparse-checkout set folder2 && >> + >> + # Demonstrate that the checks that "folder1/a" is a file >> + # do not cause a sparse-index expansion (since it is in the >> + # sparse-checkout cone). >> + echo >>sparse-index/folder2/a && >> + git -C sparse-index add folder2/a && >> + >> + ensure_not_expanded sparse-checkout add folder1 && >> + >> + # Skip checks here, since deep/deeper1 is inside a sparse directory >> + # that must be expanded to check whether `deep/deeper1` is a file >> + # or not. >> + ensure_not_expanded sparse-checkout set --skip-checks deep/deeper1 && >> + ensure_not_expanded sparse-checkout set >> +' >> + > > These tests look good for ensuring sparsity is preserved, but it'd be nice > to also have some "stress tests" of 'sparse-checkout (add|set)'. The purpose > would be to make sure the index has the right contents for various types of > pattern changes, e.g. running 'sparse-checkout (add|set) <path>', then > verifying index contents with 'ls-files --sparse'. Paths might be: > > - in vs. out of (current) cone > - match an existing vs. nonexistent directory > > etc. I guess I was relying on tests added previously for the sparse index, such as this one: test_expect_success 'sparse-index contents' ' init_repos && git -C sparse-index ls-files --sparse --stage >cache && for dir in folder1 folder2 x do TREE=$(git -C sparse-index rev-parse HEAD:$dir) && grep "040000 $TREE 0 $dir/" cache \ || return 1 done && git -C sparse-index sparse-checkout set folder1 && git -C sparse-index ls-files --sparse --stage >cache && for dir in deep folder2 x do TREE=$(git -C sparse-index rev-parse HEAD:$dir) && grep "040000 $TREE 0 $dir/" cache \ || return 1 done && git -C sparse-index sparse-checkout set deep/deeper1 && git -C sparse-index ls-files --sparse --stage >cache && for dir in deep/deeper2 folder1 folder2 x do TREE=$(git -C sparse-index rev-parse HEAD:$dir) && grep "040000 $TREE 0 $dir/" cache \ || return 1 done && # Disabling the sparse-index replaces tree entries with full ones git -C sparse-index sparse-checkout init --no-sparse-index && test_sparse_match git ls-files --stage --sparse ' But this test isn't covering enough interesting cases that might cause issues with the changes in this series. I'll add a patch that increases coverage in this area. Thanks, -Stolee