Tests redirect to err file when grepping stderr
[stgit.git] / t / t2203-rebase-interactive.sh
blob17437c4009f79736db906a22e3f4046521d2bd4c
1 #!/bin/sh
3 test_description='test rebase --interactive'
5 . ./test-lib.sh
8 test_expect_success 'Initialize StGit stack' '
9 stg init &&
10 stg new p0 -m p0 &&
11 stg new p1 -m p1 &&
12 stg new p2 -m p2 &&
13 stg new p3 -m p3
16 test_expect_success 'Setup fake editor' '
17 write_script fake-editor <<-\EOF
18 printf "keep p0\nkeep p1\n# --- APPLY_LINE ---\nkeep p2\nkeep p3\n" >"$1"
19 EOF
21 test_expect_success 'Apply patches with APPLY_LINE' '
22 test_set_editor "$(pwd)/fake-editor" &&
23 test_when_finished test_set_editor false &&
24 stg rebase --interactive &&
25 test "$(stg series --applied -c)" = "2" &&
26 git diff-index --quiet HEAD
29 test_expect_success 'Setup fake editor' '
30 write_script fake-editor <<-\EOF
31 printf "# --- APPLY_LINE ---this_text_does_not_belong\n" >"$1"
32 EOF
34 test_expect_success 'Bad APPLY_LINE throws an error' '
35 test_set_editor "$(pwd)/fake-editor" &&
36 test_when_finished test_set_editor false &&
37 command_error stg rebase --interactive 2>err &&
38 grep -e "Bad APPLY_LINE" err
41 test_expect_success 'Setup fake editor' '
42 write_script fake-editor <<-\EOF
43 printf "keep p0\nkeep p1\n" >"$1"
44 EOF
46 test_expect_success 'Apply patches without APPLY_LINE' '
47 test_set_editor "$(pwd)/fake-editor" &&
48 test_when_finished test_set_editor false &&
49 stg rebase --interactive &&
50 test "$(stg series --applied -c)" = "2" &&
51 git diff-index --quiet HEAD
54 test_expect_success 'Setup fake editor' '
55 write_script fake-editor <<-\EOF
56 printf "keep\n" >"$1"
57 EOF
59 test_expect_success 'Bad todo line throws error' '
60 test_set_editor "$(pwd)/fake-editor" &&
61 test_when_finished test_set_editor false &&
62 command_error stg rebase --interactive 2>err &&
63 grep -e "Bad todo line" err
66 test_expect_success 'Setup fake editor' '
67 write_script fake-editor <<-\EOF
68 printf "keep invalid_patch_name\n" >"$1"
69 EOF
71 test_expect_success 'Bad patch name throws error' '
72 test_set_editor "$(pwd)/fake-editor" &&
73 test_when_finished test_set_editor false &&
74 command_error stg rebase --interactive 2>err &&
75 grep -e "Bad patch name" err
78 test_expect_success 'Setup fake editor' '
79 write_script fake-editor <<-\EOF
80 printf "invalid_instruction p1\n" >"$1"
81 EOF
83 test_expect_success 'Bad instruction throws error' '
84 test_set_editor "$(pwd)/fake-editor" &&
85 test_when_finished test_set_editor false &&
86 command_error stg rebase --interactive 2>err &&
87 grep -e "Unknown instruction" err
90 test_expect_success 'Setup stgit stack' '
91 stg new pHidden -m pHidden
93 test_expect_success 'Setup fake editor' '
94 write_script fake-editor <<-\eof
95 printf "hide pHidden\n" >"$1"
96 eof
98 test_expect_success 'Hide a patch' '
99 test_set_editor "$(pwd)/fake-editor" &&
100 test_when_finished test_set_editor false &&
101 stg rebase --interactive &&
102 test "$(stg series -c)" = "4" &&
103 test "$(stg series -c --hidden)" = "1" &&
104 git diff-index --quiet HEAD
107 test_expect_success 'Setup stgit stack' '
108 stg new p4 -m p4
110 test_expect_success 'Setup fake editor' '
111 write_script fake-editor <<-\eof
112 printf "delete p4\n" >"$1"
115 test_expect_success 'Delete a patch' '
116 test_set_editor "$(pwd)/fake-editor" &&
117 test_when_finished test_set_editor false &&
118 stg rebase --interactive &&
119 test "$(stg series -c)" = "4" &&
120 git diff-index --quiet HEAD
123 test_expect_success 'Setup stgit stack' '
124 stg new p4 -m p4
126 test_expect_success 'Setup fake editor' '
127 write_script fake-editor <<-\eof
128 printf "edit p4\n" >"$1"
131 test_expect_success 'Edit a patch' '
132 test_set_editor "$(pwd)/fake-editor" &&
133 test_when_finished test_set_editor false &&
134 stg rebase --interactive &&
135 git diff-index --quiet HEAD &&
136 stg show | grep -e "edit p4"
139 test_expect_success 'Setup stgit stack' '
140 stg delete --top &&
141 stg new p4 -m p4
143 test_expect_success 'Setup fake editor' '
144 write_script fake-editor <<-\eof
145 if [ ! -f .fake-editor-has-run-once ]
146 then
147 printf "edit p4\n" >"$1" &&
148 touch .fake-editor-has-run-once
149 else
150 sed "s/Patch: p4/Patch: p4-new/" "$1" > "$1".tmp && mv "$1".tmp "$1"
154 test_expect_success 'Edit and rename a patch' '
155 test_set_editor "$(pwd)/fake-editor" &&
156 test_when_finished test_set_editor false &&
157 stg rebase --interactive &&
158 git diff-index --quiet HEAD &&
159 stg top | grep -e "p4-new"
161 rm .fake-editor-has-run-once
164 test_expect_success 'Setup fake editor' '
165 write_script fake-editor <<-\eof
166 if [ ! -f .fake-editor-has-run-once ]
167 then
168 printf "edit p4-new\n" >"$1" &&
169 touch .fake-editor-has-run-once
170 else
171 sed "s/Patch: p4-new/Patch:/" "$1" > "$1".tmp && mv "$1".tmp "$1"
175 test_expect_success 'Edit a patch and clear its patchname' '
176 test_set_editor "$(pwd)/fake-editor" &&
177 test_when_finished test_set_editor false &&
178 stg rebase --interactive &&
179 git diff-index --quiet HEAD &&
180 stg top | grep -e "p4"
182 rm .fake-editor-has-run-once
184 test_expect_success 'Setup stgit stack' '
185 stg delete $(stg series --all --noprefix --no-description) &&
186 stg new -m p0 &&
187 stg new -m p1 &&
188 stg new -m p2 &&
189 stg new -m p3
191 test_expect_success 'Setup fake editor' '
192 write_script fake-editor <<-\eof
193 printf "delete p0\ndelete p2\n" >"$1"
196 test_expect_success 'Delete two patches and the correct two are deleted' '
197 test_set_editor "$(pwd)/fake-editor" &&
198 test_when_finished test_set_editor false &&
199 stg rebase --interactive &&
200 test "$(echo $(stg series --noprefix))" = "p1 p3" &&
201 git diff-index --quiet HEAD
204 test_expect_success 'Setup stgit stack' '
205 stg delete $(stg series --all --noprefix --no-description) &&
206 stg new -m p0 &&
207 stg new -m p1
209 test_expect_success 'Setup fake editor' '
210 write_script fake-editor <<-\EOF
211 printf "keep p0\nsquash p1\n" >"$1"
214 test_expect_success 'Squash succeeds' '
215 test_set_editor "$(pwd)/fake-editor" &&
216 test_when_finished test_set_editor false &&
217 stg rebase --interactive &&
218 git diff-index --quiet HEAD &&
219 test "$(stg series -c)" = "1"
222 test_expect_success 'Setup stgit stack' '
223 stg delete $(stg series --all --noprefix --no-description) &&
224 stg new -m p0 &&
225 stg new -m p1 &&
226 stg new -m p2
228 test_expect_success 'Setup fake editor' '
229 write_script fake-editor <<-\EOF
230 printf "keep p0\nsquash p1\nsquash p2\n" >"$1"
233 test_expect_success 'Squash on a Squash succeeds' '
234 test_set_editor "$(pwd)/fake-editor" &&
235 test_when_finished test_set_editor false &&
236 stg rebase --interactive &&
237 git diff-index --quiet HEAD &&
238 test "$(stg series -c)" = "1"
241 test_expect_success 'Setup stgit stack' '
242 stg delete $(stg series --all --noprefix --no-description) &&
243 stg new -m p0 &&
244 stg new -m p1
246 test_expect_success 'Setup fake editor' '
247 write_script fake-editor <<-\EOF
248 printf "fix p0\nfix p1\n" >"$1"
251 test_expect_success 'Fix on first patch does not crash' '
252 test_set_editor "$(pwd)/fake-editor" &&
253 test_when_finished test_set_editor false &&
254 stg rebase --interactive &&
255 git diff-index --quiet HEAD &&
256 test "$(stg series -c)" = "1"
259 test_expect_success 'Setup stgit stack' '
260 stg delete $(stg series --all --noprefix --no-description) &&
261 stg new -m p0 &&
262 stg new -m p1
264 test_expect_success 'Setup fake editor' '
265 write_script fake-editor <<-\EOF
266 printf "keep p0\nfix p1\n" >"$1"
269 test_expect_success 'Fix succeeds' '
270 test_set_editor "$(pwd)/fake-editor" &&
271 test_when_finished test_set_editor false &&
272 stg rebase --interactive &&
273 git diff-index --quiet HEAD &&
274 test "$(stg series -c)" = "1"
277 test_expect_success 'Setup stgit stack' '
278 stg delete $(stg series --all --noprefix --no-description) &&
279 stg new -m p0 &&
280 stg new -m p1 &&
281 stg new -m p2 &&
282 stg new -m p3 &&
283 stg new -m p4 &&
284 stg new -m p5
286 test_expect_success 'Setup fake editor' '
287 write_script fake-editor <<-\EOF
288 printf "keep p0\nsquash p1\nsquash p2\nkeep p3\nsquash p4\nkeep p5\n" >"$1"
291 test_expect_success 'Two independent squash chains succeed' '
292 test_set_editor "$(pwd)/fake-editor" &&
293 test_when_finished test_set_editor false &&
294 stg rebase --interactive &&
295 git diff-index --quiet HEAD &&
296 test "$(stg series -c)" = "3"
299 test_expect_success 'Setup stgit stack' '
300 stg delete $(stg series --all --noprefix --no-description) &&
301 stg new -m p0 &&
302 stg new -m p1 &&
303 stg new -m p2 &&
304 stg new -m p3 &&
305 stg new -m p4
307 test_expect_success 'Setup fake editor' '
308 write_script fake-editor <<-\eof
309 printf "keep p0\ndelete p1\nsquash p2\ndelete p3" >"$1"
312 test_expect_success 'Delete after squash after delete works correctly' '
313 test_set_editor "$(pwd)/fake-editor" &&
314 test_when_finished test_set_editor false &&
315 stg rebase --interactive &&
316 test "$(echo $(stg series --noprefix))" = "keep-p0 p4" &&
317 git diff-index --quiet HEAD
320 test_expect_success 'Setup stgit stack' '
321 stg delete $(stg series --all --noprefix --no-description) &&
322 stg new -m p0 &&
323 stg new -m p1 &&
324 stg new -m p2
326 test_expect_success 'Setup fake editor' '
327 write_script fake-editor <<-\eof
328 printf "keep p0\nhide p1\nfixup p2" >"$1"
331 test_expect_success 'Fixup after hide works correctly' '
332 test_set_editor "$(pwd)/fake-editor" &&
333 test_when_finished test_set_editor false &&
334 stg rebase --interactive &&
335 test "$(echo $(stg series --noprefix))" = "p0" &&
336 test "$(echo $(stg series --noprefix --hidden))" = "p1" &&
337 git diff-index --quiet HEAD
340 test_expect_success 'No patches exits early' '
341 stg delete $(stg series --all --noprefix --no-description) &&
342 stg rebase --interactive
346 test_done