3 # Copyright (c) 2012 Valentin Duperray, Lucien Kong, Franck Jonas,
4 # Thomas Nguy, Khoi Nguyen
8 test_description='git status advice'
12 . "$TEST_DIRECTORY"/lib-rebase.sh
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
26 test_expect_success 'status when conflicts unresolved' '
27 test_must_fail git merge master &&
28 cat >expected <<\EOF &&
30 You have unmerged paths.
31 (fix conflicts and run "git commit")
32 (use "git merge --abort" to abort the merge)
35 (use "git add <file>..." to mark resolution)
37 both modified: main.txt
39 no changes added to commit (use "git add" and/or "git commit -a")
41 git status --untracked-files=no >actual &&
42 test_i18ncmp expected actual
46 test_expect_success 'status when conflicts resolved before commit' '
47 git reset --hard conflicts &&
48 test_must_fail git merge master &&
51 cat >expected <<\EOF &&
53 All conflicts fixed but you are still merging.
54 (use "git commit" to conclude merge)
56 Changes to be committed:
60 Untracked files not listed (use -u option to show untracked files)
62 git status --untracked-files=no >actual &&
63 test_i18ncmp expected actual
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
76 test_expect_success 'status when rebase in progress before resolving conflicts' '
77 test_when_finished "git rebase --abort" &&
78 ONTO=$(git rev-parse --short HEAD^^) &&
79 test_must_fail git rebase HEAD^ --onto HEAD^^ &&
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)
88 (use "git reset HEAD <file>..." to unstage)
89 (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")
95 git status --untracked-files=no >actual &&
96 test_i18ncmp expected actual
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" &&
103 ONTO=$(git rev-parse --short HEAD^^) &&
104 test_must_fail git rebase HEAD^ --onto HEAD^^ &&
105 echo three >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 reset HEAD <file>..." to unstage)
117 Untracked files not listed (use -u option to show untracked files)
119 git status --untracked-files=no >actual &&
120 test_i18ncmp expected actual
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
135 test_expect_success 'status during rebase -i when conflicts unresolved' '
136 test_when_finished "git rebase --abort" &&
137 ONTO=$(git rev-parse --short rebase_i_conflicts) &&
138 LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
139 test_must_fail git rebase -i rebase_i_conflicts &&
140 cat >expected <<EOF &&
141 interactive rebase in progress; onto $ONTO
142 Last command done (1 command done):
143 pick $LAST_COMMIT one_second
144 No commands remaining.
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)
151 (use "git reset HEAD <file>..." to unstage)
152 (use "git add <file>..." to mark resolution)
154 both modified: main.txt
156 no changes added to commit (use "git add" and/or "git commit -a")
158 git status --untracked-files=no >actual &&
159 test_i18ncmp expected actual
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" &&
166 ONTO=$(git rev-parse --short rebase_i_conflicts) &&
167 LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
168 test_must_fail git rebase -i rebase_i_conflicts &&
170 cat >expected <<EOF &&
171 interactive rebase in progress; onto $ONTO
172 Last command done (1 command done):
173 pick $LAST_COMMIT one_second
174 No commands remaining.
175 You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
176 (all conflicts fixed: run "git rebase --continue")
178 Changes to be committed:
179 (use "git reset HEAD <file>..." to unstage)
183 Untracked files not listed (use -u option to show untracked files)
185 git status --untracked-files=no >actual &&
186 test_i18ncmp expected actual
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 &&
195 COMMIT2=$(git rev-parse --short rebase_i_edit) &&
196 test_commit three_rebase_i main.txt three &&
197 COMMIT3=$(git rev-parse --short rebase_i_edit) &&
198 FAKE_LINES="1 edit 2" &&
200 test_when_finished "git rebase --abort" &&
201 ONTO=$(git rev-parse --short HEAD~2) &&
202 git rebase -i HEAD~2 &&
203 cat >expected <<EOF &&
204 interactive rebase in progress; onto $ONTO
205 Last commands done (2 commands done):
206 pick $COMMIT2 two_rebase_i
207 edit $COMMIT3 three_rebase_i
208 No commands remaining.
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)
213 nothing to commit (use -u to show untracked files)
215 git status --untracked-files=no >actual &&
216 test_i18ncmp expected actual
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 &&
225 COMMIT2=$(git rev-parse --short split_commit) &&
226 test_commit three_split main.txt three &&
227 COMMIT3=$(git rev-parse --short split_commit) &&
228 test_commit four_split main.txt four &&
229 COMMIT4=$(git rev-parse --short split_commit) &&
230 FAKE_LINES="1 edit 2 3" &&
232 test_when_finished "git rebase --abort" &&
233 ONTO=$(git rev-parse --short HEAD~3) &&
234 git rebase -i HEAD~3 &&
236 cat >expected <<EOF &&
237 interactive rebase in progress; onto $ONTO
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)
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")
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)
253 no changes added to commit (use "git add" and/or "git commit -a")
255 git status --untracked-files=no >actual &&
256 test_i18ncmp expected actual
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 &&
266 COMMIT3=$(git rev-parse --short amend_last) &&
267 test_commit four_amend main.txt four &&
268 COMMIT4=$(git rev-parse --short amend_last) &&
269 FAKE_LINES="1 2 edit 3" &&
271 test_when_finished "git rebase --abort" &&
272 ONTO=$(git rev-parse --short HEAD~3) &&
273 git rebase -i HEAD~3 &&
274 git commit --amend -m "foo" &&
275 cat >expected <<EOF &&
276 interactive rebase in progress; onto $ONTO
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.
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)
286 nothing to commit (use -u to show untracked files)
288 git status --untracked-files=no >actual &&
289 test_i18ncmp expected actual
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
303 test_expect_success 'status: (continue first edit) second edit' '
304 FAKE_LINES="edit 1 edit 2 3" &&
306 test_when_finished "git rebase --abort" &&
307 COMMIT2=$(git rev-parse --short several_edits^^) &&
308 COMMIT3=$(git rev-parse --short several_edits^) &&
309 COMMIT4=$(git rev-parse --short several_edits) &&
310 ONTO=$(git rev-parse --short HEAD~3) &&
311 git rebase -i HEAD~3 &&
312 git rebase --continue &&
313 cat >expected <<EOF &&
314 interactive rebase in progress; onto $ONTO
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)
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)
325 nothing to commit (use -u to show untracked files)
327 git status --untracked-files=no >actual &&
328 test_i18ncmp expected actual
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" &&
336 test_when_finished "git rebase --abort" &&
337 COMMIT2=$(git rev-parse --short several_edits^^) &&
338 COMMIT3=$(git rev-parse --short several_edits^) &&
339 COMMIT4=$(git rev-parse --short several_edits) &&
340 ONTO=$(git rev-parse --short HEAD~3) &&
341 git rebase -i HEAD~3 &&
342 git rebase --continue &&
344 cat >expected <<EOF &&
345 interactive rebase in progress; onto $ONTO
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)
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")
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)
361 no changes added to commit (use "git add" and/or "git commit -a")
363 git status --untracked-files=no >actual &&
364 test_i18ncmp expected actual
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" &&
372 test_when_finished "git rebase --abort" &&
373 COMMIT2=$(git rev-parse --short several_edits^^) &&
374 COMMIT3=$(git rev-parse --short several_edits^) &&
375 COMMIT4=$(git rev-parse --short several_edits) &&
376 ONTO=$(git rev-parse --short HEAD~3) &&
377 git rebase -i HEAD~3 &&
378 git rebase --continue &&
379 git commit --amend -m "foo" &&
380 cat >expected <<EOF &&
381 interactive rebase in progress; onto $ONTO
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)
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)
392 nothing to commit (use -u to show untracked files)
394 git status --untracked-files=no >actual &&
395 test_i18ncmp expected actual
399 test_expect_success 'status: (amend first edit) second edit' '
400 git reset --hard several_edits &&
401 FAKE_LINES="edit 1 edit 2 3" &&
403 test_when_finished "git rebase --abort" &&
404 COMMIT2=$(git rev-parse --short several_edits^^) &&
405 COMMIT3=$(git rev-parse --short several_edits^) &&
406 COMMIT4=$(git rev-parse --short several_edits) &&
407 ONTO=$(git rev-parse --short HEAD~3) &&
408 git rebase -i HEAD~3 &&
409 git commit --amend -m "a" &&
410 git rebase --continue &&
411 cat >expected <<EOF &&
412 interactive rebase in progress; onto $ONTO
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)
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)
423 nothing to commit (use -u to show untracked files)
425 git status --untracked-files=no >actual &&
426 test_i18ncmp expected actual
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" &&
434 test_when_finished "git rebase --abort" &&
435 ONTO=$(git rev-parse --short HEAD~3) &&
436 COMMIT2=$(git rev-parse --short several_edits^^) &&
437 COMMIT3=$(git rev-parse --short several_edits^) &&
438 COMMIT4=$(git rev-parse --short several_edits) &&
439 git rebase -i HEAD~3 &&
440 git commit --amend -m "b" &&
441 git rebase --continue &&
443 cat >expected <<EOF &&
444 interactive rebase in progress; onto $ONTO
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)
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")
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)
460 no changes added to commit (use "git add" and/or "git commit -a")
462 git status --untracked-files=no >actual &&
463 test_i18ncmp expected actual
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" &&
471 test_when_finished "git rebase --abort" &&
472 COMMIT2=$(git rev-parse --short several_edits^^) &&
473 COMMIT3=$(git rev-parse --short several_edits^) &&
474 COMMIT4=$(git rev-parse --short several_edits) &&
475 ONTO=$(git rev-parse --short HEAD~3) &&
476 git rebase -i HEAD~3 &&
477 git commit --amend -m "c" &&
478 git rebase --continue &&
479 git commit --amend -m "d" &&
480 cat >expected <<EOF &&
481 interactive rebase in progress; onto $ONTO
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)
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)
492 nothing to commit (use -u to show untracked files)
494 git status --untracked-files=no >actual &&
495 test_i18ncmp expected actual
499 test_expect_success 'status: (split first edit) second edit' '
500 git reset --hard several_edits &&
501 FAKE_LINES="edit 1 edit 2 3" &&
503 test_when_finished "git rebase --abort" &&
504 COMMIT2=$(git rev-parse --short several_edits^^) &&
505 COMMIT3=$(git rev-parse --short several_edits^) &&
506 COMMIT4=$(git rev-parse --short several_edits) &&
507 ONTO=$(git rev-parse --short HEAD~3) &&
508 git rebase -i HEAD~3 &&
512 git rebase --continue &&
513 cat >expected <<EOF &&
514 interactive rebase in progress; onto $ONTO
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)
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)
525 nothing to commit (use -u to show untracked files)
527 git status --untracked-files=no >actual &&
528 test_i18ncmp expected actual
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" &&
536 test_when_finished "git rebase --abort" &&
537 COMMIT2=$(git rev-parse --short several_edits^^) &&
538 COMMIT3=$(git rev-parse --short several_edits^) &&
539 COMMIT4=$(git rev-parse --short several_edits) &&
540 ONTO=$(git rev-parse --short HEAD~3) &&
541 git rebase -i HEAD~3 &&
544 git commit --amend -m "f" &&
545 git rebase --continue &&
547 cat >expected <<EOF &&
548 interactive rebase in progress; onto $ONTO
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)
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")
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)
564 no changes added to commit (use "git add" and/or "git commit -a")
566 git status --untracked-files=no >actual &&
567 test_i18ncmp expected actual
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" &&
575 test_when_finished "git rebase --abort" &&
576 COMMIT2=$(git rev-parse --short several_edits^^) &&
577 COMMIT3=$(git rev-parse --short several_edits^) &&
578 COMMIT4=$(git rev-parse --short several_edits) &&
579 ONTO=$(git rev-parse --short HEAD~3) &&
580 git rebase -i HEAD~3 &&
583 git commit --amend -m "g" &&
584 git rebase --continue &&
585 git commit --amend -m "h" &&
586 cat >expected <<EOF &&
587 interactive rebase in progress; onto $ONTO
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)
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)
598 nothing to commit (use -u to show untracked files)
600 git status --untracked-files=no >actual &&
601 test_i18ncmp expected actual
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"
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 &&
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)
626 nothing to commit (use -u to show untracked files)
628 git status --untracked-files=no >actual &&
629 test_i18ncmp expected actual
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 &&
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 &&
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)
648 nothing to commit (use -u to show untracked files)
650 git status --untracked-files=no >actual &&
651 test_i18ncmp expected actual
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 &&
664 cat >expected <<\EOF &&
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)
671 nothing to commit (use -u to show untracked files)
673 git status --untracked-files=no >actual &&
674 test_i18ncmp expected actual
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" &&
687 git bisect good one_bisect &&
688 TGT=$(git rev-parse --short two_bisect) &&
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)
694 nothing to commit (use -u to show untracked files)
696 git status --untracked-files=no >actual &&
697 test_i18ncmp expected actual
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" &&
710 ONTO=$(git rev-parse --short HEAD^^) &&
711 test_must_fail git rebase HEAD^ --onto HEAD^^ &&
712 cat >expected <<EOF &&
713 rebase in progress; onto $ONTO
714 You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''.
717 both modified: main.txt
719 no changes added to commit
721 git status --untracked-files=no >actual &&
722 test_i18ncmp expected actual
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
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 &&
741 TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
742 cat >expected <<EOF &&
743 On branch cherry_branch
744 You are currently cherry-picking commit $TO_CHERRY_PICK.
745 (fix conflicts and run "git cherry-pick --continue")
746 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
749 (use "git add <file>..." to mark resolution)
751 both modified: main.txt
753 no changes added to commit (use "git add" and/or "git commit -a")
755 git status --untracked-files=no >actual &&
756 test_i18ncmp expected actual
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 &&
764 TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
765 echo end >main.txt &&
767 cat >expected <<EOF &&
768 On branch cherry_branch
769 You are currently cherry-picking commit $TO_CHERRY_PICK.
770 (all conflicts fixed: run "git cherry-pick --continue")
771 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
773 Changes to be committed:
777 Untracked files not listed (use -u option to show untracked files)
779 git status --untracked-files=no >actual &&
780 test_i18ncmp expected actual
783 test_expect_success 'status when cherry-picking after committing conflict resolution' '
784 git reset --hard cherry_branch &&
785 test_when_finished "git cherry-pick --abort" &&
786 test_must_fail git cherry-pick cherry_branch_second one_cherry &&
787 echo end >main.txt &&
789 cat >expected <<EOF &&
790 On branch cherry_branch
791 Cherry-pick currently in progress.
792 (run "git cherry-pick --continue" to continue)
793 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
795 nothing to commit (use -u to show untracked files)
797 git status --untracked-files=no >actual &&
798 test_i18ncmp expected actual
801 test_expect_success 'status showing detached at and from a tag' '
802 test_commit atag tagging &&
804 cat >expected <<\EOF &&
805 HEAD detached at atag
806 nothing to commit (use -u to show untracked files)
808 git status --untracked-files=no >actual &&
809 test_i18ncmp expected actual &&
811 git reset --hard HEAD^ &&
812 cat >expected <<\EOF &&
813 HEAD detached from atag
814 nothing to commit (use -u to show untracked files)
816 git status --untracked-files=no >actual &&
817 test_i18ncmp expected actual
820 test_expect_success 'status while reverting commit (conflicts)' '
821 git checkout master &&
822 echo before >to-revert.txt &&
823 test_commit before to-revert.txt &&
824 echo old >to-revert.txt &&
825 test_commit old to-revert.txt &&
826 echo new >to-revert.txt &&
827 test_commit new to-revert.txt &&
828 TO_REVERT=$(git rev-parse --short HEAD^) &&
829 test_must_fail git revert $TO_REVERT &&
830 cat >expected <<EOF &&
832 You are currently reverting commit $TO_REVERT.
833 (fix conflicts and run "git revert --continue")
834 (use "git revert --abort" to cancel the revert operation)
837 (use "git reset HEAD <file>..." to unstage)
838 (use "git add <file>..." to mark resolution)
840 both modified: to-revert.txt
842 no changes added to commit (use "git add" and/or "git commit -a")
844 git status --untracked-files=no >actual &&
845 test_i18ncmp expected actual
848 test_expect_success 'status while reverting commit (conflicts resolved)' '
849 echo reverted >to-revert.txt &&
850 git add to-revert.txt &&
851 cat >expected <<EOF &&
853 You are currently reverting commit $TO_REVERT.
854 (all conflicts fixed: run "git revert --continue")
855 (use "git revert --abort" to cancel the revert operation)
857 Changes to be committed:
858 (use "git reset HEAD <file>..." to unstage)
860 modified: to-revert.txt
862 Untracked files not listed (use -u option to show untracked files)
864 git status --untracked-files=no >actual &&
865 test_i18ncmp expected actual
868 test_expect_success 'status after reverting commit' '
869 git revert --continue &&
870 cat >expected <<\EOF &&
872 nothing to commit (use -u to show untracked files)
874 git status --untracked-files=no >actual &&
875 test_i18ncmp expected actual
878 test_expect_success 'status while reverting after committing conflict resolution' '
879 test_when_finished "git revert --abort" &&
880 git reset --hard new &&
881 test_must_fail git revert old new &&
882 echo reverted >to-revert.txt &&
884 cat >expected <<EOF &&
886 Revert currently in progress.
887 (run "git revert --continue" to continue)
888 (use "git revert --abort" to cancel the revert operation)
890 nothing to commit (use -u to show untracked files)
892 git status --untracked-files=no >actual &&
893 test_i18ncmp expected actual
896 test_expect_success 'prepare for different number of commits rebased' '
897 git reset --hard master &&
898 git checkout -b several_commits &&
899 test_commit one_commit main.txt one &&
900 test_commit two_commit main.txt two &&
901 test_commit three_commit main.txt three &&
902 test_commit four_commit main.txt four
905 test_expect_success 'status: one command done nothing remaining' '
906 FAKE_LINES="exec_exit_15" &&
908 test_when_finished "git rebase --abort" &&
909 ONTO=$(git rev-parse --short HEAD~3) &&
910 test_must_fail git rebase -i HEAD~3 &&
911 cat >expected <<EOF &&
912 interactive rebase in progress; onto $ONTO
913 Last command done (1 command done):
915 No commands remaining.
916 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
917 (use "git commit --amend" to amend the current commit)
918 (use "git rebase --continue" once you are satisfied with your changes)
920 nothing to commit (use -u to show untracked files)
922 git status --untracked-files=no >actual &&
923 test_i18ncmp expected actual
926 test_expect_success 'status: two commands done with some white lines in done file' '
927 FAKE_LINES="1 > exec_exit_15 2 3" &&
929 test_when_finished "git rebase --abort" &&
930 ONTO=$(git rev-parse --short HEAD~3) &&
931 COMMIT4=$(git rev-parse --short HEAD) &&
932 COMMIT3=$(git rev-parse --short HEAD^) &&
933 COMMIT2=$(git rev-parse --short HEAD^^) &&
934 test_must_fail git rebase -i HEAD~3 &&
935 cat >expected <<EOF &&
936 interactive rebase in progress; onto $ONTO
937 Last commands done (2 commands done):
938 pick $COMMIT2 two_commit
940 Next commands to do (2 remaining commands):
941 pick $COMMIT3 three_commit
942 pick $COMMIT4 four_commit
943 (use "git rebase --edit-todo" to view and edit)
944 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
945 (use "git commit --amend" to amend the current commit)
946 (use "git rebase --continue" once you are satisfied with your changes)
948 nothing to commit (use -u to show untracked files)
950 git status --untracked-files=no >actual &&
951 test_i18ncmp expected actual
954 test_expect_success 'status: two remaining commands with some white lines in todo file' '
955 FAKE_LINES="1 2 exec_exit_15 3 > 4" &&
957 test_when_finished "git rebase --abort" &&
958 ONTO=$(git rev-parse --short HEAD~4) &&
959 COMMIT4=$(git rev-parse --short HEAD) &&
960 COMMIT3=$(git rev-parse --short HEAD^) &&
961 COMMIT2=$(git rev-parse --short HEAD^^) &&
962 test_must_fail git rebase -i HEAD~4 &&
963 cat >expected <<EOF &&
964 interactive rebase in progress; onto $ONTO
965 Last commands done (3 commands done):
966 pick $COMMIT2 two_commit
968 (see more in file .git/rebase-merge/done)
969 Next commands to do (2 remaining commands):
970 pick $COMMIT3 three_commit
971 pick $COMMIT4 four_commit
972 (use "git rebase --edit-todo" to view and edit)
973 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
974 (use "git commit --amend" to amend the current commit)
975 (use "git rebase --continue" once you are satisfied with your changes)
977 nothing to commit (use -u to show untracked files)
979 git status --untracked-files=no >actual &&
980 test_i18ncmp expected actual
983 test_expect_success 'status: handle not-yet-started rebase -i gracefully' '
984 ONTO=$(git rev-parse --short HEAD^) &&
985 COMMIT=$(git rev-parse --short HEAD) &&
986 EDITOR="git status --untracked-files=no >actual" git rebase -i HEAD^ &&
987 cat >expected <<EOF &&
988 On branch several_commits
990 Next command to do (1 remaining command):
991 pick $COMMIT four_commit
992 (use "git rebase --edit-todo" to view and edit)
993 You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
994 (use "git commit --amend" to amend the current commit)
995 (use "git rebase --continue" once you are satisfied with your changes)
997 nothing to commit (use -u to show untracked files)
999 test_i18ncmp expected actual