From 4fd731240980f0f4b4565abe9092bd3d08d650e3 Mon Sep 17 00:00:00 2001 From: Brandon Casey Date: Fri, 26 Aug 2011 19:59:24 -0500 Subject: [PATCH 1/4] t/t3905: use the name 'actual' for test output, swap arguments to test_cmp It is common practice in the git test suite to use the file names 'actual' and 'expect' to hold the actual and expected output of commands. So change the name 'output' to 'actual'. Additionally, swap the order of arguments to test_cmp when comparing expected output and actual output so that if diff output is produced, it describes how the actual output differs from what was expected rather than the other way around. Signed-off-by: Brandon Casey Signed-off-by: Junio C Hamano --- t/t3905-stash-include-untracked.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/t/t3905-stash-include-untracked.sh b/t/t3905-stash-include-untracked.sh index 4f2eedfd4f..adc25245b9 100755 --- a/t/t3905-stash-include-untracked.sh +++ b/t/t3905-stash-include-untracked.sh @@ -23,13 +23,13 @@ test_expect_success 'stash save --include-untracked some dirty working directory ' cat > expect < output - test_cmp output expect + git status --porcelain >actual + test_cmp expect actual ' cat > expect.diff < output && - test_cmp output expect.diff && - git ls-tree --name-only stash^3: > output && - test_cmp output expect.lstree + git diff HEAD..stash^3 -- file2 >actual && + test_cmp expect.diff actual && + git ls-tree --name-only stash^3: >actual && + test_cmp expect.lstree actual ' test_expect_success 'stash save --patch --include-untracked fails' ' test_must_fail git stash --patch --include-untracked @@ -64,15 +64,15 @@ git clean --force --quiet cat > expect < output - test_cmp output expect + git status --porcelain >actual + test_cmp expect actual ' git clean --force --quiet @@ -96,8 +96,8 @@ EOF test_expect_success 'stash save --include-untracked dirty index got stashed' ' git stash pop --index && - git diff --cached > output && - test_cmp output expect + git diff --cached >actual && + test_cmp expect actual ' git reset > /dev/null From d88acc91785661ef261ed816c13b70068400d194 Mon Sep 17 00:00:00 2001 From: Brandon Casey Date: Fri, 26 Aug 2011 19:59:25 -0500 Subject: [PATCH 2/4] git-stash.sh: fix typo in error message Signed-off-by: Brandon Casey Signed-off-by: Junio C Hamano --- git-stash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git-stash.sh b/git-stash.sh index 7ffab6f26f..0d167fcdf6 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -199,7 +199,7 @@ save_stash () { if test -n "$patch_mode" && test -n "$untracked" then - die "Can't use --patch and ---include-untracked or --all at the same time" + die "Can't use --patch and --include-untracked or --all at the same time" fi stash_msg="$*" From c995ef49e2a3076236d8fc710cc2015f5ff201c5 Mon Sep 17 00:00:00 2001 From: Brandon Casey Date: Fri, 26 Aug 2011 19:59:26 -0500 Subject: [PATCH 3/4] t/t3905: add missing '&&' linkage Signed-off-by: Brandon Casey Signed-off-by: Junio C Hamano --- t/t3905-stash-include-untracked.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/t/t3905-stash-include-untracked.sh b/t/t3905-stash-include-untracked.sh index adc25245b9..ca1a46cb11 100755 --- a/t/t3905-stash-include-untracked.sh +++ b/t/t3905-stash-include-untracked.sh @@ -28,7 +28,7 @@ cat > expect <actual + git status --porcelain >actual && test_cmp expect actual ' @@ -71,7 +71,7 @@ EOF test_expect_success 'stash pop after save --include-untracked leaves files untracked again' ' git stash pop && - git status --porcelain >actual + git status --porcelain >actual && test_cmp expect actual ' @@ -136,7 +136,7 @@ test_expect_success 'stash save --include-untracked respects .gitignore' ' test_expect_success 'stash save -u can stash with only untracked files different' ' echo 4 > file4 && - git stash -u + git stash -u && test "!" -f file4 ' From 7474b8b452f2600bd2a9e03f67b83b489aeadb37 Mon Sep 17 00:00:00 2001 From: Brandon Casey Date: Fri, 26 Aug 2011 19:59:27 -0500 Subject: [PATCH 4/4] git-stash: remove untracked/ignored directories when stashed 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 Signed-off-by: Brandon Casey Signed-off-by: Junio C Hamano --- 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 0d167fcdf6..3157917230 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -228,7 +228,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 ca1a46cb11..ef44fb2260 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 <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 <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 < 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 '