t1092: add tests for status/add and sparse files
Before moving to update 'git status' and 'git add' to work with sparse
indexes, add an explicit test that ensures the sparse-index works the
same as a normal sparse-checkout when the worktree contains directories
and files outside of the sparse cone.
Specifically, 'folder1/a' is a file in our test repo, but 'folder1' is
not in the sparse cone. When 'folder1/a' is modified, the file is not
shown as modified and adding it will fail. This is new behavior as of
a20f704
(add: warn when asked to update SKIP_WORKTREE entries,
2021-04-08). Before that change, these adds would be silently ignored.
Untracked files are fine: adding new files both with 'git add .' and
'git add folder1/' works just as in a full checkout. This may not be
entirely desirable, but we are not intending to change behavior at the
moment, only document it. A future change could alter the behavior to
be more sensible, and this test could be modified to satisfy the new
expected behavior.
Reviewed-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e669ffb2b8
commit
bf26c06f12
@ -254,6 +254,44 @@ test_expect_success 'add, commit, checkout' '
|
||||
test_all_match git checkout -
|
||||
'
|
||||
|
||||
test_expect_success 'status/add: outside sparse cone' '
|
||||
init_repos &&
|
||||
|
||||
# adding a "missing" file outside the cone should fail
|
||||
test_sparse_match test_must_fail git add folder1/a &&
|
||||
|
||||
# folder1 is at HEAD, but outside the sparse cone
|
||||
run_on_sparse mkdir folder1 &&
|
||||
cp initial-repo/folder1/a sparse-checkout/folder1/a &&
|
||||
cp initial-repo/folder1/a sparse-index/folder1/a &&
|
||||
|
||||
test_sparse_match git status &&
|
||||
|
||||
write_script edit-contents <<-\EOF &&
|
||||
echo text >>$1
|
||||
EOF
|
||||
run_on_sparse ../edit-contents folder1/a &&
|
||||
run_on_all ../edit-contents folder1/new &&
|
||||
|
||||
test_sparse_match git status --porcelain=v2 &&
|
||||
|
||||
# This "git add folder1/a" fails with a warning
|
||||
# in the sparse repos, differing from the full
|
||||
# repo. This is intentional.
|
||||
test_sparse_match test_must_fail git add folder1/a &&
|
||||
test_sparse_match test_must_fail git add --refresh folder1/a &&
|
||||
test_all_match git status --porcelain=v2 &&
|
||||
|
||||
test_all_match git add . &&
|
||||
test_all_match git status --porcelain=v2 &&
|
||||
test_all_match git commit -m folder1/new &&
|
||||
|
||||
run_on_all ../edit-contents folder1/newer &&
|
||||
test_all_match git add folder1/ &&
|
||||
test_all_match git status --porcelain=v2 &&
|
||||
test_all_match git commit -m folder1/newer
|
||||
'
|
||||
|
||||
test_expect_success 'checkout and reset --hard' '
|
||||
init_repos &&
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user