All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brandon Casey <drafnel@gmail.com>
To: gitster@pobox.com
Cc: git@vger.kernel.org, hilco.wijbenga@gmail.com,
	david@porkrind.org, Brandon Casey <drafnel@gmail.com>
Subject: [PATCH 4/4] git-stash: remove untracked/ignored directories when stashed
Date: Fri, 26 Aug 2011 19:59:27 -0500	[thread overview]
Message-ID: <1314406767-17832-4-git-send-email-drafnel@gmail.com> (raw)
In-Reply-To: <1314406767-17832-1-git-send-email-drafnel@gmail.com>

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

  parent reply	other threads:[~2011-08-27  1:01 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-27  0:59 [PATCH 1/4] t/t3905: use the name 'actual' for test output, swap arguments to test_cmp Brandon Casey
2011-08-27  0:59 ` [PATCH 2/4] git-stash.sh: fix typo in error message Brandon Casey
2011-08-27  0:59 ` [PATCH 3/4] t/t3905: add missing '&&' linkage Brandon Casey
2011-08-27  0:59 ` Brandon Casey [this message]
2011-08-27  1:04   ` [PATCH 4/4] git-stash: remove untracked/ignored directories when stashed Hilco Wijbenga
2011-08-27 18:50 ` [PATCH 1/4] t/t3905: use the name 'actual' for test output, swap arguments to test_cmp Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1314406767-17832-4-git-send-email-drafnel@gmail.com \
    --to=drafnel@gmail.com \
    --cc=david@porkrind.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=hilco.wijbenga@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.