]>
Commit | Line | Data |
---|---|---|
70819263 LK |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2012 Valentin Duperray, Lucien Kong, Franck Jonas, | |
4 | # Thomas Nguy, Khoi Nguyen | |
5 | # Grenoble INP Ensimag | |
6 | # | |
7 | ||
4f021b34 | 8 | test_description='git status advice' |
70819263 LK |
9 | |
10 | . ./test-lib.sh | |
11 | ||
12 | . "$TEST_DIRECTORY"/lib-rebase.sh | |
13 | ||
14 | set_fake_editor | |
15 | ||
16 | test_expect_success 'prepare for conflicts' ' | |
6a38ef2c | 17 | git config --global advice.statusuoption false && |
70819263 LK |
18 | test_commit init main.txt init && |
19 | git branch conflicts && | |
20 | test_commit on_master main.txt on_master && | |
21 | git checkout conflicts && | |
22 | test_commit on_conflicts main.txt on_conflicts | |
23 | ' | |
24 | ||
25 | ||
26 | test_expect_success 'status when conflicts unresolved' ' | |
27 | test_must_fail git merge master && | |
1c7969c9 MM |
28 | cat >expected <<\EOF && |
29 | On branch conflicts | |
30 | You have unmerged paths. | |
31 | (fix conflicts and run "git commit") | |
b0a61ab2 | 32 | (use "git merge --abort" to abort the merge) |
1c7969c9 MM |
33 | |
34 | Unmerged paths: | |
35 | (use "git add <file>..." to mark resolution) | |
36 | ||
c7cb333f | 37 | both modified: main.txt |
1c7969c9 MM |
38 | |
39 | no changes added to commit (use "git add" and/or "git commit -a") | |
40 | EOF | |
70819263 LK |
41 | git status --untracked-files=no >actual && |
42 | test_i18ncmp expected actual | |
43 | ' | |
44 | ||
45 | ||
46 | test_expect_success 'status when conflicts resolved before commit' ' | |
47 | git reset --hard conflicts && | |
48 | test_must_fail git merge master && | |
49 | echo one >main.txt && | |
50 | git add main.txt && | |
1c7969c9 MM |
51 | cat >expected <<\EOF && |
52 | On branch conflicts | |
53 | All conflicts fixed but you are still merging. | |
54 | (use "git commit" to conclude merge) | |
55 | ||
56 | Changes to be committed: | |
57 | ||
58 | modified: main.txt | |
59 | ||
60 | Untracked files not listed (use -u option to show untracked files) | |
61 | EOF | |
70819263 LK |
62 | git status --untracked-files=no >actual && |
63 | test_i18ncmp expected actual | |
64 | ' | |
65 | ||
66 | ||
67 | test_expect_success 'prepare for rebase conflicts' ' | |
68 | git reset --hard master && | |
69 | git checkout -b rebase_conflicts && | |
70 | test_commit one_rebase main.txt one && | |
71 | test_commit two_rebase main.txt two && | |
72 | test_commit three_rebase main.txt three | |
73 | ' | |
74 | ||
75 | ||
76 | test_expect_success 'status when rebase in progress before resolving conflicts' ' | |
77 | test_when_finished "git rebase --abort" && | |
0722c805 | 78 | ONTO=$(git rev-parse --short HEAD^^) && |
70819263 | 79 | test_must_fail git rebase HEAD^ --onto HEAD^^ && |
1c7969c9 MM |
80 | cat >expected <<EOF && |
81 | rebase in progress; onto $ONTO | |
82 | You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''. | |
83 | (fix conflicts and then run "git rebase --continue") | |
84 | (use "git rebase --skip" to skip this patch) | |
85 | (use "git rebase --abort" to check out the original branch) | |
86 | ||
87 | Unmerged paths: | |
88 | (use "git reset HEAD <file>..." to unstage) | |
89 | (use "git add <file>..." to mark resolution) | |
90 | ||
c7cb333f | 91 | both modified: main.txt |
1c7969c9 MM |
92 | |
93 | no changes added to commit (use "git add" and/or "git commit -a") | |
94 | EOF | |
70819263 LK |
95 | git status --untracked-files=no >actual && |
96 | test_i18ncmp expected actual | |
97 | ' | |
98 | ||
99 | ||
100 | test_expect_success 'status when rebase in progress before rebase --continue' ' | |
101 | git reset --hard rebase_conflicts && | |
102 | test_when_finished "git rebase --abort" && | |
0722c805 | 103 | ONTO=$(git rev-parse --short HEAD^^) && |
70819263 LK |
104 | test_must_fail git rebase HEAD^ --onto HEAD^^ && |
105 | echo three >main.txt && | |
106 | git add main.txt && | |
1c7969c9 MM |
107 | cat >expected <<EOF && |
108 | rebase in progress; onto $ONTO | |
109 | You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''. | |
110 | (all conflicts fixed: run "git rebase --continue") | |
111 | ||
112 | Changes to be committed: | |
113 | (use "git reset HEAD <file>..." to unstage) | |
114 | ||
115 | modified: main.txt | |
116 | ||
117 | Untracked files not listed (use -u option to show untracked files) | |
118 | EOF | |
70819263 LK |
119 | git status --untracked-files=no >actual && |
120 | test_i18ncmp expected actual | |
121 | ' | |
122 | ||
123 | ||
124 | test_expect_success 'prepare for rebase_i_conflicts' ' | |
125 | git reset --hard master && | |
126 | git checkout -b rebase_i_conflicts && | |
127 | test_commit one_unmerge main.txt one_unmerge && | |
128 | git branch rebase_i_conflicts_second && | |
129 | test_commit one_master main.txt one_master && | |
130 | git checkout rebase_i_conflicts_second && | |
131 | test_commit one_second main.txt one_second | |
132 | ' | |
133 | ||
134 | ||
135 | test_expect_success 'status during rebase -i when conflicts unresolved' ' | |
136 | test_when_finished "git rebase --abort" && | |
0722c805 | 137 | ONTO=$(git rev-parse --short rebase_i_conflicts) && |
84e6fb9d | 138 | LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) && |
70819263 | 139 | test_must_fail git rebase -i rebase_i_conflicts && |
1c7969c9 | 140 | cat >expected <<EOF && |
df25e947 | 141 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
142 | Last command done (1 command done): |
143 | pick $LAST_COMMIT one_second | |
144 | No commands remaining. | |
1c7969c9 MM |
145 | You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''. |
146 | (fix conflicts and then run "git rebase --continue") | |
147 | (use "git rebase --skip" to skip this patch) | |
148 | (use "git rebase --abort" to check out the original branch) | |
149 | ||
150 | Unmerged paths: | |
151 | (use "git reset HEAD <file>..." to unstage) | |
152 | (use "git add <file>..." to mark resolution) | |
153 | ||
c7cb333f | 154 | both modified: main.txt |
1c7969c9 MM |
155 | |
156 | no changes added to commit (use "git add" and/or "git commit -a") | |
157 | EOF | |
70819263 LK |
158 | git status --untracked-files=no >actual && |
159 | test_i18ncmp expected actual | |
160 | ' | |
161 | ||
162 | ||
163 | test_expect_success 'status during rebase -i after resolving conflicts' ' | |
164 | git reset --hard rebase_i_conflicts_second && | |
165 | test_when_finished "git rebase --abort" && | |
0722c805 | 166 | ONTO=$(git rev-parse --short rebase_i_conflicts) && |
84e6fb9d | 167 | LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) && |
70819263 LK |
168 | test_must_fail git rebase -i rebase_i_conflicts && |
169 | git add main.txt && | |
1c7969c9 | 170 | cat >expected <<EOF && |
df25e947 | 171 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
172 | Last command done (1 command done): |
173 | pick $LAST_COMMIT one_second | |
174 | No commands remaining. | |
1c7969c9 MM |
175 | You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''. |
176 | (all conflicts fixed: run "git rebase --continue") | |
177 | ||
178 | Changes to be committed: | |
179 | (use "git reset HEAD <file>..." to unstage) | |
180 | ||
181 | modified: main.txt | |
182 | ||
183 | Untracked files not listed (use -u option to show untracked files) | |
184 | EOF | |
70819263 LK |
185 | git status --untracked-files=no >actual && |
186 | test_i18ncmp expected actual | |
187 | ' | |
188 | ||
189 | ||
190 | test_expect_success 'status when rebasing -i in edit mode' ' | |
191 | git reset --hard master && | |
192 | git checkout -b rebase_i_edit && | |
193 | test_commit one_rebase_i main.txt one && | |
194 | test_commit two_rebase_i main.txt two && | |
84e6fb9d | 195 | COMMIT2=$(git rev-parse --short rebase_i_edit) && |
70819263 | 196 | test_commit three_rebase_i main.txt three && |
84e6fb9d | 197 | COMMIT3=$(git rev-parse --short rebase_i_edit) && |
70819263 LK |
198 | FAKE_LINES="1 edit 2" && |
199 | export FAKE_LINES && | |
200 | test_when_finished "git rebase --abort" && | |
0722c805 | 201 | ONTO=$(git rev-parse --short HEAD~2) && |
70819263 | 202 | git rebase -i HEAD~2 && |
1c7969c9 | 203 | cat >expected <<EOF && |
df25e947 | 204 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
205 | Last commands done (2 commands done): |
206 | pick $COMMIT2 two_rebase_i | |
207 | edit $COMMIT3 three_rebase_i | |
208 | No commands remaining. | |
1c7969c9 MM |
209 | You are currently editing a commit while rebasing branch '\''rebase_i_edit'\'' on '\''$ONTO'\''. |
210 | (use "git commit --amend" to amend the current commit) | |
211 | (use "git rebase --continue" once you are satisfied with your changes) | |
212 | ||
213 | nothing to commit (use -u to show untracked files) | |
214 | EOF | |
70819263 LK |
215 | git status --untracked-files=no >actual && |
216 | test_i18ncmp expected actual | |
217 | ' | |
218 | ||
219 | ||
2d1cceba LK |
220 | test_expect_success 'status when splitting a commit' ' |
221 | git reset --hard master && | |
222 | git checkout -b split_commit && | |
223 | test_commit one_split main.txt one && | |
224 | test_commit two_split main.txt two && | |
84e6fb9d | 225 | COMMIT2=$(git rev-parse --short split_commit) && |
2d1cceba | 226 | test_commit three_split main.txt three && |
84e6fb9d | 227 | COMMIT3=$(git rev-parse --short split_commit) && |
2d1cceba | 228 | test_commit four_split main.txt four && |
84e6fb9d | 229 | COMMIT4=$(git rev-parse --short split_commit) && |
2d1cceba LK |
230 | FAKE_LINES="1 edit 2 3" && |
231 | export FAKE_LINES && | |
232 | test_when_finished "git rebase --abort" && | |
0722c805 | 233 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
234 | git rebase -i HEAD~3 && |
235 | git reset HEAD^ && | |
1c7969c9 | 236 | cat >expected <<EOF && |
df25e947 | 237 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
238 | Last commands done (2 commands done): |
239 | pick $COMMIT2 two_split | |
240 | edit $COMMIT3 three_split | |
241 | Next command to do (1 remaining command): | |
242 | pick $COMMIT4 four_split | |
243 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
244 | You are currently splitting a commit while rebasing branch '\''split_commit'\'' on '\''$ONTO'\''. |
245 | (Once your working directory is clean, run "git rebase --continue") | |
246 | ||
247 | Changes not staged for commit: | |
248 | (use "git add <file>..." to update what will be committed) | |
249 | (use "git checkout -- <file>..." to discard changes in working directory) | |
250 | ||
251 | modified: main.txt | |
252 | ||
253 | no changes added to commit (use "git add" and/or "git commit -a") | |
254 | EOF | |
2d1cceba LK |
255 | git status --untracked-files=no >actual && |
256 | test_i18ncmp expected actual | |
257 | ' | |
258 | ||
259 | ||
260 | test_expect_success 'status after editing the last commit with --amend during a rebase -i' ' | |
261 | git reset --hard master && | |
262 | git checkout -b amend_last && | |
263 | test_commit one_amend main.txt one && | |
264 | test_commit two_amend main.txt two && | |
265 | test_commit three_amend main.txt three && | |
84e6fb9d | 266 | COMMIT3=$(git rev-parse --short amend_last) && |
2d1cceba | 267 | test_commit four_amend main.txt four && |
84e6fb9d | 268 | COMMIT4=$(git rev-parse --short amend_last) && |
2d1cceba LK |
269 | FAKE_LINES="1 2 edit 3" && |
270 | export FAKE_LINES && | |
271 | test_when_finished "git rebase --abort" && | |
0722c805 | 272 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
273 | git rebase -i HEAD~3 && |
274 | git commit --amend -m "foo" && | |
1c7969c9 | 275 | cat >expected <<EOF && |
df25e947 | 276 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
277 | Last commands done (3 commands done): |
278 | pick $COMMIT3 three_amend | |
279 | edit $COMMIT4 four_amend | |
280 | (see more in file .git/rebase-merge/done) | |
281 | No commands remaining. | |
1c7969c9 MM |
282 | You are currently editing a commit while rebasing branch '\''amend_last'\'' on '\''$ONTO'\''. |
283 | (use "git commit --amend" to amend the current commit) | |
284 | (use "git rebase --continue" once you are satisfied with your changes) | |
285 | ||
286 | nothing to commit (use -u to show untracked files) | |
287 | EOF | |
2d1cceba LK |
288 | git status --untracked-files=no >actual && |
289 | test_i18ncmp expected actual | |
290 | ' | |
291 | ||
292 | ||
293 | test_expect_success 'prepare for several edits' ' | |
294 | git reset --hard master && | |
295 | git checkout -b several_edits && | |
296 | test_commit one_edits main.txt one && | |
297 | test_commit two_edits main.txt two && | |
298 | test_commit three_edits main.txt three && | |
299 | test_commit four_edits main.txt four | |
300 | ' | |
301 | ||
302 | ||
303 | test_expect_success 'status: (continue first edit) second edit' ' | |
304 | FAKE_LINES="edit 1 edit 2 3" && | |
305 | export FAKE_LINES && | |
306 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
307 | COMMIT2=$(git rev-parse --short several_edits^^) && |
308 | COMMIT3=$(git rev-parse --short several_edits^) && | |
309 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 310 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
311 | git rebase -i HEAD~3 && |
312 | git rebase --continue && | |
1c7969c9 | 313 | cat >expected <<EOF && |
df25e947 | 314 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
315 | Last commands done (2 commands done): |
316 | edit $COMMIT2 two_edits | |
317 | edit $COMMIT3 three_edits | |
318 | Next command to do (1 remaining command): | |
319 | pick $COMMIT4 four_edits | |
320 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
321 | You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
322 | (use "git commit --amend" to amend the current commit) | |
323 | (use "git rebase --continue" once you are satisfied with your changes) | |
324 | ||
325 | nothing to commit (use -u to show untracked files) | |
326 | EOF | |
2d1cceba LK |
327 | git status --untracked-files=no >actual && |
328 | test_i18ncmp expected actual | |
329 | ' | |
330 | ||
331 | ||
332 | test_expect_success 'status: (continue first edit) second edit and split' ' | |
333 | git reset --hard several_edits && | |
334 | FAKE_LINES="edit 1 edit 2 3" && | |
335 | export FAKE_LINES && | |
336 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
337 | COMMIT2=$(git rev-parse --short several_edits^^) && |
338 | COMMIT3=$(git rev-parse --short several_edits^) && | |
339 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 340 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
341 | git rebase -i HEAD~3 && |
342 | git rebase --continue && | |
343 | git reset HEAD^ && | |
1c7969c9 | 344 | cat >expected <<EOF && |
df25e947 | 345 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
346 | Last commands done (2 commands done): |
347 | edit $COMMIT2 two_edits | |
348 | edit $COMMIT3 three_edits | |
349 | Next command to do (1 remaining command): | |
350 | pick $COMMIT4 four_edits | |
351 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
352 | You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
353 | (Once your working directory is clean, run "git rebase --continue") | |
354 | ||
355 | Changes not staged for commit: | |
356 | (use "git add <file>..." to update what will be committed) | |
357 | (use "git checkout -- <file>..." to discard changes in working directory) | |
358 | ||
359 | modified: main.txt | |
360 | ||
361 | no changes added to commit (use "git add" and/or "git commit -a") | |
362 | EOF | |
2d1cceba LK |
363 | git status --untracked-files=no >actual && |
364 | test_i18ncmp expected actual | |
365 | ' | |
366 | ||
367 | ||
368 | test_expect_success 'status: (continue first edit) second edit and amend' ' | |
369 | git reset --hard several_edits && | |
370 | FAKE_LINES="edit 1 edit 2 3" && | |
371 | export FAKE_LINES && | |
372 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
373 | COMMIT2=$(git rev-parse --short several_edits^^) && |
374 | COMMIT3=$(git rev-parse --short several_edits^) && | |
375 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 376 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
377 | git rebase -i HEAD~3 && |
378 | git rebase --continue && | |
379 | git commit --amend -m "foo" && | |
1c7969c9 | 380 | cat >expected <<EOF && |
df25e947 | 381 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
382 | Last commands done (2 commands done): |
383 | edit $COMMIT2 two_edits | |
384 | edit $COMMIT3 three_edits | |
385 | Next command to do (1 remaining command): | |
386 | pick $COMMIT4 four_edits | |
387 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
388 | You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
389 | (use "git commit --amend" to amend the current commit) | |
390 | (use "git rebase --continue" once you are satisfied with your changes) | |
391 | ||
392 | nothing to commit (use -u to show untracked files) | |
393 | EOF | |
2d1cceba LK |
394 | git status --untracked-files=no >actual && |
395 | test_i18ncmp expected actual | |
396 | ' | |
397 | ||
398 | ||
399 | test_expect_success 'status: (amend first edit) second edit' ' | |
400 | git reset --hard several_edits && | |
401 | FAKE_LINES="edit 1 edit 2 3" && | |
402 | export FAKE_LINES && | |
403 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
404 | COMMIT2=$(git rev-parse --short several_edits^^) && |
405 | COMMIT3=$(git rev-parse --short several_edits^) && | |
406 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 407 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
408 | git rebase -i HEAD~3 && |
409 | git commit --amend -m "a" && | |
410 | git rebase --continue && | |
1c7969c9 | 411 | cat >expected <<EOF && |
df25e947 | 412 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
413 | Last commands done (2 commands done): |
414 | edit $COMMIT2 two_edits | |
415 | edit $COMMIT3 three_edits | |
416 | Next command to do (1 remaining command): | |
417 | pick $COMMIT4 four_edits | |
418 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
419 | You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
420 | (use "git commit --amend" to amend the current commit) | |
421 | (use "git rebase --continue" once you are satisfied with your changes) | |
422 | ||
423 | nothing to commit (use -u to show untracked files) | |
424 | EOF | |
2d1cceba LK |
425 | git status --untracked-files=no >actual && |
426 | test_i18ncmp expected actual | |
427 | ' | |
428 | ||
429 | ||
430 | test_expect_success 'status: (amend first edit) second edit and split' ' | |
431 | git reset --hard several_edits && | |
432 | FAKE_LINES="edit 1 edit 2 3" && | |
433 | export FAKE_LINES && | |
434 | test_when_finished "git rebase --abort" && | |
0722c805 | 435 | ONTO=$(git rev-parse --short HEAD~3) && |
84e6fb9d GP |
436 | COMMIT2=$(git rev-parse --short several_edits^^) && |
437 | COMMIT3=$(git rev-parse --short several_edits^) && | |
438 | COMMIT4=$(git rev-parse --short several_edits) && | |
2d1cceba LK |
439 | git rebase -i HEAD~3 && |
440 | git commit --amend -m "b" && | |
441 | git rebase --continue && | |
442 | git reset HEAD^ && | |
1c7969c9 | 443 | cat >expected <<EOF && |
df25e947 | 444 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
445 | Last commands done (2 commands done): |
446 | edit $COMMIT2 two_edits | |
447 | edit $COMMIT3 three_edits | |
448 | Next command to do (1 remaining command): | |
449 | pick $COMMIT4 four_edits | |
450 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
451 | You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
452 | (Once your working directory is clean, run "git rebase --continue") | |
453 | ||
454 | Changes not staged for commit: | |
455 | (use "git add <file>..." to update what will be committed) | |
456 | (use "git checkout -- <file>..." to discard changes in working directory) | |
457 | ||
458 | modified: main.txt | |
459 | ||
460 | no changes added to commit (use "git add" and/or "git commit -a") | |
461 | EOF | |
2d1cceba LK |
462 | git status --untracked-files=no >actual && |
463 | test_i18ncmp expected actual | |
464 | ' | |
465 | ||
466 | ||
467 | test_expect_success 'status: (amend first edit) second edit and amend' ' | |
468 | git reset --hard several_edits && | |
469 | FAKE_LINES="edit 1 edit 2 3" && | |
470 | export FAKE_LINES && | |
471 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
472 | COMMIT2=$(git rev-parse --short several_edits^^) && |
473 | COMMIT3=$(git rev-parse --short several_edits^) && | |
474 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 475 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
476 | git rebase -i HEAD~3 && |
477 | git commit --amend -m "c" && | |
478 | git rebase --continue && | |
479 | git commit --amend -m "d" && | |
1c7969c9 | 480 | cat >expected <<EOF && |
df25e947 | 481 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
482 | Last commands done (2 commands done): |
483 | edit $COMMIT2 two_edits | |
484 | edit $COMMIT3 three_edits | |
485 | Next command to do (1 remaining command): | |
486 | pick $COMMIT4 four_edits | |
487 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
488 | You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
489 | (use "git commit --amend" to amend the current commit) | |
490 | (use "git rebase --continue" once you are satisfied with your changes) | |
491 | ||
492 | nothing to commit (use -u to show untracked files) | |
493 | EOF | |
2d1cceba LK |
494 | git status --untracked-files=no >actual && |
495 | test_i18ncmp expected actual | |
496 | ' | |
497 | ||
498 | ||
499 | test_expect_success 'status: (split first edit) second edit' ' | |
500 | git reset --hard several_edits && | |
501 | FAKE_LINES="edit 1 edit 2 3" && | |
502 | export FAKE_LINES && | |
503 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
504 | COMMIT2=$(git rev-parse --short several_edits^^) && |
505 | COMMIT3=$(git rev-parse --short several_edits^) && | |
506 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 507 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
508 | git rebase -i HEAD~3 && |
509 | git reset HEAD^ && | |
510 | git add main.txt && | |
511 | git commit -m "e" && | |
512 | git rebase --continue && | |
1c7969c9 | 513 | cat >expected <<EOF && |
df25e947 | 514 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
515 | Last commands done (2 commands done): |
516 | edit $COMMIT2 two_edits | |
517 | edit $COMMIT3 three_edits | |
518 | Next command to do (1 remaining command): | |
519 | pick $COMMIT4 four_edits | |
520 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
521 | You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
522 | (use "git commit --amend" to amend the current commit) | |
523 | (use "git rebase --continue" once you are satisfied with your changes) | |
524 | ||
525 | nothing to commit (use -u to show untracked files) | |
526 | EOF | |
2d1cceba LK |
527 | git status --untracked-files=no >actual && |
528 | test_i18ncmp expected actual | |
529 | ' | |
530 | ||
531 | ||
532 | test_expect_success 'status: (split first edit) second edit and split' ' | |
533 | git reset --hard several_edits && | |
534 | FAKE_LINES="edit 1 edit 2 3" && | |
535 | export FAKE_LINES && | |
536 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
537 | COMMIT2=$(git rev-parse --short several_edits^^) && |
538 | COMMIT3=$(git rev-parse --short several_edits^) && | |
539 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 540 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
541 | git rebase -i HEAD~3 && |
542 | git reset HEAD^ && | |
543 | git add main.txt && | |
544 | git commit --amend -m "f" && | |
545 | git rebase --continue && | |
546 | git reset HEAD^ && | |
1c7969c9 | 547 | cat >expected <<EOF && |
df25e947 | 548 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
549 | Last commands done (2 commands done): |
550 | edit $COMMIT2 two_edits | |
551 | edit $COMMIT3 three_edits | |
552 | Next command to do (1 remaining command): | |
553 | pick $COMMIT4 four_edits | |
554 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
555 | You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
556 | (Once your working directory is clean, run "git rebase --continue") | |
557 | ||
558 | Changes not staged for commit: | |
559 | (use "git add <file>..." to update what will be committed) | |
560 | (use "git checkout -- <file>..." to discard changes in working directory) | |
561 | ||
562 | modified: main.txt | |
563 | ||
564 | no changes added to commit (use "git add" and/or "git commit -a") | |
565 | EOF | |
2d1cceba LK |
566 | git status --untracked-files=no >actual && |
567 | test_i18ncmp expected actual | |
568 | ' | |
569 | ||
570 | ||
571 | test_expect_success 'status: (split first edit) second edit and amend' ' | |
572 | git reset --hard several_edits && | |
573 | FAKE_LINES="edit 1 edit 2 3" && | |
574 | export FAKE_LINES && | |
575 | test_when_finished "git rebase --abort" && | |
84e6fb9d GP |
576 | COMMIT2=$(git rev-parse --short several_edits^^) && |
577 | COMMIT3=$(git rev-parse --short several_edits^) && | |
578 | COMMIT4=$(git rev-parse --short several_edits) && | |
0722c805 | 579 | ONTO=$(git rev-parse --short HEAD~3) && |
2d1cceba LK |
580 | git rebase -i HEAD~3 && |
581 | git reset HEAD^ && | |
582 | git add main.txt && | |
583 | git commit --amend -m "g" && | |
584 | git rebase --continue && | |
585 | git commit --amend -m "h" && | |
1c7969c9 | 586 | cat >expected <<EOF && |
df25e947 | 587 | interactive rebase in progress; onto $ONTO |
84e6fb9d GP |
588 | Last commands done (2 commands done): |
589 | edit $COMMIT2 two_edits | |
590 | edit $COMMIT3 three_edits | |
591 | Next command to do (1 remaining command): | |
592 | pick $COMMIT4 four_edits | |
593 | (use "git rebase --edit-todo" to view and edit) | |
1c7969c9 MM |
594 | You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''. |
595 | (use "git commit --amend" to amend the current commit) | |
596 | (use "git rebase --continue" once you are satisfied with your changes) | |
597 | ||
598 | nothing to commit (use -u to show untracked files) | |
599 | EOF | |
2d1cceba LK |
600 | git status --untracked-files=no >actual && |
601 | test_i18ncmp expected actual | |
602 | ' | |
603 | ||
604 | ||
70819263 LK |
605 | test_expect_success 'prepare am_session' ' |
606 | git reset --hard master && | |
607 | git checkout -b am_session && | |
608 | test_commit one_am one.txt "one" && | |
609 | test_commit two_am two.txt "two" && | |
610 | test_commit three_am three.txt "three" | |
611 | ' | |
612 | ||
613 | ||
614 | test_expect_success 'status in an am session: file already exists' ' | |
615 | git checkout -b am_already_exists && | |
616 | test_when_finished "rm Maildir/* && git am --abort" && | |
617 | git format-patch -1 -oMaildir && | |
618 | test_must_fail git am Maildir/*.patch && | |
1c7969c9 MM |
619 | cat >expected <<\EOF && |
620 | On branch am_already_exists | |
621 | You are in the middle of an am session. | |
622 | (fix conflicts and then run "git am --continue") | |
623 | (use "git am --skip" to skip this patch) | |
624 | (use "git am --abort" to restore the original branch) | |
625 | ||
626 | nothing to commit (use -u to show untracked files) | |
627 | EOF | |
70819263 LK |
628 | git status --untracked-files=no >actual && |
629 | test_i18ncmp expected actual | |
630 | ' | |
631 | ||
632 | ||
633 | test_expect_success 'status in an am session: file does not exist' ' | |
634 | git reset --hard am_session && | |
635 | git checkout -b am_not_exists && | |
636 | git rm three.txt && | |
637 | git commit -m "delete three.txt" && | |
638 | test_when_finished "rm Maildir/* && git am --abort" && | |
639 | git format-patch -1 -oMaildir && | |
640 | test_must_fail git am Maildir/*.patch && | |
1c7969c9 MM |
641 | cat >expected <<\EOF && |
642 | On branch am_not_exists | |
643 | You are in the middle of an am session. | |
644 | (fix conflicts and then run "git am --continue") | |
645 | (use "git am --skip" to skip this patch) | |
646 | (use "git am --abort" to restore the original branch) | |
647 | ||
648 | nothing to commit (use -u to show untracked files) | |
649 | EOF | |
70819263 LK |
650 | git status --untracked-files=no >actual && |
651 | test_i18ncmp expected actual | |
652 | ' | |
653 | ||
654 | ||
655 | test_expect_success 'status in an am session: empty patch' ' | |
656 | git reset --hard am_session && | |
657 | git checkout -b am_empty && | |
658 | test_when_finished "rm Maildir/* && git am --abort" && | |
659 | git format-patch -3 -oMaildir && | |
660 | git rm one.txt two.txt three.txt && | |
661 | git commit -m "delete all am_empty" && | |
662 | echo error >Maildir/0002-two_am.patch && | |
663 | test_must_fail git am Maildir/*.patch && | |
1c7969c9 MM |
664 | cat >expected <<\EOF && |
665 | On branch am_empty | |
666 | You are in the middle of an am session. | |
667 | The current patch is empty. | |
668 | (use "git am --skip" to skip this patch) | |
669 | (use "git am --abort" to restore the original branch) | |
670 | ||
671 | nothing to commit (use -u to show untracked files) | |
672 | EOF | |
70819263 LK |
673 | git status --untracked-files=no >actual && |
674 | test_i18ncmp expected actual | |
675 | ' | |
676 | ||
677 | ||
678 | test_expect_success 'status when bisecting' ' | |
679 | git reset --hard master && | |
680 | git checkout -b bisect && | |
681 | test_commit one_bisect main.txt one && | |
682 | test_commit two_bisect main.txt two && | |
683 | test_commit three_bisect main.txt three && | |
684 | test_when_finished "git bisect reset" && | |
685 | git bisect start && | |
686 | git bisect bad && | |
687 | git bisect good one_bisect && | |
b397ea48 | 688 | TGT=$(git rev-parse --short two_bisect) && |
1c7969c9 MM |
689 | cat >expected <<EOF && |
690 | HEAD detached at $TGT | |
691 | You are currently bisecting, started from branch '\''bisect'\''. | |
692 | (use "git bisect reset" to get back to the original branch) | |
693 | ||
694 | nothing to commit (use -u to show untracked files) | |
695 | EOF | |
70819263 LK |
696 | git status --untracked-files=no >actual && |
697 | test_i18ncmp expected actual | |
698 | ' | |
699 | ||
700 | ||
701 | test_expect_success 'status when rebase conflicts with statushints disabled' ' | |
702 | git reset --hard master && | |
703 | git checkout -b statushints_disabled && | |
704 | test_when_finished "git config --local advice.statushints true" && | |
705 | git config --local advice.statushints false && | |
706 | test_commit one_statushints main.txt one && | |
707 | test_commit two_statushints main.txt two && | |
708 | test_commit three_statushints main.txt three && | |
709 | test_when_finished "git rebase --abort" && | |
0722c805 | 710 | ONTO=$(git rev-parse --short HEAD^^) && |
70819263 | 711 | test_must_fail git rebase HEAD^ --onto HEAD^^ && |
1c7969c9 MM |
712 | cat >expected <<EOF && |
713 | rebase in progress; onto $ONTO | |
714 | You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''. | |
715 | ||
716 | Unmerged paths: | |
c7cb333f | 717 | both modified: main.txt |
1c7969c9 MM |
718 | |
719 | no changes added to commit | |
720 | EOF | |
70819263 LK |
721 | git status --untracked-files=no >actual && |
722 | test_i18ncmp expected actual | |
723 | ' | |
724 | ||
725 | ||
726 | test_expect_success 'prepare for cherry-pick conflicts' ' | |
727 | git reset --hard master && | |
728 | git checkout -b cherry_branch && | |
729 | test_commit one_cherry main.txt one && | |
730 | test_commit two_cherries main.txt two && | |
731 | git checkout -b cherry_branch_second && | |
732 | test_commit second_cherry main.txt second && | |
733 | git checkout cherry_branch && | |
734 | test_commit three_cherries main.txt three | |
735 | ' | |
736 | ||
737 | ||
738 | test_expect_success 'status when cherry-picking before resolving conflicts' ' | |
739 | test_when_finished "git cherry-pick --abort" && | |
740 | test_must_fail git cherry-pick cherry_branch_second && | |
bffd8098 RT |
741 | TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) && |
742 | cat >expected <<EOF && | |
1c7969c9 | 743 | On branch cherry_branch |
bffd8098 | 744 | You are currently cherry-picking commit $TO_CHERRY_PICK. |
1c7969c9 MM |
745 | (fix conflicts and run "git cherry-pick --continue") |
746 | (use "git cherry-pick --abort" to cancel the cherry-pick operation) | |
747 | ||
748 | Unmerged paths: | |
749 | (use "git add <file>..." to mark resolution) | |
750 | ||
c7cb333f | 751 | both modified: main.txt |
1c7969c9 MM |
752 | |
753 | no changes added to commit (use "git add" and/or "git commit -a") | |
754 | EOF | |
70819263 LK |
755 | git status --untracked-files=no >actual && |
756 | test_i18ncmp expected actual | |
757 | ' | |
758 | ||
759 | ||
760 | test_expect_success 'status when cherry-picking after resolving conflicts' ' | |
761 | git reset --hard cherry_branch && | |
762 | test_when_finished "git cherry-pick --abort" && | |
763 | test_must_fail git cherry-pick cherry_branch_second && | |
bffd8098 | 764 | TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) && |
70819263 LK |
765 | echo end >main.txt && |
766 | git add main.txt && | |
bffd8098 | 767 | cat >expected <<EOF && |
1c7969c9 | 768 | On branch cherry_branch |
bffd8098 | 769 | You are currently cherry-picking commit $TO_CHERRY_PICK. |
1c7969c9 MM |
770 | (all conflicts fixed: run "git cherry-pick --continue") |
771 | (use "git cherry-pick --abort" to cancel the cherry-pick operation) | |
772 | ||
773 | Changes to be committed: | |
774 | ||
775 | modified: main.txt | |
776 | ||
777 | Untracked files not listed (use -u option to show untracked files) | |
778 | EOF | |
70819263 LK |
779 | git status --untracked-files=no >actual && |
780 | test_i18ncmp expected actual | |
781 | ' | |
782 | ||
46ab7d46 | 783 | test_expect_success 'status showing detached at and from a tag' ' |
b397ea48 NTND |
784 | test_commit atag tagging && |
785 | git checkout atag && | |
59c22205 | 786 | cat >expected <<\EOF && |
1c7969c9 MM |
787 | HEAD detached at atag |
788 | nothing to commit (use -u to show untracked files) | |
789 | EOF | |
b397ea48 | 790 | git status --untracked-files=no >actual && |
46ab7d46 JH |
791 | test_i18ncmp expected actual && |
792 | ||
793 | git reset --hard HEAD^ && | |
59c22205 | 794 | cat >expected <<\EOF && |
1c7969c9 MM |
795 | HEAD detached from atag |
796 | nothing to commit (use -u to show untracked files) | |
797 | EOF | |
46ab7d46 | 798 | git status --untracked-files=no >actual && |
b397ea48 NTND |
799 | test_i18ncmp expected actual |
800 | ' | |
70819263 | 801 | |
db4ef449 MM |
802 | test_expect_success 'status while reverting commit (conflicts)' ' |
803 | git checkout master && | |
804 | echo before >to-revert.txt && | |
805 | test_commit before to-revert.txt && | |
806 | echo old >to-revert.txt && | |
807 | test_commit old to-revert.txt && | |
808 | echo new >to-revert.txt && | |
809 | test_commit new to-revert.txt && | |
87e139c0 MM |
810 | TO_REVERT=$(git rev-parse --short HEAD^) && |
811 | test_must_fail git revert $TO_REVERT && | |
59c22205 | 812 | cat >expected <<EOF && |
1c7969c9 MM |
813 | On branch master |
814 | You are currently reverting commit $TO_REVERT. | |
815 | (fix conflicts and run "git revert --continue") | |
816 | (use "git revert --abort" to cancel the revert operation) | |
817 | ||
818 | Unmerged paths: | |
819 | (use "git reset HEAD <file>..." to unstage) | |
820 | (use "git add <file>..." to mark resolution) | |
821 | ||
c7cb333f | 822 | both modified: to-revert.txt |
1c7969c9 MM |
823 | |
824 | no changes added to commit (use "git add" and/or "git commit -a") | |
825 | EOF | |
db4ef449 MM |
826 | git status --untracked-files=no >actual && |
827 | test_i18ncmp expected actual | |
828 | ' | |
829 | ||
830 | test_expect_success 'status while reverting commit (conflicts resolved)' ' | |
831 | echo reverted >to-revert.txt && | |
832 | git add to-revert.txt && | |
59c22205 | 833 | cat >expected <<EOF && |
1c7969c9 MM |
834 | On branch master |
835 | You are currently reverting commit $TO_REVERT. | |
836 | (all conflicts fixed: run "git revert --continue") | |
837 | (use "git revert --abort" to cancel the revert operation) | |
838 | ||
839 | Changes to be committed: | |
840 | (use "git reset HEAD <file>..." to unstage) | |
841 | ||
842 | modified: to-revert.txt | |
843 | ||
844 | Untracked files not listed (use -u option to show untracked files) | |
845 | EOF | |
db4ef449 MM |
846 | git status --untracked-files=no >actual && |
847 | test_i18ncmp expected actual | |
848 | ' | |
849 | ||
850 | test_expect_success 'status after reverting commit' ' | |
851 | git revert --continue && | |
59c22205 | 852 | cat >expected <<\EOF && |
1c7969c9 MM |
853 | On branch master |
854 | nothing to commit (use -u to show untracked files) | |
855 | EOF | |
db4ef449 MM |
856 | git status --untracked-files=no >actual && |
857 | test_i18ncmp expected actual | |
858 | ' | |
859 | ||
592e412d GP |
860 | test_expect_success 'prepare for different number of commits rebased' ' |
861 | git reset --hard master && | |
862 | git checkout -b several_commits && | |
863 | test_commit one_commit main.txt one && | |
864 | test_commit two_commit main.txt two && | |
865 | test_commit three_commit main.txt three && | |
866 | test_commit four_commit main.txt four | |
867 | ' | |
868 | ||
869 | test_expect_success 'status: one command done nothing remaining' ' | |
870 | FAKE_LINES="exec_exit_15" && | |
871 | export FAKE_LINES && | |
872 | test_when_finished "git rebase --abort" && | |
873 | ONTO=$(git rev-parse --short HEAD~3) && | |
874 | test_must_fail git rebase -i HEAD~3 && | |
875 | cat >expected <<EOF && | |
876 | interactive rebase in progress; onto $ONTO | |
877 | Last command done (1 command done): | |
878 | exec exit 15 | |
879 | No commands remaining. | |
880 | You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''. | |
881 | (use "git commit --amend" to amend the current commit) | |
882 | (use "git rebase --continue" once you are satisfied with your changes) | |
883 | ||
884 | nothing to commit (use -u to show untracked files) | |
885 | EOF | |
886 | git status --untracked-files=no >actual && | |
887 | test_i18ncmp expected actual | |
888 | ' | |
889 | ||
890 | test_expect_success 'status: two commands done with some white lines in done file' ' | |
891 | FAKE_LINES="1 > exec_exit_15 2 3" && | |
892 | export FAKE_LINES && | |
893 | test_when_finished "git rebase --abort" && | |
894 | ONTO=$(git rev-parse --short HEAD~3) && | |
895 | COMMIT4=$(git rev-parse --short HEAD) && | |
896 | COMMIT3=$(git rev-parse --short HEAD^) && | |
897 | COMMIT2=$(git rev-parse --short HEAD^^) && | |
898 | test_must_fail git rebase -i HEAD~3 && | |
899 | cat >expected <<EOF && | |
900 | interactive rebase in progress; onto $ONTO | |
901 | Last commands done (2 commands done): | |
902 | pick $COMMIT2 two_commit | |
903 | exec exit 15 | |
904 | Next commands to do (2 remaining commands): | |
905 | pick $COMMIT3 three_commit | |
906 | pick $COMMIT4 four_commit | |
907 | (use "git rebase --edit-todo" to view and edit) | |
908 | You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''. | |
909 | (use "git commit --amend" to amend the current commit) | |
910 | (use "git rebase --continue" once you are satisfied with your changes) | |
911 | ||
912 | nothing to commit (use -u to show untracked files) | |
913 | EOF | |
914 | git status --untracked-files=no >actual && | |
915 | test_i18ncmp expected actual | |
916 | ' | |
917 | ||
918 | test_expect_success 'status: two remaining commands with some white lines in todo file' ' | |
919 | FAKE_LINES="1 2 exec_exit_15 3 > 4" && | |
920 | export FAKE_LINES && | |
921 | test_when_finished "git rebase --abort" && | |
922 | ONTO=$(git rev-parse --short HEAD~4) && | |
923 | COMMIT4=$(git rev-parse --short HEAD) && | |
924 | COMMIT3=$(git rev-parse --short HEAD^) && | |
925 | COMMIT2=$(git rev-parse --short HEAD^^) && | |
926 | test_must_fail git rebase -i HEAD~4 && | |
927 | cat >expected <<EOF && | |
928 | interactive rebase in progress; onto $ONTO | |
929 | Last commands done (3 commands done): | |
930 | pick $COMMIT2 two_commit | |
931 | exec exit 15 | |
932 | (see more in file .git/rebase-merge/done) | |
933 | Next commands to do (2 remaining commands): | |
934 | pick $COMMIT3 three_commit | |
935 | pick $COMMIT4 four_commit | |
936 | (use "git rebase --edit-todo" to view and edit) | |
937 | You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''. | |
938 | (use "git commit --amend" to amend the current commit) | |
939 | (use "git rebase --continue" once you are satisfied with your changes) | |
940 | ||
941 | nothing to commit (use -u to show untracked files) | |
942 | EOF | |
943 | git status --untracked-files=no >actual && | |
944 | test_i18ncmp expected actual | |
945 | ' | |
946 | ||
df9ded49 JS |
947 | test_expect_success 'status: handle not-yet-started rebase -i gracefully' ' |
948 | ONTO=$(git rev-parse --short HEAD^) && | |
949 | COMMIT=$(git rev-parse --short HEAD) && | |
950 | EDITOR="git status --untracked-files=no >actual" git rebase -i HEAD^ && | |
951 | cat >expected <<EOF && | |
952 | On branch several_commits | |
953 | No commands done. | |
954 | Next command to do (1 remaining command): | |
955 | pick $COMMIT four_commit | |
956 | (use "git rebase --edit-todo" to view and edit) | |
957 | You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''. | |
958 | (use "git commit --amend" to amend the current commit) | |
959 | (use "git rebase --continue" once you are satisfied with your changes) | |
960 | ||
961 | nothing to commit (use -u to show untracked files) | |
962 | EOF | |
963 | test_i18ncmp expected actual | |
964 | ' | |
965 | ||
70819263 | 966 | test_done |