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, create a 'newdirectory/testfile' and add it to the index, while leaving it outside of the sparse-checkout definition.Test 'newdirectory/testfile' being present on-disk without modifications, then change content inside 'newdirectory/testfile' in order to test 'newdirectory/testfile' being present on-disk with modifications. 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 801919009e..9b71d7f5f9 100755 --- a/t/t1092-sparse-checkout-compatibility.sh +++ b/t/t1092-sparse-checkout-compatibility.sh @@ -2055,4 +2055,52 @@ test_expect_success 'grep sparse directory within submodules' ' test_cmp actual expect ' +test_expect_success 'diff-files with pathspec inside sparse definition' ' + init_repos && + + write_script edit-contents <<-\EOF && + echo text >>"$1" + EOF + + run_on_all ../edit-contents deep/a && + + test_all_match git diff-files && + + test_all_match git diff-files deep/a + +' + +test_expect_success 'diff-files with pathspec outside sparse definition' ' + init_repos && + + write_script edit-contents <<-\EOF && + echo text >>"$1" + EOF + + # add file to the index but outside of cone + run_on_sparse mkdir newdirectory && + run_on_sparse ../edit-contents newdirectory/testfile && + test_sparse_match git add --sparse newdirectory/testfile && + + # file present on-disk without modifications + test_sparse_match git diff-files && + test_must_be_empty sparse-checkout-out && + test_must_be_empty sparse-checkout-err && + test_sparse_match git diff-files newdirectory/testfile && + test_must_be_empty sparse-checkout-out && + test_must_be_empty sparse-checkout-err && + + # file present on-disk with modifications + FN=newdirectory/testfile && + OID=$(git -C sparse-checkout hash-object $FN) && + ZERO=$(test_oid zero) && + echo ":100644 100644 $OID $ZERO M $FN" >expect && + + run_on_sparse ../edit-contents newdirectory/testfile && + test_sparse_match git diff-files && + test_cmp expect sparse-checkout-out && + test_sparse_match git diff-files newdirectory/testfile && + test_cmp expect sparse-checkout-out +' + test_done -- 2.39.0