Merge branch 'maint-1.5.4' into maint
[git] / t / t3903-stash.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2007 Johannes E Schindelin
4 #
5
6 test_description='Test git-stash'
7
8 . ./test-lib.sh
9
10 test_expect_success 'stash some dirty working directory' '
11         echo 1 > file &&
12         git add file &&
13         test_tick &&
14         git commit -m initial &&
15         echo 2 > file &&
16         git add file &&
17         echo 3 > file &&
18         test_tick &&
19         git stash &&
20         git diff-files --quiet &&
21         git diff-index --cached --quiet HEAD
22 '
23
24 cat > expect << EOF
25 diff --git a/file b/file
26 index 0cfbf08..00750ed 100644
27 --- a/file
28 +++ b/file
29 @@ -1 +1 @@
30 -2
31 +3
32 EOF
33
34 test_expect_success 'parents of stash' '
35         test $(git rev-parse stash^) = $(git rev-parse HEAD) &&
36         git diff stash^2..stash > output &&
37         test_cmp output expect
38 '
39
40 test_expect_success 'apply needs clean working directory' '
41         echo 4 > other-file &&
42         git add other-file &&
43         echo 5 > other-file &&
44         test_must_fail git stash apply
45 '
46
47 test_expect_success 'apply stashed changes' '
48         git add other-file &&
49         test_tick &&
50         git commit -m other-file &&
51         git stash apply &&
52         test 3 = $(cat file) &&
53         test 1 = $(git show :file) &&
54         test 1 = $(git show HEAD:file)
55 '
56
57 test_expect_success 'apply stashed changes (including index)' '
58         git reset --hard HEAD^ &&
59         echo 6 > other-file &&
60         git add other-file &&
61         test_tick &&
62         git commit -m other-file &&
63         git stash apply --index &&
64         test 3 = $(cat file) &&
65         test 2 = $(git show :file) &&
66         test 1 = $(git show HEAD:file)
67 '
68
69 test_expect_success 'unstashing in a subdirectory' '
70         git reset --hard HEAD &&
71         mkdir subdir &&
72         cd subdir &&
73         git stash apply &&
74         cd ..
75 '
76
77 test_expect_success 'drop top stash' '
78         git reset --hard &&
79         git stash list > stashlist1 &&
80         echo 7 > file &&
81         git stash &&
82         git stash drop &&
83         git stash list > stashlist2 &&
84         diff stashlist1 stashlist2 &&
85         git stash apply &&
86         test 3 = $(cat file) &&
87         test 1 = $(git show :file) &&
88         test 1 = $(git show HEAD:file)
89 '
90
91 test_expect_success 'drop middle stash' '
92         git reset --hard &&
93         echo 8 > file &&
94         git stash &&
95         echo 9 > file &&
96         git stash &&
97         git stash drop stash@{1} &&
98         test 2 = $(git stash list | wc -l) &&
99         git stash apply &&
100         test 9 = $(cat file) &&
101         test 1 = $(git show :file) &&
102         test 1 = $(git show HEAD:file) &&
103         git reset --hard &&
104         git stash drop &&
105         git stash apply &&
106         test 3 = $(cat file) &&
107         test 1 = $(git show :file) &&
108         test 1 = $(git show HEAD:file)
109 '
110
111 test_expect_success 'stash pop' '
112         git reset --hard &&
113         git stash pop &&
114         test 3 = $(cat file) &&
115         test 1 = $(git show :file) &&
116         test 1 = $(git show HEAD:file) &&
117         test 0 = $(git stash list | wc -l)
118 '
119
120 test_done