Skip to content

Commit

Permalink
t1011: add testcase demonstrating accidental loss of user modifications
Browse files Browse the repository at this point in the history
If a user has a file with local modifications that is not marked as
SKIP_WORKTREE, but the sparsity patterns are such that it should be
marked that way, and the user then invokes a command like

   * git checkout -q HEAD^

or

   * git read-tree -mu HEAD^

Then the file will be deleted along with all the users' modifications.
Add a testcase demonstrating this problem.

Note: This bug only triggers if something other than 'HEAD' is given;
if the commands above had specified 'HEAD', then the users' file would
be left alone.

Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
newren authored and gitster committed Jan 14, 2022
1 parent 48609de commit b3df8c9
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions t/t1011-read-tree-sparse-checkout.sh
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,27 @@ test_expect_success 'read-tree updates worktree, absent case' '
test ! -f init.t
'

test_expect_success 'read-tree will not throw away dirty changes, non-sparse' '
echo "/*" >.git/info/sparse-checkout &&
read_tree_u_must_succeed -m -u HEAD &&
echo dirty >init.t &&
read_tree_u_must_fail -m -u HEAD^ &&
test_path_is_file init.t &&
grep -q dirty init.t
'

test_expect_failure 'read-tree will not throw away dirty changes, sparse' '
echo "/*" >.git/info/sparse-checkout &&
read_tree_u_must_succeed -m -u HEAD &&
echo dirty >init.t &&
echo sub/added >.git/info/sparse-checkout &&
read_tree_u_must_fail -m -u HEAD^ &&
test_path_is_file init.t &&
grep -q dirty init.t
'

test_expect_success 'read-tree updates worktree, dirty case' '
echo sub/added >.git/info/sparse-checkout &&
git checkout -f top &&
Expand Down

0 comments on commit b3df8c9

Please sign in to comment.