t1092: add tests for `git diff-files`

Before integrating the 'git diff-files' builtin with the sparse index feature, add tests to t1092-sparse-checkout-compatibility.sh to ensure it currently works with sparse-checkout and will still work with sparse index after that integration. When adding tests against a sparse-checkout definition, we test two modes: all changes are within the sparse-checkout cone and some changes are outside the sparse-checkout cone. In order to have staged changes outside of the sparse-checkout cone, make a directory called 'folder1' and copy `a` into 'folder1/a'. 'folder1/a' is identical to `a` in the base commit. These make 'folder1/a' in the index, while leaving it outside of the sparse-checkout definition. Change content inside 'folder1/a' in order to test 'folder1/a' being present on-disk with modifications. Signed-off-by: Shuqi Liang <cheskaqiqi@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Shuqi Liang committed May 9, 2023 at 15:42 UTC 0aba1a989c7c577dc1b0b096a12615b7a6747c54
1 file changed +39
t/t1092-sparse-checkout-compatibility.sh
+39
@@ -2108,4 +2108,43 @@ test_expect_success 'sparse-index is not expanded: write-tree' '
2108 ensure_not_expanded write-tree
2109 '
2110
2111 +test_expect_success 'diff-files with pathspec inside sparse definition' '
2112 + init_repos &&
2113 +
2114 + write_script edit-contents <<-\EOF &&
2115 + echo text >>"$1"
2116 + EOF
2117 +
2118 + run_on_all ../edit-contents deep/a &&
2119 +
2120 + test_all_match git diff-files &&
2121 +
2122 + test_all_match git diff-files -- deep/a &&
2123 +
2124 + # test wildcard
2125 + test_all_match git diff-files -- "deep/*"
2126 +'
2127 +
2128 +test_expect_success 'diff-files with pathspec outside sparse definition' '
2129 + init_repos &&
2130 +
2131 + test_sparse_match git diff-files -- folder2/a &&
2132 +
2133 + write_script edit-contents <<-\EOF &&
2134 + echo text >>"$1"
2135 + EOF
2136 +
2137 + # The directory "folder1" is outside the cone of interest
2138 + # and will not exist in the sparse checkout repositories.
2139 + # Create it as needed, add file "folder1/a" there with
2140 + # contents that is different from the staged version.
2141 + run_on_all mkdir -p folder1 &&
2142 + run_on_all cp a folder1/a &&
2143 +
2144 + run_on_all ../edit-contents folder1/a &&
2145 + test_all_match git diff-files &&
2146 + test_all_match git diff-files -- folder1/a &&
2147 + test_all_match git diff-files -- "folder*/a"
2148 +'
2149 +
2150 test_done