rebase -i: handle fixup! fixup! in --autosquash
[git] / t / t7512-status-help.sh
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
8 test_description='git status advice'
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' '
17         git config --global advice.statusuoption false &&
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 &&
28         cat >expected <<-\EOF &&
29         # On branch conflicts
30         # You have unmerged paths.
31         #   (fix conflicts and run "git commit")
32         #
33         # Unmerged paths:
34         #   (use "git add <file>..." to mark resolution)
35         #
36         #       both modified:      main.txt
37         #
38         no changes added to commit (use "git add" and/or "git commit -a")
39         EOF
40         git status --untracked-files=no >actual &&
41         test_i18ncmp expected actual
42 '
43
44
45 test_expect_success 'status when conflicts resolved before commit' '
46         git reset --hard conflicts &&
47         test_must_fail git merge master &&
48         echo one >main.txt &&
49         git add main.txt &&
50         cat >expected <<-\EOF &&
51         # On branch conflicts
52         # All conflicts fixed but you are still merging.
53         #   (use "git commit" to conclude merge)
54         #
55         # Changes to be committed:
56         #
57         #       modified:   main.txt
58         #
59         # Untracked files not listed (use -u option to show untracked files)
60         EOF
61         git status --untracked-files=no >actual &&
62         test_i18ncmp expected actual
63 '
64
65
66 test_expect_success 'prepare for rebase conflicts' '
67         git reset --hard master &&
68         git checkout -b rebase_conflicts &&
69         test_commit one_rebase main.txt one &&
70         test_commit two_rebase main.txt two &&
71         test_commit three_rebase main.txt three
72 '
73
74
75 test_expect_success 'status when rebase in progress before resolving conflicts' '
76         test_when_finished "git rebase --abort" &&
77         ONTO=$(git rev-parse --short HEAD^^) &&
78         test_must_fail git rebase HEAD^ --onto HEAD^^ &&
79         cat >expected <<-EOF &&
80         # HEAD detached at $ONTO
81         # You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
82         #   (fix conflicts and then run "git rebase --continue")
83         #   (use "git rebase --skip" to skip this patch)
84         #   (use "git rebase --abort" to check out the original branch)
85         #
86         # Unmerged paths:
87         #   (use "git reset HEAD <file>..." to unstage)
88         #   (use "git add <file>..." to mark resolution)
89         #
90         #       both modified:      main.txt
91         #
92         no changes added to commit (use "git add" and/or "git commit -a")
93         EOF
94         git status --untracked-files=no >actual &&
95         test_i18ncmp expected actual
96 '
97
98
99 test_expect_success 'status when rebase in progress before rebase --continue' '
100         git reset --hard rebase_conflicts &&
101         test_when_finished "git rebase --abort" &&
102         ONTO=$(git rev-parse --short HEAD^^) &&
103         test_must_fail git rebase HEAD^ --onto HEAD^^ &&
104         echo three >main.txt &&
105         git add main.txt &&
106         cat >expected <<-EOF &&
107         # HEAD detached at $ONTO
108         # You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
109         #   (all conflicts fixed: run "git rebase --continue")
110         #
111         # Changes to be committed:
112         #   (use "git reset HEAD <file>..." to unstage)
113         #
114         #       modified:   main.txt
115         #
116         # Untracked files not listed (use -u option to show untracked files)
117         EOF
118         git status --untracked-files=no >actual &&
119         test_i18ncmp expected actual
120 '
121
122
123 test_expect_success 'prepare for rebase_i_conflicts' '
124         git reset --hard master &&
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_master main.txt one_master &&
129         git checkout rebase_i_conflicts_second &&
130         test_commit one_second main.txt one_second
131 '
132
133
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         test_must_fail git rebase -i rebase_i_conflicts &&
138         cat >expected <<-EOF &&
139         # HEAD detached at $ONTO
140         # You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
141         #   (fix conflicts and then run "git rebase --continue")
142         #   (use "git rebase --skip" to skip this patch)
143         #   (use "git rebase --abort" to check out the original branch)
144         #
145         # Unmerged paths:
146         #   (use "git reset HEAD <file>..." to unstage)
147         #   (use "git add <file>..." to mark resolution)
148         #
149         #       both modified:      main.txt
150         #
151         no changes added to commit (use "git add" and/or "git commit -a")
152         EOF
153         git status --untracked-files=no >actual &&
154         test_i18ncmp expected actual
155 '
156
157
158 test_expect_success 'status during rebase -i after resolving conflicts' '
159         git reset --hard rebase_i_conflicts_second &&
160         test_when_finished "git rebase --abort" &&
161         ONTO=$(git rev-parse --short rebase_i_conflicts) &&
162         test_must_fail git rebase -i rebase_i_conflicts &&
163         git add main.txt &&
164         cat >expected <<-EOF &&
165         # HEAD detached at $ONTO
166         # You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
167         #   (all conflicts fixed: run "git rebase --continue")
168         #
169         # Changes to be committed:
170         #   (use "git reset HEAD <file>..." to unstage)
171         #
172         #       modified:   main.txt
173         #
174         # Untracked files not listed (use -u option to show untracked files)
175         EOF
176         git status --untracked-files=no >actual &&
177         test_i18ncmp expected actual
178 '
179
180
181 test_expect_success 'status when rebasing -i in edit mode' '
182         git reset --hard master &&
183         git checkout -b rebase_i_edit &&
184         test_commit one_rebase_i main.txt one &&
185         test_commit two_rebase_i main.txt two &&
186         test_commit three_rebase_i main.txt three &&
187         FAKE_LINES="1 edit 2" &&
188         export FAKE_LINES &&
189         test_when_finished "git rebase --abort" &&
190         ONTO=$(git rev-parse --short HEAD~2) &&
191         TGT=$(git rev-parse --short two_rebase_i) &&
192         git rebase -i HEAD~2 &&
193         cat >expected <<-EOF &&
194         # HEAD detached from $TGT
195         # You are currently editing a commit while rebasing branch '\''rebase_i_edit'\'' on '\''$ONTO'\''.
196         #   (use "git commit --amend" to amend the current commit)
197         #   (use "git rebase --continue" once you are satisfied with your changes)
198         #
199         nothing to commit (use -u to show untracked files)
200         EOF
201         git status --untracked-files=no >actual &&
202         test_i18ncmp expected actual
203 '
204
205
206 test_expect_success 'status when splitting a commit' '
207         git reset --hard master &&
208         git checkout -b split_commit &&
209         test_commit one_split main.txt one &&
210         test_commit two_split main.txt two &&
211         test_commit three_split main.txt three &&
212         test_commit four_split main.txt four &&
213         FAKE_LINES="1 edit 2 3" &&
214         export FAKE_LINES &&
215         test_when_finished "git rebase --abort" &&
216         ONTO=$(git rev-parse --short HEAD~3) &&
217         git rebase -i HEAD~3 &&
218         git reset HEAD^ &&
219         TGT=$(git rev-parse --short HEAD) &&
220         cat >expected <<-EOF &&
221         # HEAD detached at $TGT
222         # You are currently splitting a commit while rebasing branch '\''split_commit'\'' on '\''$ONTO'\''.
223         #   (Once your working directory is clean, run "git rebase --continue")
224         #
225         # Changes not staged for commit:
226         #   (use "git add <file>..." to update what will be committed)
227         #   (use "git checkout -- <file>..." to discard changes in working directory)
228         #
229         #       modified:   main.txt
230         #
231         no changes added to commit (use "git add" and/or "git commit -a")
232         EOF
233         git status --untracked-files=no >actual &&
234         test_i18ncmp expected actual
235 '
236
237
238 test_expect_success 'status after editing the last commit with --amend during a rebase -i' '
239         git reset --hard master &&
240         git checkout -b amend_last &&
241         test_commit one_amend main.txt one &&
242         test_commit two_amend main.txt two &&
243         test_commit three_amend main.txt three &&
244         test_commit four_amend main.txt four &&
245         FAKE_LINES="1 2 edit 3" &&
246         export FAKE_LINES &&
247         test_when_finished "git rebase --abort" &&
248         ONTO=$(git rev-parse --short HEAD~3) &&
249         TGT=$(git rev-parse --short three_amend) &&
250         git rebase -i HEAD~3 &&
251         git commit --amend -m "foo" &&
252         cat >expected <<-EOF &&
253         # HEAD detached from $TGT
254         # You are currently editing a commit while rebasing branch '\''amend_last'\'' on '\''$ONTO'\''.
255         #   (use "git commit --amend" to amend the current commit)
256         #   (use "git rebase --continue" once you are satisfied with your changes)
257         #
258         nothing to commit (use -u to show untracked files)
259         EOF
260         git status --untracked-files=no >actual &&
261         test_i18ncmp expected actual
262 '
263
264
265 test_expect_success 'prepare for several edits' '
266         git reset --hard master &&
267         git checkout -b several_edits &&
268         test_commit one_edits main.txt one &&
269         test_commit two_edits main.txt two &&
270         test_commit three_edits main.txt three &&
271         test_commit four_edits main.txt four
272 '
273
274
275 test_expect_success 'status: (continue first edit) second edit' '
276         FAKE_LINES="edit 1 edit 2 3" &&
277         export FAKE_LINES &&
278         test_when_finished "git rebase --abort" &&
279         ONTO=$(git rev-parse --short HEAD~3) &&
280         git rebase -i HEAD~3 &&
281         git rebase --continue &&
282         cat >expected <<-EOF &&
283         # HEAD detached from $ONTO
284         # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
285         #   (use "git commit --amend" to amend the current commit)
286         #   (use "git rebase --continue" once you are satisfied with your changes)
287         #
288         nothing to commit (use -u to show untracked files)
289         EOF
290         git status --untracked-files=no >actual &&
291         test_i18ncmp expected actual
292 '
293
294
295 test_expect_success 'status: (continue first edit) second edit and split' '
296         git reset --hard several_edits &&
297         FAKE_LINES="edit 1 edit 2 3" &&
298         export FAKE_LINES &&
299         test_when_finished "git rebase --abort" &&
300         ONTO=$(git rev-parse --short HEAD~3) &&
301         git rebase -i HEAD~3 &&
302         git rebase --continue &&
303         git reset HEAD^ &&
304         cat >expected <<-EOF &&
305         # HEAD detached from $ONTO
306         # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
307         #   (Once your working directory is clean, run "git rebase --continue")
308         #
309         # Changes not staged for commit:
310         #   (use "git add <file>..." to update what will be committed)
311         #   (use "git checkout -- <file>..." to discard changes in working directory)
312         #
313         #       modified:   main.txt
314         #
315         no changes added to commit (use "git add" and/or "git commit -a")
316         EOF
317         git status --untracked-files=no >actual &&
318         test_i18ncmp expected actual
319 '
320
321
322 test_expect_success 'status: (continue first edit) second edit and amend' '
323         git reset --hard several_edits &&
324         FAKE_LINES="edit 1 edit 2 3" &&
325         export FAKE_LINES &&
326         test_when_finished "git rebase --abort" &&
327         ONTO=$(git rev-parse --short HEAD~3) &&
328         git rebase -i HEAD~3 &&
329         git rebase --continue &&
330         git commit --amend -m "foo" &&
331         cat >expected <<-EOF &&
332         # HEAD detached from $ONTO
333         # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
334         #   (use "git commit --amend" to amend the current commit)
335         #   (use "git rebase --continue" once you are satisfied with your changes)
336         #
337         nothing to commit (use -u to show untracked files)
338         EOF
339         git status --untracked-files=no >actual &&
340         test_i18ncmp expected actual
341 '
342
343
344 test_expect_success 'status: (amend first edit) second edit' '
345         git reset --hard several_edits &&
346         FAKE_LINES="edit 1 edit 2 3" &&
347         export FAKE_LINES &&
348         test_when_finished "git rebase --abort" &&
349         ONTO=$(git rev-parse --short HEAD~3) &&
350         git rebase -i HEAD~3 &&
351         git commit --amend -m "a" &&
352         git rebase --continue &&
353         cat >expected <<-EOF &&
354         # HEAD detached from $ONTO
355         # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
356         #   (use "git commit --amend" to amend the current commit)
357         #   (use "git rebase --continue" once you are satisfied with your changes)
358         #
359         nothing to commit (use -u to show untracked files)
360         EOF
361         git status --untracked-files=no >actual &&
362         test_i18ncmp expected actual
363 '
364
365
366 test_expect_success 'status: (amend first edit) second edit and split' '
367         git reset --hard several_edits &&
368         FAKE_LINES="edit 1 edit 2 3" &&
369         export FAKE_LINES &&
370         test_when_finished "git rebase --abort" &&
371         ONTO=$(git rev-parse --short HEAD~3) &&
372         git rebase -i HEAD~3 &&
373         git commit --amend -m "b" &&
374         git rebase --continue &&
375         git reset HEAD^ &&
376         cat >expected <<-EOF &&
377         # HEAD detached from $ONTO
378         # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
379         #   (Once your working directory is clean, run "git rebase --continue")
380         #
381         # Changes not staged for commit:
382         #   (use "git add <file>..." to update what will be committed)
383         #   (use "git checkout -- <file>..." to discard changes in working directory)
384         #
385         #       modified:   main.txt
386         #
387         no changes added to commit (use "git add" and/or "git commit -a")
388         EOF
389         git status --untracked-files=no >actual &&
390         test_i18ncmp expected actual
391 '
392
393
394 test_expect_success 'status: (amend first edit) second edit and amend' '
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         ONTO=$(git rev-parse --short HEAD~3) &&
400         git rebase -i HEAD~3 &&
401         git commit --amend -m "c" &&
402         git rebase --continue &&
403         git commit --amend -m "d" &&
404         cat >expected <<-EOF &&
405         # HEAD detached from $ONTO
406         # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
407         #   (use "git commit --amend" to amend the current commit)
408         #   (use "git rebase --continue" once you are satisfied with your changes)
409         #
410         nothing to commit (use -u to show untracked files)
411         EOF
412         git status --untracked-files=no >actual &&
413         test_i18ncmp expected actual
414 '
415
416
417 test_expect_success 'status: (split first edit) second edit' '
418         git reset --hard several_edits &&
419         FAKE_LINES="edit 1 edit 2 3" &&
420         export FAKE_LINES &&
421         test_when_finished "git rebase --abort" &&
422         ONTO=$(git rev-parse --short HEAD~3) &&
423         git rebase -i HEAD~3 &&
424         git reset HEAD^ &&
425         git add main.txt &&
426         git commit -m "e" &&
427         git rebase --continue &&
428         cat >expected <<-EOF &&
429         # HEAD detached from $ONTO
430         # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
431         #   (use "git commit --amend" to amend the current commit)
432         #   (use "git rebase --continue" once you are satisfied with your changes)
433         #
434         nothing to commit (use -u to show untracked files)
435         EOF
436         git status --untracked-files=no >actual &&
437         test_i18ncmp expected actual
438 '
439
440
441 test_expect_success 'status: (split first edit) second edit and split' '
442         git reset --hard several_edits &&
443         FAKE_LINES="edit 1 edit 2 3" &&
444         export FAKE_LINES &&
445         test_when_finished "git rebase --abort" &&
446         ONTO=$(git rev-parse --short HEAD~3) &&
447         git rebase -i HEAD~3 &&
448         git reset HEAD^ &&
449         git add main.txt &&
450         git commit --amend -m "f" &&
451         git rebase --continue &&
452         git reset HEAD^ &&
453         cat >expected <<-EOF &&
454         # HEAD detached from $ONTO
455         # You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
456         #   (Once your working directory is clean, run "git rebase --continue")
457         #
458         # Changes not staged for commit:
459         #   (use "git add <file>..." to update what will be committed)
460         #   (use "git checkout -- <file>..." to discard changes in working directory)
461         #
462         #       modified:   main.txt
463         #
464         no changes added to commit (use "git add" and/or "git commit -a")
465         EOF
466         git status --untracked-files=no >actual &&
467         test_i18ncmp expected actual
468 '
469
470
471 test_expect_success 'status: (split first edit) second edit and amend' '
472         git reset --hard several_edits &&
473         FAKE_LINES="edit 1 edit 2 3" &&
474         export FAKE_LINES &&
475         test_when_finished "git rebase --abort" &&
476         ONTO=$(git rev-parse --short HEAD~3) &&
477         git rebase -i HEAD~3 &&
478         git reset HEAD^ &&
479         git add main.txt &&
480         git commit --amend -m "g" &&
481         git rebase --continue &&
482         git commit --amend -m "h" &&
483         cat >expected <<-EOF &&
484         # HEAD detached from $ONTO
485         # You are currently editing a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
486         #   (use "git commit --amend" to amend the current commit)
487         #   (use "git rebase --continue" once you are satisfied with your changes)
488         #
489         nothing to commit (use -u to show untracked files)
490         EOF
491         git status --untracked-files=no >actual &&
492         test_i18ncmp expected actual
493 '
494
495
496 test_expect_success 'prepare am_session' '
497         git reset --hard master &&
498         git checkout -b am_session &&
499         test_commit one_am one.txt "one" &&
500         test_commit two_am two.txt "two" &&
501         test_commit three_am three.txt "three"
502 '
503
504
505 test_expect_success 'status in an am session: file already exists' '
506         git checkout -b am_already_exists &&
507         test_when_finished "rm Maildir/* && git am --abort" &&
508         git format-patch -1 -oMaildir &&
509         test_must_fail git am Maildir/*.patch &&
510         cat >expected <<-\EOF &&
511         # On branch am_already_exists
512         # You are in the middle of an am session.
513         #   (fix conflicts and then run "git am --resolved")
514         #   (use "git am --skip" to skip this patch)
515         #   (use "git am --abort" to restore the original branch)
516         #
517         nothing to commit (use -u to show untracked files)
518         EOF
519         git status --untracked-files=no >actual &&
520         test_i18ncmp expected actual
521 '
522
523
524 test_expect_success 'status in an am session: file does not exist' '
525         git reset --hard am_session &&
526         git checkout -b am_not_exists &&
527         git rm three.txt &&
528         git commit -m "delete three.txt" &&
529         test_when_finished "rm Maildir/* && git am --abort" &&
530         git format-patch -1 -oMaildir &&
531         test_must_fail git am Maildir/*.patch &&
532         cat >expected <<-\EOF &&
533         # On branch am_not_exists
534         # You are in the middle of an am session.
535         #   (fix conflicts and then run "git am --resolved")
536         #   (use "git am --skip" to skip this patch)
537         #   (use "git am --abort" to restore the original branch)
538         #
539         nothing to commit (use -u to show untracked files)
540         EOF
541         git status --untracked-files=no >actual &&
542         test_i18ncmp expected actual
543 '
544
545
546 test_expect_success 'status in an am session: empty patch' '
547         git reset --hard am_session &&
548         git checkout -b am_empty &&
549         test_when_finished "rm Maildir/* && git am --abort" &&
550         git format-patch -3 -oMaildir &&
551         git rm one.txt two.txt three.txt &&
552         git commit -m "delete all am_empty" &&
553         echo error >Maildir/0002-two_am.patch &&
554         test_must_fail git am Maildir/*.patch &&
555         cat >expected <<-\EOF &&
556         # On branch am_empty
557         # You are in the middle of an am session.
558         # The current patch is empty.
559         #   (use "git am --skip" to skip this patch)
560         #   (use "git am --abort" to restore the original branch)
561         #
562         nothing to commit (use -u to show untracked files)
563         EOF
564         git status --untracked-files=no >actual &&
565         test_i18ncmp expected actual
566 '
567
568
569 test_expect_success 'status when bisecting' '
570         git reset --hard master &&
571         git checkout -b bisect &&
572         test_commit one_bisect main.txt one &&
573         test_commit two_bisect main.txt two &&
574         test_commit three_bisect main.txt three &&
575         test_when_finished "git bisect reset" &&
576         git bisect start &&
577         git bisect bad &&
578         git bisect good one_bisect &&
579         TGT=$(git rev-parse --short two_bisect) &&
580         cat >expected <<-EOF &&
581         # HEAD detached at $TGT
582         # You are currently bisecting, started from branch '\''bisect'\''.
583         #   (use "git bisect reset" to get back to the original branch)
584         #
585         nothing to commit (use -u to show untracked files)
586         EOF
587         git status --untracked-files=no >actual &&
588         test_i18ncmp expected actual
589 '
590
591
592 test_expect_success 'status when rebase conflicts with statushints disabled' '
593         git reset --hard master &&
594         git checkout -b statushints_disabled &&
595         test_when_finished "git config --local advice.statushints true" &&
596         git config --local advice.statushints false &&
597         test_commit one_statushints main.txt one &&
598         test_commit two_statushints main.txt two &&
599         test_commit three_statushints main.txt three &&
600         test_when_finished "git rebase --abort" &&
601         ONTO=$(git rev-parse --short HEAD^^) &&
602         test_must_fail git rebase HEAD^ --onto HEAD^^ &&
603         cat >expected <<-EOF &&
604         # HEAD detached at $ONTO
605         # You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''.
606         #
607         # Unmerged paths:
608         #       both modified:      main.txt
609         #
610         no changes added to commit
611         EOF
612         git status --untracked-files=no >actual &&
613         test_i18ncmp expected actual
614 '
615
616
617 test_expect_success 'prepare for cherry-pick conflicts' '
618         git reset --hard master &&
619         git checkout -b cherry_branch &&
620         test_commit one_cherry main.txt one &&
621         test_commit two_cherries main.txt two &&
622         git checkout -b cherry_branch_second &&
623         test_commit second_cherry main.txt second &&
624         git checkout cherry_branch &&
625         test_commit three_cherries main.txt three
626 '
627
628
629 test_expect_success 'status when cherry-picking before resolving conflicts' '
630         test_when_finished "git cherry-pick --abort" &&
631         test_must_fail git cherry-pick cherry_branch_second &&
632         cat >expected <<-\EOF &&
633         # On branch cherry_branch
634         # You are currently cherry-picking.
635         #   (fix conflicts and run "git cherry-pick --continue")
636         #   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
637         #
638         # Unmerged paths:
639         #   (use "git add <file>..." to mark resolution)
640         #
641         #       both modified:      main.txt
642         #
643         no changes added to commit (use "git add" and/or "git commit -a")
644         EOF
645         git status --untracked-files=no >actual &&
646         test_i18ncmp expected actual
647 '
648
649
650 test_expect_success 'status when cherry-picking after resolving conflicts' '
651         git reset --hard cherry_branch &&
652         test_when_finished "git cherry-pick --abort" &&
653         test_must_fail git cherry-pick cherry_branch_second &&
654         echo end >main.txt &&
655         git add main.txt &&
656         cat >expected <<-\EOF &&
657         # On branch cherry_branch
658         # You are currently cherry-picking.
659         #   (all conflicts fixed: run "git cherry-pick --continue")
660         #   (use "git cherry-pick --abort" to cancel the cherry-pick operation)
661         #
662         # Changes to be committed:
663         #
664         #       modified:   main.txt
665         #
666         # Untracked files not listed (use -u option to show untracked files)
667         EOF
668         git status --untracked-files=no >actual &&
669         test_i18ncmp expected actual
670 '
671
672 test_expect_success 'status showing detached from a tag' '
673         test_commit atag tagging &&
674         git checkout atag &&
675         cat >expected <<-\EOF
676         # HEAD detached at atag
677         nothing to commit (use -u to show untracked files)
678         EOF
679         git status --untracked-files=no >actual &&
680         test_i18ncmp expected actual
681 '
682
683 test_expect_success 'status while reverting commit (conflicts)' '
684         git checkout master &&
685         echo before >to-revert.txt &&
686         test_commit before to-revert.txt &&
687         echo old >to-revert.txt &&
688         test_commit old to-revert.txt &&
689         echo new >to-revert.txt &&
690         test_commit new to-revert.txt &&
691         TO_REVERT=$(git rev-parse --short HEAD^) &&
692         test_must_fail git revert $TO_REVERT &&
693         cat >expected <<-EOF
694         # On branch master
695         # You are currently reverting commit $TO_REVERT.
696         #   (fix conflicts and run "git revert --continue")
697         #   (use "git revert --abort" to cancel the revert operation)
698         #
699         # Unmerged paths:
700         #   (use "git reset HEAD <file>..." to unstage)
701         #   (use "git add <file>..." to mark resolution)
702         #
703         #       both modified:      to-revert.txt
704         #
705         no changes added to commit (use "git add" and/or "git commit -a")
706         EOF
707         git status --untracked-files=no >actual &&
708         test_i18ncmp expected actual
709 '
710
711 test_expect_success 'status while reverting commit (conflicts resolved)' '
712         echo reverted >to-revert.txt &&
713         git add to-revert.txt &&
714         cat >expected <<-EOF
715         # On branch master
716         # You are currently reverting commit $TO_REVERT.
717         #   (all conflicts fixed: run "git revert --continue")
718         #   (use "git revert --abort" to cancel the revert operation)
719         #
720         # Changes to be committed:
721         #   (use "git reset HEAD <file>..." to unstage)
722         #
723         #       modified:   to-revert.txt
724         #
725         # Untracked files not listed (use -u option to show untracked files)
726         EOF
727         git status --untracked-files=no >actual &&
728         test_i18ncmp expected actual
729 '
730
731 test_expect_success 'status after reverting commit' '
732         git revert --continue &&
733         cat >expected <<-\EOF
734         # On branch master
735         nothing to commit (use -u to show untracked files)
736         EOF
737         git status --untracked-files=no >actual &&
738         test_i18ncmp expected actual
739 '
740
741 test_done