On Fri, Sep 08, 2017 at 12:00:50PM -0600, Kevin Willford wrote: > When using the sparse checkout feature the git reset command will add > entries to the index that will have the skip-worktree bit off but will > leave the working directory empty. File data is lost because the index > version of the files have been changed but there is nothing that is in the > working directory. This will cause the next status call to show either > deleted for files modified or deleting or nothing for files added. The > added files should be shown as untracked and modified files should be > shown as modified. > > To fix this when the reset is running if there is not a file in the working > directory and if it will be missing with the new index entry or was not > missing in the previous version, we create the previous index version of > the file in the working directory so that status will report correctly > and the files will be availble for the user to deal with. > > Signed-off-by: Kevin Willford <kewillf@xxxxxxxxxxxxx> [] > diff --git a/t/t7114-reset-sparse-checkout.sh b/t/t7114-reset-sparse-checkout.sh > new file mode 100755 > index 0000000000..f2a5426847 > --- /dev/null > +++ b/t/t7114-reset-sparse-checkout.sh > @@ -0,0 +1,60 @@ > +#!/bin/sh > + > +test_description='reset when using a sparse-checkout' > + > +. ./test-lib.sh > + > +# reset using a sparse-checkout file > + > +test_expect_success 'setup' ' > + test_tick && Do we need a test_tick here ? > + echo "checkout file" >c && > + echo "modify file" >m && > + echo "delete file" >d && > + git add . && > + git commit -m "initial commit" && > + echo "added file" >a && > + echo "modification of a file" >m && > + git rm d && > + git add . && > + git commit -m "second commit" && > + git checkout -b endCommit > +' > + > +test_expect_success 'reset when there is a sparse-checkout' ' > + echo "/c" >.git/info/sparse-checkout && > + test_config core.sparsecheckout true && > + git checkout -b resetBranch && > + test_path_is_missing m && > + test_path_is_missing a && > + test_path_is_missing d && > + git reset HEAD~1 && > + test "checkout file" = "$(cat c)" && > + test "modification of a file" = "$(cat m)" && > + test "added file" = "$(cat a)" && > + test_path_is_missing d > +' > +