Release 0.19
[stgit.git] / t / t1209-pop-spill.sh
blob9bf633c17db78d4b2aee7e535e7235280943b3c2
1 #!/bin/sh
3 test_description='Test "stg pop --spill"'
5 . ./test-lib.sh
7 stg init
9 reset_test () {
10 stg reset --hard
11 stg push -a
14 test_expect_success 'Create a few patches' '
15 for i in 0 1 2; do
16 stg new p$i -m p$i &&
17 echo "patch$i" >> p.txt &&
18 stg add p.txt &&
19 stg refresh
20 done &&
21 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
22 [ "$(echo $(stg series --unapplied --noprefix))" = "" ]
25 test_expect_success 'Attempt to spill non-topmost patch' '
26 command_error stg pop --spill p0 2>&1 |
27 grep -e "Can only spill topmost applied patches"
30 test_expect_success 'Pop a patch, keeping its modifications in the tree' '
31 stg pop --spill &&
32 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
33 [ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
34 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
37 test_expect_success 'Pop another patch, keeping this patch modifications in the tree' '
38 stg pop --spill &&
39 [ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
40 [ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
41 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
44 test_expect_success 'Pop last patch, keeping its modifications in the tree' '
45 stg pop --spill &&
46 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
47 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
48 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
51 test_expect_code 2 'Try to pop from an empty stack' '
52 stg pop --spill
55 reset_test
57 test_expect_success 'Pop all patches, keeping modifications in the tree' '
58 stg pop --spill --all &&
59 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
60 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
61 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
64 reset_test
66 test_expect_success 'Pop zero patch, keeping modifications in the tree' '
67 stg pop --spill -n 0 &&
68 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
69 [ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
70 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
73 # No need, nothing popped
74 #reset_test
76 test_expect_success 'Pop one single patch, keeping modifications in the tree' '
77 stg pop --spill -n 1 &&
78 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
79 [ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
80 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
83 reset_test
85 test_expect_success 'Pop all but one patch, keeping modifications in the tree' '
86 stg pop --spill -n -1 &&
87 [ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
88 [ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
89 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
92 reset_test
94 test_expect_success 'Pop more than stack length, keeping modifications in the tree' '
95 stg pop --spill -n 3 &&
96 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
97 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
98 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
101 reset_test
103 test_expect_success 'Pop more than stack length, keeping modifications in the tree' '
104 stg pop --spill -n 4 &&
105 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
106 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
107 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
110 reset_test
112 test_expect_code 2 'Pop all but more than stack length, keeping modifications in the tree' '
113 stg pop --spill -n -4 &&
114 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
115 [ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
116 [ "$(echo $(cat p.txt))" = "patch0 patch1 patch2" ]
119 # No need, nothing popped
120 #reset_test
122 test_expect_success 'Create a few patches that touch separate files' '
123 stg delete .. &&
124 for i in 0 1 2; do
125 stg new p$i -m p$i &&
126 echo "patch$i" >> p$i.txt &&
127 stg add p$i.txt &&
128 stg refresh
129 done &&
130 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
131 [ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
132 [ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ]
135 test_expect_success 'Pop patches that touch separate files' '
136 stg pop --spill &&
137 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
138 [ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
139 [ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ] &&
140 stg pop --spill &&
141 [ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
142 [ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
143 [ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ] &&
144 stg pop --spill &&
145 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
146 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
147 [ "$(echo $(cat p?.txt))" = "patch0 patch1 patch2" ]
150 test_expect_success 'Create a few patches that touch the same lines in a file' '
151 stg delete .. &&
152 for i in 0 1 2; do
153 stg new p$i -m p$i &&
154 echo "patch$i" > p.txt &&
155 stg add p.txt &&
156 stg refresh
157 done &&
158 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
159 [ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
160 [ "$(echo $(cat p.txt))" = "patch2" ]
163 test_expect_success 'Pop patches that all touch the same lines in a file' '
164 stg pop --spill &&
165 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
166 [ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
167 [ "$(echo $(cat p.txt))" = "patch2" ] &&
168 stg pop --spill &&
169 [ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
170 [ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
171 [ "$(echo $(cat p.txt))" = "patch2" ] &&
172 stg pop --spill &&
173 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
174 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
175 [ "$(echo $(cat p.txt))" = "patch2" ]
178 test_expect_success 'Pop an empty patch' '
179 stg delete .. &&
180 echo "spillemptypatch" > p.txt &&
181 git add p.txt &&
182 git commit -m spillempty p.txt &&
183 stg new spillempty -m spillempty &&
184 stg refresh &&
185 [ "$(echo $(stg series --applied --noprefix))" = "spillempty" ] &&
186 [ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
187 [ "$(echo $(cat p.txt))" = "spillemptypatch" ] &&
188 stg pop --spill &&
189 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
190 [ "$(echo $(stg series --unapplied --noprefix))" = "spillempty" ] &&
191 [ "$(echo $(cat p.txt))" = "spillemptypatch" ]
194 # Spill with uncommitted modifs
195 # Tests adapted from t1204-pop-keep.sh
197 test_expect_success 'Create a few patches & make some non-conflicting local changes' '
198 git reset --hard &&
199 stg delete .. &&
200 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
201 [ "$(echo $(stg series --unapplied --noprefix))" = "" ]
202 for i in 0 1 2; do
203 stg new p$i -m p$i &&
204 echo "patch$i" >> patch$i.txt &&
205 stg add patch$i.txt &&
206 stg refresh
207 done &&
208 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
209 [ "$(echo $(stg series --unapplied --noprefix))" = "" ]
210 echo "local" >> patch0.txt
213 test_expect_success 'Pop two patches, keeping local changes' '
214 stg pop -n 2 --keep --spill &&
215 [ "$(echo $(stg series --applied --noprefix))" = "p0" ] &&
216 [ "$(echo $(stg series --unapplied --noprefix))" = "p1 p2" ] &&
217 [ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
218 [ "$(echo $(cat patch0.txt))" = "patch0 local" ] &&
219 [ "$(echo $(cat patch?.txt))" = "patch0 local patch1 patch2" ]
222 test_expect_success 'Pop remaining patch, keeping local changes' '
223 stg pop --keep --spill &&
224 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
225 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
226 [ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
227 [ "$(echo $(cat patch0.txt))" = "patch0 local" ] &&
228 [ "$(echo $(cat patch?.txt))" = "patch0 local patch1 patch2" ]
231 test_expect_success 'Reset repository' '
232 git reset --hard &&
233 [ "$(echo $(stg series --applied --noprefix))" = "" ] &&
234 [ "$(echo $(stg series --unapplied --noprefix))" = "p0 p1 p2" ] &&
235 [ "$(echo $(ls patch?.txt 2> /dev/null))" = "" ]
238 test_expect_success 'Push patches again' '
239 stg push -a &&
240 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1 p2" ] &&
241 [ "$(echo $(stg series --unapplied --noprefix))" = "" ] &&
242 [ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
243 [ "$(echo $(cat patch0.txt))" = "patch0" ] &&
244 [ "$(echo $(cat patch?.txt))" = "patch0 patch1 patch2" ]
247 test_expect_success 'Pop a patch without local changes' '
248 stg pop --keep --spill &&
249 [ "$(echo $(stg series --applied --noprefix))" = "p0 p1" ] &&
250 [ "$(echo $(stg series --unapplied --noprefix))" = "p2" ] &&
251 [ "$(echo $(ls patch?.txt))" = "patch0.txt patch1.txt patch2.txt" ] &&
252 [ "$(echo $(cat patch0.txt))" = "patch0" ] &&
253 [ "$(echo $(cat patch?.txt))" = "patch0 patch1 patch2" ]
256 test_done