@@ -1377,7 +1377,7 @@ test_expect_success 'index.sparse disabled inline uses full index' '
13771377 ! test_region index ensure_full_index trace2.txt
13781378'
13791379
1380- ensure_not_expanded () {
1380+ run_sparse_index_trace2 () {
13811381 rm -f trace2.txt &&
13821382 if test -z " $WITHOUT_UNTRACKED_TXT "
13831383 then
@@ -1397,7 +1397,16 @@ ensure_not_expanded () {
13971397 git -C sparse-index " $@ " \
13981398 > sparse-index-out \
13991399 2> sparse-index-error || return 1
1400- fi &&
1400+ fi
1401+ }
1402+
1403+ ensure_expanded () {
1404+ run_sparse_index_trace2 " $@ " &&
1405+ test_region index ensure_full_index trace2.txt
1406+ }
1407+
1408+ ensure_not_expanded () {
1409+ run_sparse_index_trace2 " $@ " &&
14011410 test_region ! index ensure_full_index trace2.txt
14021411}
14031412
@@ -2108,4 +2117,57 @@ test_expect_success 'sparse-index is not expanded: write-tree' '
21082117 ensure_not_expanded write-tree
21092118'
21102119
2120+ test_expect_success ' diff-files with pathspec inside sparse definition' '
2121+ init_repos &&
2122+
2123+ write_script edit-contents <<-\EOF &&
2124+ echo text >>"$1"
2125+ EOF
2126+
2127+ run_on_all ../edit-contents deep/a &&
2128+
2129+ test_all_match git diff-files &&
2130+
2131+ test_all_match git diff-files -- deep/a &&
2132+
2133+ # test wildcard
2134+ test_all_match git diff-files -- "deep/*"
2135+ '
2136+
2137+ test_expect_success ' diff-files with pathspec outside sparse definition' '
2138+ init_repos &&
2139+
2140+ test_sparse_match git diff-files -- folder2/a &&
2141+
2142+ write_script edit-contents <<-\EOF &&
2143+ echo text >>"$1"
2144+ EOF
2145+
2146+ # The directory "folder1" is outside the cone of interest
2147+ # and will not exist in the sparse checkout repositories.
2148+ # Create it as needed, add file "folder1/a" there with
2149+ # contents that is different from the staged version.
2150+ run_on_all mkdir -p folder1 &&
2151+ run_on_all cp a folder1/a &&
2152+
2153+ run_on_all ../edit-contents folder1/a &&
2154+ test_all_match git diff-files &&
2155+ test_all_match git diff-files -- folder1/a &&
2156+ test_all_match git diff-files -- "folder*/a"
2157+ '
2158+
2159+ test_expect_success ' sparse index is not expanded: diff-files' '
2160+ init_repos &&
2161+
2162+ write_script edit-contents <<-\EOF &&
2163+ echo text >>"$1"
2164+ EOF
2165+
2166+ run_on_all ../edit-contents deep/a &&
2167+
2168+ ensure_not_expanded diff-files &&
2169+ ensure_not_expanded diff-files -- deep/a &&
2170+ ensure_not_expanded diff-files -- "deep/*"
2171+ '
2172+
21112173test_done
0 commit comments