Browse Source

Merge branch 'bc/unstash-clean-crufts'

* bc/unstash-clean-crufts:
  git-stash: remove untracked/ignored directories when stashed
  t/t3905: add missing '&&' linkage
  git-stash.sh: fix typo in error message
  t/t3905: use the name 'actual' for test output, swap arguments to test_cmp
maint
Junio C Hamano 13 years ago
parent
commit
9eb765d5f4
  1. 4
      git-stash.sh
  2. 48
      t/t3905-stash-include-untracked.sh

4
git-stash.sh

@ -211,7 +211,7 @@ save_stash () { @@ -211,7 +211,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="$*"
@ -240,7 +240,7 @@ save_stash () { @@ -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

48
t/t3905-stash-include-untracked.sh

@ -17,19 +17,21 @@ test_expect_success 'stash save --include-untracked some dirty working directory @@ -17,19 +17,21 @@ 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
'

cat > expect <<EOF
?? actual
?? expect
?? output
EOF

test_expect_success 'stash save --include-untracked cleaned the untracked files' '
git status --porcelain > output
test_cmp output expect
git status --porcelain >actual &&
test_cmp expect actual
'

cat > expect.diff <<EOF
@ -40,17 +42,26 @@ index 0000000..d00491f @@ -40,17 +42,26 @@ 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 > output &&
test_cmp output expect.diff &&
git ls-tree --name-only stash^3: > output &&
test_cmp output expect.lstree
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
'
test_expect_success 'stash save --patch --include-untracked fails' '
test_must_fail git stash --patch --include-untracked
@ -64,18 +75,21 @@ git clean --force --quiet @@ -64,18 +75,21 @@ git clean --force --quiet

cat > expect <<EOF
M file
?? actual
?? expect
?? file2
?? output
?? untracked/
EOF

test_expect_success 'stash pop after save --include-untracked leaves files untracked again' '
git stash pop &&
git status --porcelain > output
test_cmp output expect
git status --porcelain >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 &&
@ -96,8 +110,8 @@ EOF @@ -96,8 +110,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
@ -125,30 +139,36 @@ test_expect_success 'stash save --include-untracked removed files got stashed' ' @@ -125,30 +139,36 @@ 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
'

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
'

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
'


Loading…
Cancel
Save