Merge branch 'tb/commit-graph-genv2-upgrade-fix' into maint
[git/debian.git] / t / t7512-status-help.sh
blob2f16d5787edfb16956312a3be70fb9da1ffadc46
1 #!/bin/sh
3 # Copyright (c) 2012 Valentin Duperray, Lucien Kong, Franck Jonas,
4 # Thomas Nguy, Khoi Nguyen
5 # Grenoble INP Ensimag
8 test_description='git status advice'
10 GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
11 export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
13 . ./test-lib.sh
15 . "$TEST_DIRECTORY"/lib-rebase.sh
17 set_fake_editor
19 test_expect_success 'prepare for conflicts' '
20 git config --global advice.statusuoption false &&
21 test_commit init main.txt init &&
22 git branch conflicts &&
23 test_commit on_main main.txt on_main &&
24 git checkout conflicts &&
25 test_commit on_conflicts main.txt on_conflicts
29 test_expect_success 'status when conflicts unresolved' '
30 test_must_fail git merge main &&
31 cat >expected <<\EOF &&
32 On branch conflicts
33 You have unmerged paths.
34 (fix conflicts and run "git commit")
35 (use "git merge --abort" to abort the merge)
37 Unmerged paths:
38 (use "git add <file>..." to mark resolution)
39 both modified: main.txt
41 no changes added to commit (use "git add" and/or "git commit -a")
42 EOF
43 git status --untracked-files=no >actual &&
44 test_cmp expected actual
48 test_expect_success 'status when conflicts resolved before commit' '
49 git reset --hard conflicts &&
50 test_must_fail git merge main &&
51 echo one >main.txt &&
52 git add main.txt &&
53 cat >expected <<\EOF &&
54 On branch conflicts
55 All conflicts fixed but you are still merging.
56 (use "git commit" to conclude merge)
58 Changes to be committed:
59 modified: main.txt
61 Untracked files not listed (use -u option to show untracked files)
62 EOF
63 git status --untracked-files=no >actual &&
64 test_cmp expected actual
68 test_expect_success 'prepare for rebase conflicts' '
69 git reset --hard main &&
70 git checkout -b rebase_conflicts &&
71 test_commit one_rebase main.txt one &&
72 test_commit two_rebase main.txt two &&
73 test_commit three_rebase main.txt three
77 test_expect_success 'status when rebase --apply in progress before resolving conflicts' '
78 test_when_finished "git rebase --abort" &&
79 ONTO=$(git rev-parse --short HEAD^^) &&
80 test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
81 cat >expected <<EOF &&
82 rebase in progress; onto $ONTO
83 You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
84 (fix conflicts and then run "git rebase --continue")
85 (use "git rebase --skip" to skip this patch)
86 (use "git rebase --abort" to check out the original branch)
88 Unmerged paths:
89 (use "git restore --staged <file>..." to unstage)
90 (use "git add <file>..." to mark resolution)
91 both modified: main.txt
93 no changes added to commit (use "git add" and/or "git commit -a")
94 EOF
95 git status --untracked-files=no >actual &&
96 test_cmp expected actual
100 test_expect_success 'status when rebase --apply in progress before rebase --continue' '
101 git reset --hard rebase_conflicts &&
102 test_when_finished "git rebase --abort" &&
103 ONTO=$(git rev-parse --short HEAD^^) &&
104 test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
105 echo three >main.txt &&
106 git add main.txt &&
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")
112 Changes to be committed:
113 (use "git restore --staged <file>..." to unstage)
114 modified: main.txt
116 Untracked files not listed (use -u option to show untracked files)
118 git status --untracked-files=no >actual &&
119 test_cmp expected actual
123 test_expect_success 'prepare for rebase_i_conflicts' '
124 git reset --hard main &&
125 git checkout -b rebase_i_conflicts &&
126 test_commit one_unmerge main.txt one_unmerge &&
127 git branch rebase_i_conflicts_second &&
128 test_commit one_main main.txt one_main &&
129 git checkout rebase_i_conflicts_second &&
130 test_commit one_second main.txt one_second
134 test_expect_success 'status during rebase -i when conflicts unresolved' '
135 test_when_finished "git rebase --abort" &&
136 ONTO=$(git rev-parse --short rebase_i_conflicts) &&
137 LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
138 test_must_fail git rebase -i rebase_i_conflicts &&
139 cat >expected <<EOF &&
140 interactive rebase in progress; onto $ONTO
141 Last command done (1 command done):
142 pick $LAST_COMMIT one_second
143 No commands remaining.
144 You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
145 (fix conflicts and then run "git rebase --continue")
146 (use "git rebase --skip" to skip this patch)
147 (use "git rebase --abort" to check out the original branch)
149 Unmerged paths:
150 (use "git restore --staged <file>..." to unstage)
151 (use "git add <file>..." to mark resolution)
152 both modified: main.txt
154 no changes added to commit (use "git add" and/or "git commit -a")
156 git status --untracked-files=no >actual &&
157 test_cmp expected actual
161 test_expect_success 'status during rebase -i after resolving conflicts' '
162 git reset --hard rebase_i_conflicts_second &&
163 test_when_finished "git rebase --abort" &&
164 ONTO=$(git rev-parse --short rebase_i_conflicts) &&
165 LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
166 test_must_fail git rebase -i rebase_i_conflicts &&
167 git add main.txt &&
168 cat >expected <<EOF &&
169 interactive rebase in progress; onto $ONTO
170 Last command done (1 command done):
171 pick $LAST_COMMIT one_second
172 No commands remaining.
173 You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
174 (all conflicts fixed: run "git rebase --continue")
176 Changes to be committed:
177 (use "git restore --staged <file>..." to unstage)
178 modified: main.txt
180 Untracked files not listed (use -u option to show untracked files)
182 git status --untracked-files=no >actual &&
183 test_cmp expected actual
187 test_expect_success 'status when rebasing -i in edit mode' '
188 git reset --hard main &&
189 git checkout -b rebase_i_edit &&
190 test_commit one_rebase_i main.txt one &&
191 test_commit two_rebase_i main.txt two &&
192 COMMIT2=$(git rev-parse --short rebase_i_edit) &&
193 test_commit three_rebase_i main.txt three &&
194 COMMIT3=$(git rev-parse --short rebase_i_edit) &&
195 FAKE_LINES="1 edit 2" &&
196 export FAKE_LINES &&
197 test_when_finished "git rebase --abort" &&
198 ONTO=$(git rev-parse --short HEAD~2) &&
199 git rebase -i HEAD~2 &&
200 cat >expected <<EOF &&
201 interactive rebase in progress; onto $ONTO
202 Last commands done (2 commands done):
203 pick $COMMIT2 two_rebase_i
204 edit $COMMIT3 three_rebase_i
205 No commands remaining.
206 You are currently editing a commit while rebasing branch '\''rebase_i_edit'\'' on '\''$ONTO'\''.
207 (use "git commit --amend" to amend the current commit)
208 (use "git rebase --continue" once you are satisfied with your changes)
210 nothing to commit (use -u to show untracked files)
212 git status --untracked-files=no >actual &&
213 test_cmp expected actual
217 test_expect_success 'status when splitting a commit' '
218 git reset --hard main &&
219 git checkout -b split_commit &&
220 test_commit one_split main.txt one &&
221 test_commit two_split main.txt two &&
222 COMMIT2=$(git rev-parse --short split_commit) &&
223 test_commit three_split main.txt three &&
224 COMMIT3=$(git rev-parse --short split_commit) &&
225 test_commit four_split main.txt four &&
226 COMMIT4=$(git rev-parse --short split_commit) &&
227 FAKE_LINES="1 edit 2 3" &&
228 export FAKE_LINES &&
229 test_when_finished "git rebase --abort" &&
230 ONTO=$(git rev-parse --short HEAD~3) &&
231 git rebase -i HEAD~3 &&
232 git reset HEAD^ &&
233 cat >expected <<EOF &&
234 interactive rebase in progress; onto $ONTO
235 Last commands done (2 commands done):
236 pick $COMMIT2 two_split
237 edit $COMMIT3 three_split
238 Next command to do (1 remaining command):
239 pick $COMMIT4 four_split
240 (use "git rebase --edit-todo" to view and edit)
241 You are currently splitting a commit while rebasing branch '\''split_commit'\'' on '\''$ONTO'\''.
242 (Once your working directory is clean, run "git rebase --continue")
244 Changes not staged for commit:
245 (use "git add <file>..." to update what will be committed)
246 (use "git restore <file>..." to discard changes in working directory)
247 modified: main.txt
249 no changes added to commit (use "git add" and/or "git commit -a")
251 git status --untracked-files=no >actual &&
252 test_cmp expected actual
256 test_expect_success 'status after editing the last commit with --amend during a rebase -i' '
257 git reset --hard main &&
258 git checkout -b amend_last &&
259 test_commit one_amend main.txt one &&
260 test_commit two_amend main.txt two &&
261 test_commit three_amend main.txt three &&
262 COMMIT3=$(git rev-parse --short amend_last) &&
263 test_commit four_amend main.txt four &&
264 COMMIT4=$(git rev-parse --short amend_last) &&
265 FAKE_LINES="1 2 edit 3" &&
266 export FAKE_LINES &&
267 test_when_finished "git rebase --abort" &&
268 ONTO=$(git rev-parse --short HEAD~3) &&
269 git rebase -i HEAD~3 &&
270 git commit --amend -m "foo" &&
271 cat >expected <<EOF &&
272 interactive rebase in progress; onto $ONTO
273 Last commands done (3 commands done):
274 pick $COMMIT3 three_amend
275 edit $COMMIT4 four_amend
276 (see more in file .git/rebase-merge/done)
277 No commands remaining.
278 You are currently editing a commit while rebasing branch '\''amend_last'\'' on '\''$ONTO'\''.
279 (use "git commit --amend" to amend the current commit)
280 (use "git rebase --continue" once you are satisfied with your changes)
282 nothing to commit (use -u to show untracked files)
284 git status --untracked-files=no >actual &&
285 test_cmp expected actual
289 test_expect_success 'prepare for several edits' '
290 git reset --hard main &&
291 git checkout -b several_edits &&
292 test_commit one_edits main.txt one &&
293 test_commit two_edits main.txt two &&
294 test_commit three_edits main.txt three &&
295 test_commit four_edits main.txt four
299 test_expect_success 'status: (continue first edit) second edit' '
300 FAKE_LINES="edit 1 edit 2 3" &&
301 export FAKE_LINES &&
302 test_when_finished "git rebase --abort" &&
303 COMMIT2=$(git rev-parse --short several_edits^^) &&
304 COMMIT3=$(git rev-parse --short several_edits^) &&
305 COMMIT4=$(git rev-parse --short several_edits) &&
306 ONTO=$(git rev-parse --short HEAD~3) &&
307 git rebase -i HEAD~3 &&
308 git rebase --continue &&
309 cat >expected <<EOF &&
310 interactive rebase in progress; onto $ONTO
311 Last commands done (2 commands done):
312 edit $COMMIT2 two_edits
313 edit $COMMIT3 three_edits
314 Next command to do (1 remaining command):
315 pick $COMMIT4 four_edits
316 (use "git rebase --edit-todo" to view and edit)
317 You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
318 (use "git commit --amend" to amend the current commit)
319 (use "git rebase --continue" once you are satisfied with your changes)
321 nothing to commit (use -u to show untracked files)
323 git status --untracked-files=no >actual &&
324 test_cmp expected actual
328 test_expect_success 'status: (continue first edit) second edit and split' '
329 git reset --hard several_edits &&
330 FAKE_LINES="edit 1 edit 2 3" &&
331 export FAKE_LINES &&
332 test_when_finished "git rebase --abort" &&
333 COMMIT2=$(git rev-parse --short several_edits^^) &&
334 COMMIT3=$(git rev-parse --short several_edits^) &&
335 COMMIT4=$(git rev-parse --short several_edits) &&
336 ONTO=$(git rev-parse --short HEAD~3) &&
337 git rebase -i HEAD~3 &&
338 git rebase --continue &&
339 git reset HEAD^ &&
340 cat >expected <<EOF &&
341 interactive rebase in progress; onto $ONTO
342 Last commands done (2 commands done):
343 edit $COMMIT2 two_edits
344 edit $COMMIT3 three_edits
345 Next command to do (1 remaining command):
346 pick $COMMIT4 four_edits
347 (use "git rebase --edit-todo" to view and edit)
348 You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
349 (Once your working directory is clean, run "git rebase --continue")
351 Changes not staged for commit:
352 (use "git add <file>..." to update what will be committed)
353 (use "git restore <file>..." to discard changes in working directory)
354 modified: main.txt
356 no changes added to commit (use "git add" and/or "git commit -a")
358 git status --untracked-files=no >actual &&
359 test_cmp expected actual
363 test_expect_success 'status: (continue first edit) second edit and amend' '
364 git reset --hard several_edits &&
365 FAKE_LINES="edit 1 edit 2 3" &&
366 export FAKE_LINES &&
367 test_when_finished "git rebase --abort" &&
368 COMMIT2=$(git rev-parse --short several_edits^^) &&
369 COMMIT3=$(git rev-parse --short several_edits^) &&
370 COMMIT4=$(git rev-parse --short several_edits) &&
371 ONTO=$(git rev-parse --short HEAD~3) &&
372 git rebase -i HEAD~3 &&
373 git rebase --continue &&
374 git commit --amend -m "foo" &&
375 cat >expected <<EOF &&
376 interactive rebase in progress; onto $ONTO
377 Last commands done (2 commands done):
378 edit $COMMIT2 two_edits
379 edit $COMMIT3 three_edits
380 Next command to do (1 remaining command):
381 pick $COMMIT4 four_edits
382 (use "git rebase --edit-todo" to view and edit)
383 You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
384 (use "git commit --amend" to amend the current commit)
385 (use "git rebase --continue" once you are satisfied with your changes)
387 nothing to commit (use -u to show untracked files)
389 git status --untracked-files=no >actual &&
390 test_cmp expected actual
394 test_expect_success 'status: (amend first edit) second edit' '
395 git reset --hard several_edits &&
396 FAKE_LINES="edit 1 edit 2 3" &&
397 export FAKE_LINES &&
398 test_when_finished "git rebase --abort" &&
399 COMMIT2=$(git rev-parse --short several_edits^^) &&
400 COMMIT3=$(git rev-parse --short several_edits^) &&
401 COMMIT4=$(git rev-parse --short several_edits) &&
402 ONTO=$(git rev-parse --short HEAD~3) &&
403 git rebase -i HEAD~3 &&
404 git commit --amend -m "a" &&
405 git rebase --continue &&
406 cat >expected <<EOF &&
407 interactive rebase in progress; onto $ONTO
408 Last commands done (2 commands done):
409 edit $COMMIT2 two_edits
410 edit $COMMIT3 three_edits
411 Next command to do (1 remaining command):
412 pick $COMMIT4 four_edits
413 (use "git rebase --edit-todo" to view and edit)
414 You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
415 (use "git commit --amend" to amend the current commit)
416 (use "git rebase --continue" once you are satisfied with your changes)
418 nothing to commit (use -u to show untracked files)
420 git status --untracked-files=no >actual &&
421 test_cmp expected actual
425 test_expect_success 'status: (amend first edit) second edit and split' '
426 git reset --hard several_edits &&
427 FAKE_LINES="edit 1 edit 2 3" &&
428 export FAKE_LINES &&
429 test_when_finished "git rebase --abort" &&
430 ONTO=$(git rev-parse --short HEAD~3) &&
431 COMMIT2=$(git rev-parse --short several_edits^^) &&
432 COMMIT3=$(git rev-parse --short several_edits^) &&
433 COMMIT4=$(git rev-parse --short several_edits) &&
434 git rebase -i HEAD~3 &&
435 git commit --amend -m "b" &&
436 git rebase --continue &&
437 git reset HEAD^ &&
438 cat >expected <<EOF &&
439 interactive rebase in progress; onto $ONTO
440 Last commands done (2 commands done):
441 edit $COMMIT2 two_edits
442 edit $COMMIT3 three_edits
443 Next command to do (1 remaining command):
444 pick $COMMIT4 four_edits
445 (use "git rebase --edit-todo" to view and edit)
446 You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
447 (Once your working directory is clean, run "git rebase --continue")
449 Changes not staged for commit:
450 (use "git add <file>..." to update what will be committed)
451 (use "git restore <file>..." to discard changes in working directory)
452 modified: main.txt
454 no changes added to commit (use "git add" and/or "git commit -a")
456 git status --untracked-files=no >actual &&
457 test_cmp expected actual
461 test_expect_success 'status: (amend first edit) second edit and amend' '
462 git reset --hard several_edits &&
463 FAKE_LINES="edit 1 edit 2 3" &&
464 export FAKE_LINES &&
465 test_when_finished "git rebase --abort" &&
466 COMMIT2=$(git rev-parse --short several_edits^^) &&
467 COMMIT3=$(git rev-parse --short several_edits^) &&
468 COMMIT4=$(git rev-parse --short several_edits) &&
469 ONTO=$(git rev-parse --short HEAD~3) &&
470 git rebase -i HEAD~3 &&
471 git commit --amend -m "c" &&
472 git rebase --continue &&
473 git commit --amend -m "d" &&
474 cat >expected <<EOF &&
475 interactive rebase in progress; onto $ONTO
476 Last commands done (2 commands done):
477 edit $COMMIT2 two_edits
478 edit $COMMIT3 three_edits
479 Next command to do (1 remaining command):
480 pick $COMMIT4 four_edits
481 (use "git rebase --edit-todo" to view and edit)
482 You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
483 (use "git commit --amend" to amend the current commit)
484 (use "git rebase --continue" once you are satisfied with your changes)
486 nothing to commit (use -u to show untracked files)
488 git status --untracked-files=no >actual &&
489 test_cmp expected actual
493 test_expect_success 'status: (split first edit) second edit' '
494 git reset --hard several_edits &&
495 FAKE_LINES="edit 1 edit 2 3" &&
496 export FAKE_LINES &&
497 test_when_finished "git rebase --abort" &&
498 COMMIT2=$(git rev-parse --short several_edits^^) &&
499 COMMIT3=$(git rev-parse --short several_edits^) &&
500 COMMIT4=$(git rev-parse --short several_edits) &&
501 ONTO=$(git rev-parse --short HEAD~3) &&
502 git rebase -i HEAD~3 &&
503 git reset HEAD^ &&
504 git add main.txt &&
505 git commit -m "e" &&
506 git rebase --continue &&
507 cat >expected <<EOF &&
508 interactive rebase in progress; onto $ONTO
509 Last commands done (2 commands done):
510 edit $COMMIT2 two_edits
511 edit $COMMIT3 three_edits
512 Next command to do (1 remaining command):
513 pick $COMMIT4 four_edits
514 (use "git rebase --edit-todo" to view and edit)
515 You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
516 (use "git commit --amend" to amend the current commit)
517 (use "git rebase --continue" once you are satisfied with your changes)
519 nothing to commit (use -u to show untracked files)
521 git status --untracked-files=no >actual &&
522 test_cmp expected actual
526 test_expect_success 'status: (split first edit) second edit and split' '
527 git reset --hard several_edits &&
528 FAKE_LINES="edit 1 edit 2 3" &&
529 export FAKE_LINES &&
530 test_when_finished "git rebase --abort" &&
531 COMMIT2=$(git rev-parse --short several_edits^^) &&
532 COMMIT3=$(git rev-parse --short several_edits^) &&
533 COMMIT4=$(git rev-parse --short several_edits) &&
534 ONTO=$(git rev-parse --short HEAD~3) &&
535 git rebase -i HEAD~3 &&
536 git reset HEAD^ &&
537 git add main.txt &&
538 git commit --amend -m "f" &&
539 git rebase --continue &&
540 git reset HEAD^ &&
541 cat >expected <<EOF &&
542 interactive rebase in progress; onto $ONTO
543 Last commands done (2 commands done):
544 edit $COMMIT2 two_edits
545 edit $COMMIT3 three_edits
546 Next command to do (1 remaining command):
547 pick $COMMIT4 four_edits
548 (use "git rebase --edit-todo" to view and edit)
549 You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
550 (Once your working directory is clean, run "git rebase --continue")
552 Changes not staged for commit:
553 (use "git add <file>..." to update what will be committed)
554 (use "git restore <file>..." to discard changes in working directory)
555 modified: main.txt
557 no changes added to commit (use "git add" and/or "git commit -a")
559 git status --untracked-files=no >actual &&
560 test_cmp expected actual
564 test_expect_success 'status: (split first edit) second edit and amend' '
565 git reset --hard several_edits &&
566 FAKE_LINES="edit 1 edit 2 3" &&
567 export FAKE_LINES &&
568 test_when_finished "git rebase --abort" &&
569 COMMIT2=$(git rev-parse --short several_edits^^) &&
570 COMMIT3=$(git rev-parse --short several_edits^) &&
571 COMMIT4=$(git rev-parse --short several_edits) &&
572 ONTO=$(git rev-parse --short HEAD~3) &&
573 git rebase -i HEAD~3 &&
574 git reset HEAD^ &&
575 git add main.txt &&
576 git commit --amend -m "g" &&
577 git rebase --continue &&
578 git commit --amend -m "h" &&
579 cat >expected <<EOF &&
580 interactive rebase in progress; onto $ONTO
581 Last commands done (2 commands done):
582 edit $COMMIT2 two_edits
583 edit $COMMIT3 three_edits
584 Next command to do (1 remaining command):
585 pick $COMMIT4 four_edits
586 (use "git rebase --edit-todo" to view and edit)
587 You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
588 (use "git commit --amend" to amend the current commit)
589 (use "git rebase --continue" once you are satisfied with your changes)
591 nothing to commit (use -u to show untracked files)
593 git status --untracked-files=no >actual &&
594 test_cmp expected actual
598 test_expect_success 'prepare am_session' '
599 git reset --hard main &&
600 git checkout -b am_session &&
601 test_commit one_am one.txt "one" &&
602 test_commit two_am two.txt "two" &&
603 test_commit three_am three.txt "three"
607 test_expect_success 'status in an am session: file already exists' '
608 git checkout -b am_already_exists &&
609 test_when_finished "rm Maildir/* && git am --abort" &&
610 git format-patch -1 -oMaildir &&
611 test_must_fail git am Maildir/*.patch &&
612 cat >expected <<\EOF &&
613 On branch am_already_exists
614 You are in the middle of an am session.
615 (fix conflicts and then run "git am --continue")
616 (use "git am --skip" to skip this patch)
617 (use "git am --abort" to restore the original branch)
619 nothing to commit (use -u to show untracked files)
621 git status --untracked-files=no >actual &&
622 test_cmp expected actual
626 test_expect_success 'status in an am session: file does not exist' '
627 git reset --hard am_session &&
628 git checkout -b am_not_exists &&
629 git rm three.txt &&
630 git commit -m "delete three.txt" &&
631 test_when_finished "rm Maildir/* && git am --abort" &&
632 git format-patch -1 -oMaildir &&
633 test_must_fail git am Maildir/*.patch &&
634 cat >expected <<\EOF &&
635 On branch am_not_exists
636 You are in the middle of an am session.
637 (fix conflicts and then run "git am --continue")
638 (use "git am --skip" to skip this patch)
639 (use "git am --abort" to restore the original branch)
641 nothing to commit (use -u to show untracked files)
643 git status --untracked-files=no >actual &&
644 test_cmp expected actual
648 test_expect_success 'status in an am session: empty patch' '
649 git reset --hard am_session &&
650 git checkout -b am_empty &&
651 test_when_finished "rm Maildir/* && git am --abort" &&
652 git format-patch -3 -oMaildir &&
653 git rm one.txt two.txt three.txt &&
654 git commit -m "delete all am_empty" &&
655 echo error >Maildir/0002-two_am.patch &&
656 test_must_fail git am Maildir/*.patch &&
657 cat >expected <<\EOF &&
658 On branch am_empty
659 You are in the middle of an am session.
660 The current patch is empty.
661 (use "git am --skip" to skip this patch)
662 (use "git am --allow-empty" to record this patch as an empty commit)
663 (use "git am --abort" to restore the original branch)
665 nothing to commit (use -u to show untracked files)
667 git status --untracked-files=no >actual &&
668 test_cmp expected actual
672 test_expect_success 'status when bisecting' '
673 git reset --hard main &&
674 git checkout -b bisect &&
675 test_commit one_bisect main.txt one &&
676 test_commit two_bisect main.txt two &&
677 test_commit three_bisect main.txt three &&
678 test_when_finished "git bisect reset" &&
679 git bisect start &&
680 git bisect bad &&
681 git bisect good one_bisect &&
682 TGT=$(git rev-parse --short two_bisect) &&
683 cat >expected <<EOF &&
684 HEAD detached at $TGT
685 You are currently bisecting, started from branch '\''bisect'\''.
686 (use "git bisect reset" to get back to the original branch)
688 nothing to commit (use -u to show untracked files)
690 git status --untracked-files=no >actual &&
691 test_cmp expected actual
695 test_expect_success 'status when rebase --apply conflicts with statushints disabled' '
696 git reset --hard main &&
697 git checkout -b statushints_disabled &&
698 test_when_finished "git config --local advice.statushints true" &&
699 git config --local advice.statushints false &&
700 test_commit one_statushints main.txt one &&
701 test_commit two_statushints main.txt two &&
702 test_commit three_statushints main.txt three &&
703 test_when_finished "git rebase --abort" &&
704 ONTO=$(git rev-parse --short HEAD^^) &&
705 test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
706 cat >expected <<EOF &&
707 rebase in progress; onto $ONTO
708 You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''.
710 Unmerged paths:
711 both modified: main.txt
713 no changes added to commit
715 git status --untracked-files=no >actual &&
716 test_cmp expected actual
720 test_expect_success 'prepare for cherry-pick conflicts' '
721 git reset --hard main &&
722 git checkout -b cherry_branch &&
723 test_commit one_cherry main.txt one &&
724 test_commit two_cherries main.txt two &&
725 git checkout -b cherry_branch_second &&
726 test_commit second_cherry main.txt second &&
727 git checkout cherry_branch &&
728 test_commit three_cherries main.txt three
732 test_expect_success 'status when cherry-picking before resolving conflicts' '
733 test_when_finished "git cherry-pick --abort" &&
734 test_must_fail git cherry-pick cherry_branch_second &&
735 TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
736 cat >expected <<EOF &&
737 On branch cherry_branch
738 You are currently cherry-picking commit $TO_CHERRY_PICK.
739 (fix conflicts and run "git cherry-pick --continue")
740 (use "git cherry-pick --skip" to skip this patch)
741 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
743 Unmerged paths:
744 (use "git add <file>..." to mark resolution)
745 both modified: main.txt
747 no changes added to commit (use "git add" and/or "git commit -a")
749 git status --untracked-files=no >actual &&
750 test_cmp expected actual
754 test_expect_success 'status when cherry-picking after resolving conflicts' '
755 git reset --hard cherry_branch &&
756 test_when_finished "git cherry-pick --abort" &&
757 test_must_fail git cherry-pick cherry_branch_second &&
758 TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
759 echo end >main.txt &&
760 git add main.txt &&
761 cat >expected <<EOF &&
762 On branch cherry_branch
763 You are currently cherry-picking commit $TO_CHERRY_PICK.
764 (all conflicts fixed: run "git cherry-pick --continue")
765 (use "git cherry-pick --skip" to skip this patch)
766 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
768 Changes to be committed:
769 modified: main.txt
771 Untracked files not listed (use -u option to show untracked files)
773 git status --untracked-files=no >actual &&
774 test_cmp expected actual
777 test_expect_success 'status when cherry-picking after committing conflict resolution' '
778 git reset --hard cherry_branch &&
779 test_when_finished "git cherry-pick --abort" &&
780 test_must_fail git cherry-pick cherry_branch_second one_cherry &&
781 echo end >main.txt &&
782 git commit -a &&
783 cat >expected <<EOF &&
784 On branch cherry_branch
785 Cherry-pick currently in progress.
786 (run "git cherry-pick --continue" to continue)
787 (use "git cherry-pick --skip" to skip this patch)
788 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
790 nothing to commit (use -u to show untracked files)
792 git status --untracked-files=no >actual &&
793 test_cmp expected actual
796 test_expect_success 'status shows cherry-pick with invalid oid' '
797 mkdir .git/sequencer &&
798 test_write_lines "pick invalid-oid" >.git/sequencer/todo &&
799 git status --untracked-files=no >actual 2>err &&
800 git cherry-pick --quit &&
801 test_must_be_empty err &&
802 test_cmp expected actual
805 test_expect_success 'status does not show error if .git/sequencer is a file' '
806 test_when_finished "rm .git/sequencer" &&
807 test_write_lines hello >.git/sequencer &&
808 git status --untracked-files=no 2>err &&
809 test_must_be_empty err
812 test_expect_success 'status showing detached at and from a tag' '
813 test_commit atag tagging &&
814 git checkout atag &&
815 cat >expected <<\EOF &&
816 HEAD detached at atag
817 nothing to commit (use -u to show untracked files)
819 git status --untracked-files=no >actual &&
820 test_cmp expected actual &&
822 git reset --hard HEAD^ &&
823 cat >expected <<\EOF &&
824 HEAD detached from atag
825 nothing to commit (use -u to show untracked files)
827 git status --untracked-files=no >actual &&
828 test_cmp expected actual
831 test_expect_success 'status while reverting commit (conflicts)' '
832 git checkout main &&
833 echo before >to-revert.txt &&
834 test_commit before to-revert.txt &&
835 echo old >to-revert.txt &&
836 test_commit old to-revert.txt &&
837 echo new >to-revert.txt &&
838 test_commit new to-revert.txt &&
839 TO_REVERT=$(git rev-parse --short HEAD^) &&
840 test_must_fail git revert $TO_REVERT &&
841 cat >expected <<EOF &&
842 On branch main
843 You are currently reverting commit $TO_REVERT.
844 (fix conflicts and run "git revert --continue")
845 (use "git revert --skip" to skip this patch)
846 (use "git revert --abort" to cancel the revert operation)
848 Unmerged paths:
849 (use "git restore --staged <file>..." to unstage)
850 (use "git add <file>..." to mark resolution)
851 both modified: to-revert.txt
853 no changes added to commit (use "git add" and/or "git commit -a")
855 git status --untracked-files=no >actual &&
856 test_cmp expected actual
859 test_expect_success 'status while reverting commit (conflicts resolved)' '
860 echo reverted >to-revert.txt &&
861 git add to-revert.txt &&
862 cat >expected <<EOF &&
863 On branch main
864 You are currently reverting commit $TO_REVERT.
865 (all conflicts fixed: run "git revert --continue")
866 (use "git revert --skip" to skip this patch)
867 (use "git revert --abort" to cancel the revert operation)
869 Changes to be committed:
870 (use "git restore --staged <file>..." to unstage)
871 modified: to-revert.txt
873 Untracked files not listed (use -u option to show untracked files)
875 git status --untracked-files=no >actual &&
876 test_cmp expected actual
879 test_expect_success 'status after reverting commit' '
880 git revert --continue &&
881 cat >expected <<\EOF &&
882 On branch main
883 nothing to commit (use -u to show untracked files)
885 git status --untracked-files=no >actual &&
886 test_cmp expected actual
889 test_expect_success 'status while reverting after committing conflict resolution' '
890 test_when_finished "git revert --abort" &&
891 git reset --hard new &&
892 test_must_fail git revert old new &&
893 echo reverted >to-revert.txt &&
894 git commit -a &&
895 cat >expected <<EOF &&
896 On branch main
897 Revert currently in progress.
898 (run "git revert --continue" to continue)
899 (use "git revert --skip" to skip this patch)
900 (use "git revert --abort" to cancel the revert operation)
902 nothing to commit (use -u to show untracked files)
904 git status --untracked-files=no >actual &&
905 test_cmp expected actual
908 test_expect_success 'prepare for different number of commits rebased' '
909 git reset --hard main &&
910 git checkout -b several_commits &&
911 test_commit one_commit main.txt one &&
912 test_commit two_commit main.txt two &&
913 test_commit three_commit main.txt three &&
914 test_commit four_commit main.txt four
917 test_expect_success 'status: one command done nothing remaining' '
918 FAKE_LINES="exec_exit_15" &&
919 export FAKE_LINES &&
920 test_when_finished "git rebase --abort" &&
921 ONTO=$(git rev-parse --short HEAD~3) &&
922 test_must_fail git rebase -i HEAD~3 &&
923 cat >expected <<EOF &&
924 interactive rebase in progress; onto $ONTO
925 Last command done (1 command done):
926 exec exit 15
927 No commands remaining.
928 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
929 (use "git commit --amend" to amend the current commit)
930 (use "git rebase --continue" once you are satisfied with your changes)
932 nothing to commit (use -u to show untracked files)
934 git status --untracked-files=no >actual &&
935 test_cmp expected actual
938 test_expect_success 'status: two commands done with some white lines in done file' '
939 FAKE_LINES="1 > exec_exit_15 2 3" &&
940 export FAKE_LINES &&
941 test_when_finished "git rebase --abort" &&
942 ONTO=$(git rev-parse --short HEAD~3) &&
943 COMMIT4=$(git rev-parse --short HEAD) &&
944 COMMIT3=$(git rev-parse --short HEAD^) &&
945 COMMIT2=$(git rev-parse --short HEAD^^) &&
946 test_must_fail git rebase -i HEAD~3 &&
947 cat >expected <<EOF &&
948 interactive rebase in progress; onto $ONTO
949 Last commands done (2 commands done):
950 pick $COMMIT2 two_commit
951 exec exit 15
952 Next commands to do (2 remaining commands):
953 pick $COMMIT3 three_commit
954 pick $COMMIT4 four_commit
955 (use "git rebase --edit-todo" to view and edit)
956 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
957 (use "git commit --amend" to amend the current commit)
958 (use "git rebase --continue" once you are satisfied with your changes)
960 nothing to commit (use -u to show untracked files)
962 git status --untracked-files=no >actual &&
963 test_cmp expected actual
966 test_expect_success 'status: two remaining commands with some white lines in todo file' '
967 FAKE_LINES="1 2 exec_exit_15 3 > 4" &&
968 export FAKE_LINES &&
969 test_when_finished "git rebase --abort" &&
970 ONTO=$(git rev-parse --short HEAD~4) &&
971 COMMIT4=$(git rev-parse --short HEAD) &&
972 COMMIT3=$(git rev-parse --short HEAD^) &&
973 COMMIT2=$(git rev-parse --short HEAD^^) &&
974 test_must_fail git rebase -i HEAD~4 &&
975 cat >expected <<EOF &&
976 interactive rebase in progress; onto $ONTO
977 Last commands done (3 commands done):
978 pick $COMMIT2 two_commit
979 exec exit 15
980 (see more in file .git/rebase-merge/done)
981 Next commands to do (2 remaining commands):
982 pick $COMMIT3 three_commit
983 pick $COMMIT4 four_commit
984 (use "git rebase --edit-todo" to view and edit)
985 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
986 (use "git commit --amend" to amend the current commit)
987 (use "git rebase --continue" once you are satisfied with your changes)
989 nothing to commit (use -u to show untracked files)
991 git status --untracked-files=no >actual &&
992 test_cmp expected actual
995 test_expect_success 'status: handle not-yet-started rebase -i gracefully' '
996 ONTO=$(git rev-parse --short HEAD^) &&
997 COMMIT=$(git rev-parse --short HEAD) &&
998 EDITOR="git status --untracked-files=no >actual" git rebase -i HEAD^ &&
999 cat >expected <<EOF &&
1000 On branch several_commits
1001 No commands done.
1002 Next command to do (1 remaining command):
1003 pick $COMMIT four_commit
1004 (use "git rebase --edit-todo" to view and edit)
1005 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
1006 (use "git commit --amend" to amend the current commit)
1007 (use "git rebase --continue" once you are satisfied with your changes)
1009 nothing to commit (use -u to show untracked files)
1011 test_cmp expected actual
1014 test_done