Show 129 quoted lines
> The two new stash options --include-untracked and --all do not remove the
> untracked and/or ignored files that are stashed if those files reside in
> a subdirectory. e.g. the following sequence fails:
>
> mkdir untracked &&
> echo hello >untracked/file.txt &&
> git stash --include-untracked &&
> test ! -f untracked/file.txt
>
> Within the git-stash script, git-clean is used to remove the
> untracked/ignored files, but since the -d option was not supplied, it does
> not remove directories.
>
> So, add -d to the git-clean arguments, and update the tests to test this
> functionality.
>
> Reported-by: Hilco Wijbenga <hilco.wijbenga@gmail.com>
> Signed-off-by: Brandon Casey <drafnel@gmail.com>
> ---
> git-stash.sh | 2 +-
> t/t3905-stash-include-untracked.sh | 26 +++++++++++++++++++++++---
> 2 files changed, 24 insertions(+), 4 deletions(-)
>
> diff --git a/git-stash.sh b/git-stash.sh
> index 9d65250..c766692 100755
> --- a/git-stash.sh
> +++ b/git-stash.sh
> @@ -240,7 +240,7 @@ save_stash () {
> test "$untracked" = "all" && CLEAN_X_OPTION=-x || CLEAN_X_OPTION=
> if test -n "$untracked"
> then
> - git clean --force --quiet $CLEAN_X_OPTION
> + git clean --force --quiet -d $CLEAN_X_OPTION
> fi
>
> if test "$keep_index" = "t" && test -n $i_tree
> diff --git a/t/t3905-stash-include-untracked.sh b/t/t3905-stash-include-untracked.sh
> index ca1a46c..ef44fb2 100755
> --- a/t/t3905-stash-include-untracked.sh
> +++ b/t/t3905-stash-include-untracked.sh
> @@ -17,6 +17,8 @@ test_expect_success 'stash save --include-untracked some dirty working directory
> echo 3 > file &&
> test_tick &&
> echo 1 > file2 &&
> + mkdir untracked &&
> + echo untracked >untracked/untracked &&
> git stash --include-untracked &&
> git diff-files --quiet &&
> git diff-index --cached --quiet HEAD
> @@ -40,14 +42,23 @@ index 0000000..d00491f
> +++ b/file2
> @@ -0,0 +1 @@
> +1
> +diff --git a/untracked/untracked b/untracked/untracked
> +new file mode 100644
> +index 0000000..5a72eb2
> +--- /dev/null
> ++++ b/untracked/untracked
> +@@ -0,0 +1 @@
> ++untracked
> EOF
> cat > expect.lstree <<EOF
> file2
> +untracked
> EOF
>
> test_expect_success 'stash save --include-untracked stashed the untracked files' '
> test "!" -f file2 &&
> - git diff HEAD..stash^3 -- file2 >actual &&
> + test ! -e untracked &&
> + git diff HEAD stash^3 -- file2 untracked >actual &&
> test_cmp expect.diff actual &&
> git ls-tree --name-only stash^3: >actual &&
> test_cmp expect.lstree actual
> @@ -67,15 +78,18 @@ cat > expect <<EOF
> ?? actual
> ?? expect
> ?? file2
> +?? untracked/
> EOF
>
> test_expect_success 'stash pop after save --include-untracked leaves files untracked again' '
> git stash pop &&
> git status --porcelain >actual &&
> - test_cmp expect actual
> + test_cmp expect actual &&
> + test "1" = "`cat file2`" &&
> + test untracked = "`cat untracked/untracked`"
> '
>
> -git clean --force --quiet
> +git clean --force --quiet -d
>
> test_expect_success 'stash save -u dirty index' '
> echo 4 > file3 &&
> @@ -125,12 +139,16 @@ test_expect_success 'stash save --include-untracked removed files got stashed' '
> cat > .gitignore <<EOF
> .gitignore
> ignored
> +ignored.d/
> EOF
>
> test_expect_success 'stash save --include-untracked respects .gitignore' '
> echo ignored > ignored &&
> + mkdir ignored.d &&
> + echo ignored >ignored.d/untracked &&
> git stash -u &&
> test -s ignored &&
> + test -s ignored.d/untracked &&
> test -s .gitignore
> '
>
> @@ -143,12 +161,14 @@ test_expect_success 'stash save -u can stash with only untracked files different
> test_expect_success 'stash save --all does not respect .gitignore' '
> git stash -a &&
> test "!" -f ignored &&
> + test "!" -e ignored.d &&
> test "!" -f .gitignore
> '
>
> test_expect_success 'stash save --all is stash poppable' '
> git stash pop &&
> test -s ignored &&
> + test -s ignored.d/untracked &&
> test -s .gitignore
> '
>
> --
> 1.7.6