summaryrefslogtreecommitdiff
path: root/t/t3705-add-sparse-checkout.sh
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2021-09-24 15:39:07 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-09-28 17:31:02 (GMT)
commit49fdd51a235fe2ca91a6d1b16315204f0f016a96 (patch)
treea98ca6a6ec6c35b59843be5f415ac34332291d24 /t/t3705-add-sparse-checkout.sh
parent105e8b014b1d584174aca81081ee5428caea03cb (diff)
downloadgit-49fdd51a235fe2ca91a6d1b16315204f0f016a96.zip
git-49fdd51a235fe2ca91a6d1b16315204f0f016a96.tar.gz
git-49fdd51a235fe2ca91a6d1b16315204f0f016a96.tar.bz2
add: skip tracked paths outside sparse-checkout cone
When 'git add' adds a tracked file that is outside of the sparse-checkout cone, it checks the SKIP_WORKTREE bit to see if the file exists outside of the sparse-checkout cone. This is usually correct, except in the case of a merge conflict outside of the cone. Modify add_pathspec_matched_against_index() to be more careful about paths by checking the sparse-checkout patterns in addition to the SKIP_WORKTREE bit. This causes 'git add' to no longer allow files outside of the cone that removed the SKIP_WORKTREE bit due to a merge conflict. With only this change, users will only be able to add the file after adding the file to the sparse-checkout cone. A later change will allow users to force adding even though the file is outside of the sparse-checkout cone. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t3705-add-sparse-checkout.sh')
-rwxr-xr-xt/t3705-add-sparse-checkout.sh12
1 files changed, 12 insertions, 0 deletions
diff --git a/t/t3705-add-sparse-checkout.sh b/t/t3705-add-sparse-checkout.sh
index b2d7986..be6809e 100755
--- a/t/t3705-add-sparse-checkout.sh
+++ b/t/t3705-add-sparse-checkout.sh
@@ -158,6 +158,18 @@ test_expect_success 'do not warn when pathspec matches dense entries' '
git ls-files --error-unmatch dense_entry
'
+test_expect_success 'git add fails outside of sparse-checkout definition' '
+ test_when_finished git sparse-checkout disable &&
+ test_commit a &&
+ git sparse-checkout init &&
+ git sparse-checkout set a &&
+ echo >>sparse_entry &&
+
+ git update-index --no-skip-worktree sparse_entry &&
+ test_must_fail git add sparse_entry &&
+ test_sparse_entry_unstaged
+'
+
test_expect_success 'add obeys advice.updateSparsePath' '
setup_sparse_entry &&
test_must_fail git -c advice.updateSparsePath=false add sparse_entry 2>stderr &&