Add tests for `git check-attr`, make sure attribute file does get read from index when path is either inside or outside of sparse-checkout definition. Add a test named 'diff --check with pathspec outside sparse definition'. It starts by disabling the trailing whitespace and space-before-tab checks using the core.whitespace configuration option. Then, it specifically re-enables the trailing whitespace check for a file located in a sparse directory. This is accomplished by adding a whitespace=trailing-space rule to the .gitattributes file within that directory. To ensure that only the .gitattributes file in the index is being read, and not any .gitattributes files in the working tree, the test removes the .gitattributes file from the working tree after adding it to the index. The final part of the test uses 'git diff --check' to verify the correct application of the attribute rules. This ensures that the .gitattributes file is correctly read from index and applied, even when the file's path falls outside of the sparse-checkout definition. Helped-by: Victoria Dye <vdye@xxxxxxxxxx> Signed-off-by: Shuqi Liang <cheskaqiqi@xxxxxxxxx> --- t/t1092-sparse-checkout-compatibility.sh | 48 ++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh index 8a95adf4b5..90633f383a 100755 --- a/t/t1092-sparse-checkout-compatibility.sh +++ b/t/t1092-sparse-checkout-compatibility.sh @@ -2259,4 +2259,52 @@ test_expect_success 'worktree is not expanded' ' ensure_not_expanded worktree remove .worktrees/hotfix ' +test_expect_success 'check-attr with pathspec inside sparse definition' ' + init_repos && + + echo "a -crlf myAttr" >>.gitattributes && + run_on_all cp ../.gitattributes ./deep && + + test_all_match git check-attr -a -- deep/a && + + test_all_match git add deep/.gitattributes && + test_all_match git check-attr -a --cached -- deep/a +' + +test_expect_failure 'check-attr with pathspec outside sparse definition' ' + init_repos && + + echo "a -crlf myAttr" >>.gitattributes && + run_on_sparse mkdir folder1 && + run_on_all cp ../.gitattributes ./folder1 && + run_on_all cp a folder1/a && + + test_all_match git check-attr -a -- folder1/a && + + git -C full-checkout add folder1/.gitattributes && + run_on_sparse git add --sparse folder1/.gitattributes && + run_on_all git commit -m "add .gitattributes" && + test_sparse_match git sparse-checkout reapply && + test_all_match git check-attr -a --cached -- folder1/a +' + +test_expect_failure 'diff --check with pathspec outside sparse definition' ' + init_repos && + + write_script edit-contents <<-\EOF && + echo "a " >"$1" + EOF + + git config core.whitespace -trailing-space,-space-before-tab && + + echo "a whitespace=trailing-space,space-before-tab" >>.gitattributes && + run_on_all mkdir -p folder1 && + run_on_all cp ../.gitattributes ./folder1 && + git -C full-checkout add folder1/.gitattributes && + run_on_sparse git add --sparse folder1/.gitattributes && + run_on_all rm folder1/.gitattributes && + run_on_all ../edit-contents folder1/a && + test_all_match test_must_fail git diff --check -- folder1/a +' + test_done -- 2.39.0