]> git.ipfire.org Git - thirdparty/git.git/blame - t/t7512-status-help.sh
The third batch
[thirdparty/git.git] / t / t7512-status-help.sh
CommitLineData
70819263
LK
1#!/bin/sh
2#
3# Copyright (c) 2012 Valentin Duperray, Lucien Kong, Franck Jonas,
4# Thomas Nguy, Khoi Nguyen
5# Grenoble INP Ensimag
6#
7
4f021b34 8test_description='git status advice'
70819263 9
1e2ae142 10GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
334afbc7
JS
11export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
12
70819263
LK
13. ./test-lib.sh
14
15. "$TEST_DIRECTORY"/lib-rebase.sh
16
17set_fake_editor
18
19test_expect_success 'prepare for conflicts' '
6a38ef2c 20 git config --global advice.statusuoption false &&
70819263
LK
21 test_commit init main.txt init &&
22 git branch conflicts &&
1e2ae142 23 test_commit on_main main.txt on_main &&
70819263
LK
24 git checkout conflicts &&
25 test_commit on_conflicts main.txt on_conflicts
26'
27
28
29test_expect_success 'status when conflicts unresolved' '
1e2ae142 30 test_must_fail git merge main &&
1c7969c9
MM
31 cat >expected <<\EOF &&
32On branch conflicts
33You have unmerged paths.
34 (fix conflicts and run "git commit")
b0a61ab2 35 (use "git merge --abort" to abort the merge)
1c7969c9
MM
36
37Unmerged paths:
38 (use "git add <file>..." to mark resolution)
c7cb333f 39 both modified: main.txt
1c7969c9
MM
40
41no changes added to commit (use "git add" and/or "git commit -a")
42EOF
70819263 43 git status --untracked-files=no >actual &&
1108cea7 44 test_cmp expected actual
70819263
LK
45'
46
47
48test_expect_success 'status when conflicts resolved before commit' '
49 git reset --hard conflicts &&
1e2ae142 50 test_must_fail git merge main &&
70819263
LK
51 echo one >main.txt &&
52 git add main.txt &&
1c7969c9
MM
53 cat >expected <<\EOF &&
54On branch conflicts
55All conflicts fixed but you are still merging.
56 (use "git commit" to conclude merge)
57
58Changes to be committed:
1c7969c9
MM
59 modified: main.txt
60
61Untracked files not listed (use -u option to show untracked files)
62EOF
70819263 63 git status --untracked-files=no >actual &&
1108cea7 64 test_cmp expected actual
70819263
LK
65'
66
67
68test_expect_success 'prepare for rebase conflicts' '
1e2ae142 69 git reset --hard main &&
70819263
LK
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
74'
75
76
10cdb9f3 77test_expect_success 'status when rebase --apply in progress before resolving conflicts' '
70819263 78 test_when_finished "git rebase --abort" &&
0722c805 79 ONTO=$(git rev-parse --short HEAD^^) &&
10cdb9f3 80 test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
1c7969c9
MM
81 cat >expected <<EOF &&
82rebase in progress; onto $ONTO
83You 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)
87
88Unmerged paths:
80f537f7 89 (use "git restore --staged <file>..." to unstage)
1c7969c9 90 (use "git add <file>..." to mark resolution)
c7cb333f 91 both modified: main.txt
1c7969c9
MM
92
93no changes added to commit (use "git add" and/or "git commit -a")
94EOF
70819263 95 git status --untracked-files=no >actual &&
1108cea7 96 test_cmp expected actual
70819263
LK
97'
98
99
10cdb9f3 100test_expect_success 'status when rebase --apply in progress before rebase --continue' '
70819263
LK
101 git reset --hard rebase_conflicts &&
102 test_when_finished "git rebase --abort" &&
0722c805 103 ONTO=$(git rev-parse --short HEAD^^) &&
10cdb9f3 104 test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
70819263
LK
105 echo three >main.txt &&
106 git add main.txt &&
1c7969c9
MM
107 cat >expected <<EOF &&
108rebase in progress; onto $ONTO
109You are currently rebasing branch '\''rebase_conflicts'\'' on '\''$ONTO'\''.
110 (all conflicts fixed: run "git rebase --continue")
111
112Changes to be committed:
80f537f7 113 (use "git restore --staged <file>..." to unstage)
1c7969c9
MM
114 modified: main.txt
115
116Untracked files not listed (use -u option to show untracked files)
117EOF
70819263 118 git status --untracked-files=no >actual &&
1108cea7 119 test_cmp expected actual
70819263
LK
120'
121
122
123test_expect_success 'prepare for rebase_i_conflicts' '
1e2ae142 124 git reset --hard main &&
70819263
LK
125 git checkout -b rebase_i_conflicts &&
126 test_commit one_unmerge main.txt one_unmerge &&
127 git branch rebase_i_conflicts_second &&
1e2ae142 128 test_commit one_main main.txt one_main &&
70819263
LK
129 git checkout rebase_i_conflicts_second &&
130 test_commit one_second main.txt one_second
131'
132
133
134test_expect_success 'status during rebase -i when conflicts unresolved' '
135 test_when_finished "git rebase --abort" &&
0722c805 136 ONTO=$(git rev-parse --short rebase_i_conflicts) &&
84e6fb9d 137 LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
70819263 138 test_must_fail git rebase -i rebase_i_conflicts &&
1c7969c9 139 cat >expected <<EOF &&
df25e947 140interactive rebase in progress; onto $ONTO
84e6fb9d
GP
141Last command done (1 command done):
142 pick $LAST_COMMIT one_second
143No commands remaining.
1c7969c9
MM
144You 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)
148
149Unmerged paths:
80f537f7 150 (use "git restore --staged <file>..." to unstage)
1c7969c9 151 (use "git add <file>..." to mark resolution)
c7cb333f 152 both modified: main.txt
1c7969c9
MM
153
154no changes added to commit (use "git add" and/or "git commit -a")
155EOF
70819263 156 git status --untracked-files=no >actual &&
1108cea7 157 test_cmp expected actual
70819263
LK
158'
159
160
161test_expect_success 'status during rebase -i after resolving conflicts' '
162 git reset --hard rebase_i_conflicts_second &&
163 test_when_finished "git rebase --abort" &&
0722c805 164 ONTO=$(git rev-parse --short rebase_i_conflicts) &&
84e6fb9d 165 LAST_COMMIT=$(git rev-parse --short rebase_i_conflicts_second) &&
70819263
LK
166 test_must_fail git rebase -i rebase_i_conflicts &&
167 git add main.txt &&
1c7969c9 168 cat >expected <<EOF &&
df25e947 169interactive rebase in progress; onto $ONTO
84e6fb9d
GP
170Last command done (1 command done):
171 pick $LAST_COMMIT one_second
172No commands remaining.
1c7969c9
MM
173You are currently rebasing branch '\''rebase_i_conflicts_second'\'' on '\''$ONTO'\''.
174 (all conflicts fixed: run "git rebase --continue")
175
176Changes to be committed:
80f537f7 177 (use "git restore --staged <file>..." to unstage)
1c7969c9
MM
178 modified: main.txt
179
180Untracked files not listed (use -u option to show untracked files)
181EOF
70819263 182 git status --untracked-files=no >actual &&
1108cea7 183 test_cmp expected actual
70819263
LK
184'
185
186
187test_expect_success 'status when rebasing -i in edit mode' '
1e2ae142 188 git reset --hard main &&
70819263
LK
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 &&
84e6fb9d 192 COMMIT2=$(git rev-parse --short rebase_i_edit) &&
70819263 193 test_commit three_rebase_i main.txt three &&
84e6fb9d 194 COMMIT3=$(git rev-parse --short rebase_i_edit) &&
70819263
LK
195 FAKE_LINES="1 edit 2" &&
196 export FAKE_LINES &&
197 test_when_finished "git rebase --abort" &&
0722c805 198 ONTO=$(git rev-parse --short HEAD~2) &&
70819263 199 git rebase -i HEAD~2 &&
1c7969c9 200 cat >expected <<EOF &&
df25e947 201interactive rebase in progress; onto $ONTO
84e6fb9d
GP
202Last commands done (2 commands done):
203 pick $COMMIT2 two_rebase_i
204 edit $COMMIT3 three_rebase_i
205No commands remaining.
1c7969c9
MM
206You 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)
209
210nothing to commit (use -u to show untracked files)
211EOF
70819263 212 git status --untracked-files=no >actual &&
1108cea7 213 test_cmp expected actual
70819263
LK
214'
215
216
2d1cceba 217test_expect_success 'status when splitting a commit' '
1e2ae142 218 git reset --hard main &&
2d1cceba
LK
219 git checkout -b split_commit &&
220 test_commit one_split main.txt one &&
221 test_commit two_split main.txt two &&
84e6fb9d 222 COMMIT2=$(git rev-parse --short split_commit) &&
2d1cceba 223 test_commit three_split main.txt three &&
84e6fb9d 224 COMMIT3=$(git rev-parse --short split_commit) &&
2d1cceba 225 test_commit four_split main.txt four &&
84e6fb9d 226 COMMIT4=$(git rev-parse --short split_commit) &&
2d1cceba
LK
227 FAKE_LINES="1 edit 2 3" &&
228 export FAKE_LINES &&
229 test_when_finished "git rebase --abort" &&
0722c805 230 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
231 git rebase -i HEAD~3 &&
232 git reset HEAD^ &&
1c7969c9 233 cat >expected <<EOF &&
df25e947 234interactive rebase in progress; onto $ONTO
84e6fb9d
GP
235Last commands done (2 commands done):
236 pick $COMMIT2 two_split
237 edit $COMMIT3 three_split
238Next command to do (1 remaining command):
239 pick $COMMIT4 four_split
240 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
241You are currently splitting a commit while rebasing branch '\''split_commit'\'' on '\''$ONTO'\''.
242 (Once your working directory is clean, run "git rebase --continue")
243
244Changes not staged for commit:
245 (use "git add <file>..." to update what will be committed)
80f537f7 246 (use "git restore <file>..." to discard changes in working directory)
1c7969c9
MM
247 modified: main.txt
248
249no changes added to commit (use "git add" and/or "git commit -a")
250EOF
2d1cceba 251 git status --untracked-files=no >actual &&
1108cea7 252 test_cmp expected actual
2d1cceba
LK
253'
254
255
256test_expect_success 'status after editing the last commit with --amend during a rebase -i' '
1e2ae142 257 git reset --hard main &&
2d1cceba
LK
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 &&
84e6fb9d 262 COMMIT3=$(git rev-parse --short amend_last) &&
2d1cceba 263 test_commit four_amend main.txt four &&
84e6fb9d 264 COMMIT4=$(git rev-parse --short amend_last) &&
2d1cceba
LK
265 FAKE_LINES="1 2 edit 3" &&
266 export FAKE_LINES &&
267 test_when_finished "git rebase --abort" &&
0722c805 268 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
269 git rebase -i HEAD~3 &&
270 git commit --amend -m "foo" &&
1c7969c9 271 cat >expected <<EOF &&
df25e947 272interactive rebase in progress; onto $ONTO
84e6fb9d
GP
273Last commands done (3 commands done):
274 pick $COMMIT3 three_amend
275 edit $COMMIT4 four_amend
276 (see more in file .git/rebase-merge/done)
277No commands remaining.
1c7969c9
MM
278You 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)
281
282nothing to commit (use -u to show untracked files)
283EOF
2d1cceba 284 git status --untracked-files=no >actual &&
1108cea7 285 test_cmp expected actual
2d1cceba
LK
286'
287
288
289test_expect_success 'prepare for several edits' '
1e2ae142 290 git reset --hard main &&
2d1cceba
LK
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
296'
297
298
299test_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" &&
84e6fb9d
GP
303 COMMIT2=$(git rev-parse --short several_edits^^) &&
304 COMMIT3=$(git rev-parse --short several_edits^) &&
305 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 306 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
307 git rebase -i HEAD~3 &&
308 git rebase --continue &&
1c7969c9 309 cat >expected <<EOF &&
df25e947 310interactive rebase in progress; onto $ONTO
84e6fb9d
GP
311Last commands done (2 commands done):
312 edit $COMMIT2 two_edits
313 edit $COMMIT3 three_edits
314Next command to do (1 remaining command):
315 pick $COMMIT4 four_edits
316 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
317You 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)
320
321nothing to commit (use -u to show untracked files)
322EOF
2d1cceba 323 git status --untracked-files=no >actual &&
1108cea7 324 test_cmp expected actual
2d1cceba
LK
325'
326
327
328test_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" &&
84e6fb9d
GP
333 COMMIT2=$(git rev-parse --short several_edits^^) &&
334 COMMIT3=$(git rev-parse --short several_edits^) &&
335 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 336 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
337 git rebase -i HEAD~3 &&
338 git rebase --continue &&
339 git reset HEAD^ &&
1c7969c9 340 cat >expected <<EOF &&
df25e947 341interactive rebase in progress; onto $ONTO
84e6fb9d
GP
342Last commands done (2 commands done):
343 edit $COMMIT2 two_edits
344 edit $COMMIT3 three_edits
345Next command to do (1 remaining command):
346 pick $COMMIT4 four_edits
347 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
348You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
349 (Once your working directory is clean, run "git rebase --continue")
350
351Changes not staged for commit:
352 (use "git add <file>..." to update what will be committed)
80f537f7 353 (use "git restore <file>..." to discard changes in working directory)
1c7969c9
MM
354 modified: main.txt
355
356no changes added to commit (use "git add" and/or "git commit -a")
357EOF
2d1cceba 358 git status --untracked-files=no >actual &&
1108cea7 359 test_cmp expected actual
2d1cceba
LK
360'
361
362
363test_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" &&
84e6fb9d
GP
368 COMMIT2=$(git rev-parse --short several_edits^^) &&
369 COMMIT3=$(git rev-parse --short several_edits^) &&
370 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 371 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
372 git rebase -i HEAD~3 &&
373 git rebase --continue &&
374 git commit --amend -m "foo" &&
1c7969c9 375 cat >expected <<EOF &&
df25e947 376interactive rebase in progress; onto $ONTO
84e6fb9d
GP
377Last commands done (2 commands done):
378 edit $COMMIT2 two_edits
379 edit $COMMIT3 three_edits
380Next command to do (1 remaining command):
381 pick $COMMIT4 four_edits
382 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
383You 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)
386
387nothing to commit (use -u to show untracked files)
388EOF
2d1cceba 389 git status --untracked-files=no >actual &&
1108cea7 390 test_cmp expected actual
2d1cceba
LK
391'
392
393
394test_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" &&
84e6fb9d
GP
399 COMMIT2=$(git rev-parse --short several_edits^^) &&
400 COMMIT3=$(git rev-parse --short several_edits^) &&
401 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 402 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
403 git rebase -i HEAD~3 &&
404 git commit --amend -m "a" &&
405 git rebase --continue &&
1c7969c9 406 cat >expected <<EOF &&
df25e947 407interactive rebase in progress; onto $ONTO
84e6fb9d
GP
408Last commands done (2 commands done):
409 edit $COMMIT2 two_edits
410 edit $COMMIT3 three_edits
411Next command to do (1 remaining command):
412 pick $COMMIT4 four_edits
413 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
414You 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)
417
418nothing to commit (use -u to show untracked files)
419EOF
2d1cceba 420 git status --untracked-files=no >actual &&
1108cea7 421 test_cmp expected actual
2d1cceba
LK
422'
423
424
425test_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" &&
0722c805 430 ONTO=$(git rev-parse --short HEAD~3) &&
84e6fb9d
GP
431 COMMIT2=$(git rev-parse --short several_edits^^) &&
432 COMMIT3=$(git rev-parse --short several_edits^) &&
433 COMMIT4=$(git rev-parse --short several_edits) &&
2d1cceba
LK
434 git rebase -i HEAD~3 &&
435 git commit --amend -m "b" &&
436 git rebase --continue &&
437 git reset HEAD^ &&
1c7969c9 438 cat >expected <<EOF &&
df25e947 439interactive rebase in progress; onto $ONTO
84e6fb9d
GP
440Last commands done (2 commands done):
441 edit $COMMIT2 two_edits
442 edit $COMMIT3 three_edits
443Next command to do (1 remaining command):
444 pick $COMMIT4 four_edits
445 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
446You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
447 (Once your working directory is clean, run "git rebase --continue")
448
449Changes not staged for commit:
450 (use "git add <file>..." to update what will be committed)
80f537f7 451 (use "git restore <file>..." to discard changes in working directory)
1c7969c9
MM
452 modified: main.txt
453
454no changes added to commit (use "git add" and/or "git commit -a")
455EOF
2d1cceba 456 git status --untracked-files=no >actual &&
1108cea7 457 test_cmp expected actual
2d1cceba
LK
458'
459
460
461test_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" &&
84e6fb9d
GP
466 COMMIT2=$(git rev-parse --short several_edits^^) &&
467 COMMIT3=$(git rev-parse --short several_edits^) &&
468 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 469 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
470 git rebase -i HEAD~3 &&
471 git commit --amend -m "c" &&
472 git rebase --continue &&
473 git commit --amend -m "d" &&
1c7969c9 474 cat >expected <<EOF &&
df25e947 475interactive rebase in progress; onto $ONTO
84e6fb9d
GP
476Last commands done (2 commands done):
477 edit $COMMIT2 two_edits
478 edit $COMMIT3 three_edits
479Next command to do (1 remaining command):
480 pick $COMMIT4 four_edits
481 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
482You 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)
485
486nothing to commit (use -u to show untracked files)
487EOF
2d1cceba 488 git status --untracked-files=no >actual &&
1108cea7 489 test_cmp expected actual
2d1cceba
LK
490'
491
492
493test_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" &&
84e6fb9d
GP
498 COMMIT2=$(git rev-parse --short several_edits^^) &&
499 COMMIT3=$(git rev-parse --short several_edits^) &&
500 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 501 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
502 git rebase -i HEAD~3 &&
503 git reset HEAD^ &&
504 git add main.txt &&
505 git commit -m "e" &&
506 git rebase --continue &&
1c7969c9 507 cat >expected <<EOF &&
df25e947 508interactive rebase in progress; onto $ONTO
84e6fb9d
GP
509Last commands done (2 commands done):
510 edit $COMMIT2 two_edits
511 edit $COMMIT3 three_edits
512Next command to do (1 remaining command):
513 pick $COMMIT4 four_edits
514 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
515You 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)
518
519nothing to commit (use -u to show untracked files)
520EOF
2d1cceba 521 git status --untracked-files=no >actual &&
1108cea7 522 test_cmp expected actual
2d1cceba
LK
523'
524
525
526test_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" &&
84e6fb9d
GP
531 COMMIT2=$(git rev-parse --short several_edits^^) &&
532 COMMIT3=$(git rev-parse --short several_edits^) &&
533 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 534 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
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^ &&
1c7969c9 541 cat >expected <<EOF &&
df25e947 542interactive rebase in progress; onto $ONTO
84e6fb9d
GP
543Last commands done (2 commands done):
544 edit $COMMIT2 two_edits
545 edit $COMMIT3 three_edits
546Next command to do (1 remaining command):
547 pick $COMMIT4 four_edits
548 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
549You are currently splitting a commit while rebasing branch '\''several_edits'\'' on '\''$ONTO'\''.
550 (Once your working directory is clean, run "git rebase --continue")
551
552Changes not staged for commit:
553 (use "git add <file>..." to update what will be committed)
80f537f7 554 (use "git restore <file>..." to discard changes in working directory)
1c7969c9
MM
555 modified: main.txt
556
557no changes added to commit (use "git add" and/or "git commit -a")
558EOF
2d1cceba 559 git status --untracked-files=no >actual &&
1108cea7 560 test_cmp expected actual
2d1cceba
LK
561'
562
563
564test_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" &&
84e6fb9d
GP
569 COMMIT2=$(git rev-parse --short several_edits^^) &&
570 COMMIT3=$(git rev-parse --short several_edits^) &&
571 COMMIT4=$(git rev-parse --short several_edits) &&
0722c805 572 ONTO=$(git rev-parse --short HEAD~3) &&
2d1cceba
LK
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" &&
1c7969c9 579 cat >expected <<EOF &&
df25e947 580interactive rebase in progress; onto $ONTO
84e6fb9d
GP
581Last commands done (2 commands done):
582 edit $COMMIT2 two_edits
583 edit $COMMIT3 three_edits
584Next command to do (1 remaining command):
585 pick $COMMIT4 four_edits
586 (use "git rebase --edit-todo" to view and edit)
1c7969c9
MM
587You 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)
590
591nothing to commit (use -u to show untracked files)
592EOF
2d1cceba 593 git status --untracked-files=no >actual &&
1108cea7 594 test_cmp expected actual
2d1cceba
LK
595'
596
597
70819263 598test_expect_success 'prepare am_session' '
1e2ae142 599 git reset --hard main &&
70819263
LK
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"
604'
605
606
607test_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 &&
1c7969c9
MM
612 cat >expected <<\EOF &&
613On branch am_already_exists
614You 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)
618
619nothing to commit (use -u to show untracked files)
620EOF
70819263 621 git status --untracked-files=no >actual &&
1108cea7 622 test_cmp expected actual
70819263
LK
623'
624
625
626test_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 &&
1c7969c9
MM
634 cat >expected <<\EOF &&
635On branch am_not_exists
636You 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)
640
641nothing to commit (use -u to show untracked files)
642EOF
70819263 643 git status --untracked-files=no >actual &&
1108cea7 644 test_cmp expected actual
70819263
LK
645'
646
647
648test_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 &&
1c7969c9
MM
657 cat >expected <<\EOF &&
658On branch am_empty
659You are in the middle of an am session.
660The current patch is empty.
661 (use "git am --skip" to skip this patch)
9e7e41bf 662 (use "git am --allow-empty" to record this patch as an empty commit)
1c7969c9
MM
663 (use "git am --abort" to restore the original branch)
664
665nothing to commit (use -u to show untracked files)
666EOF
70819263 667 git status --untracked-files=no >actual &&
1108cea7 668 test_cmp expected actual
70819263
LK
669'
670
671
672test_expect_success 'status when bisecting' '
1e2ae142 673 git reset --hard main &&
70819263
LK
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 &&
b397ea48 682 TGT=$(git rev-parse --short two_bisect) &&
1c7969c9
MM
683 cat >expected <<EOF &&
684HEAD detached at $TGT
685You are currently bisecting, started from branch '\''bisect'\''.
686 (use "git bisect reset" to get back to the original branch)
687
688nothing to commit (use -u to show untracked files)
689EOF
70819263 690 git status --untracked-files=no >actual &&
1108cea7 691 test_cmp expected actual
70819263
LK
692'
693
694
990adccb
RJ
695test_expect_success 'status when bisecting while rebasing' '
696 git reset --hard main &&
697 test_when_finished "git rebase --abort" &&
698 ONTO=$(git rev-parse --short HEAD^) &&
699 FAKE_LINES="break" git rebase -i HEAD^ &&
700 test_when_finished "git checkout -" &&
701 git checkout -b bisect_while_rebasing &&
702 test_when_finished "git bisect reset" &&
703 git bisect start &&
704 cat >expected <<EOF &&
705On branch bisect_while_rebasing
706Last command done (1 command done):
707 break
708No commands remaining.
709You are currently editing a commit while rebasing branch '\''bisect'\'' on '\''$ONTO'\''.
710 (use "git commit --amend" to amend the current commit)
711 (use "git rebase --continue" once you are satisfied with your changes)
712
713You are currently bisecting, started from branch '\''bisect_while_rebasing'\''.
714 (use "git bisect reset" to get back to the original branch)
715
716nothing to commit (use -u to show untracked files)
717EOF
718 git status --untracked-files=no >actual &&
719 test_cmp expected actual
720'
721
722
10cdb9f3 723test_expect_success 'status when rebase --apply conflicts with statushints disabled' '
1e2ae142 724 git reset --hard main &&
70819263
LK
725 git checkout -b statushints_disabled &&
726 test_when_finished "git config --local advice.statushints true" &&
727 git config --local advice.statushints false &&
728 test_commit one_statushints main.txt one &&
729 test_commit two_statushints main.txt two &&
730 test_commit three_statushints main.txt three &&
731 test_when_finished "git rebase --abort" &&
0722c805 732 ONTO=$(git rev-parse --short HEAD^^) &&
10cdb9f3 733 test_must_fail git rebase --apply HEAD^ --onto HEAD^^ &&
1c7969c9
MM
734 cat >expected <<EOF &&
735rebase in progress; onto $ONTO
736You are currently rebasing branch '\''statushints_disabled'\'' on '\''$ONTO'\''.
737
738Unmerged paths:
c7cb333f 739 both modified: main.txt
1c7969c9
MM
740
741no changes added to commit
742EOF
70819263 743 git status --untracked-files=no >actual &&
1108cea7 744 test_cmp expected actual
70819263
LK
745'
746
747
748test_expect_success 'prepare for cherry-pick conflicts' '
1e2ae142 749 git reset --hard main &&
70819263
LK
750 git checkout -b cherry_branch &&
751 test_commit one_cherry main.txt one &&
752 test_commit two_cherries main.txt two &&
753 git checkout -b cherry_branch_second &&
754 test_commit second_cherry main.txt second &&
755 git checkout cherry_branch &&
756 test_commit three_cherries main.txt three
757'
758
759
760test_expect_success 'status when cherry-picking before resolving conflicts' '
761 test_when_finished "git cherry-pick --abort" &&
762 test_must_fail git cherry-pick cherry_branch_second &&
bffd8098
RT
763 TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
764 cat >expected <<EOF &&
1c7969c9 765On branch cherry_branch
bffd8098 766You are currently cherry-picking commit $TO_CHERRY_PICK.
1c7969c9 767 (fix conflicts and run "git cherry-pick --continue")
86ae43da 768 (use "git cherry-pick --skip" to skip this patch)
1c7969c9
MM
769 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
770
771Unmerged paths:
772 (use "git add <file>..." to mark resolution)
c7cb333f 773 both modified: main.txt
1c7969c9
MM
774
775no changes added to commit (use "git add" and/or "git commit -a")
776EOF
70819263 777 git status --untracked-files=no >actual &&
1108cea7 778 test_cmp expected actual
70819263
LK
779'
780
781
782test_expect_success 'status when cherry-picking after resolving conflicts' '
783 git reset --hard cherry_branch &&
784 test_when_finished "git cherry-pick --abort" &&
785 test_must_fail git cherry-pick cherry_branch_second &&
bffd8098 786 TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
70819263
LK
787 echo end >main.txt &&
788 git add main.txt &&
bffd8098 789 cat >expected <<EOF &&
1c7969c9 790On branch cherry_branch
bffd8098 791You are currently cherry-picking commit $TO_CHERRY_PICK.
1c7969c9 792 (all conflicts fixed: run "git cherry-pick --continue")
86ae43da 793 (use "git cherry-pick --skip" to skip this patch)
1c7969c9
MM
794 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
795
796Changes to be committed:
1c7969c9
MM
797 modified: main.txt
798
799Untracked files not listed (use -u option to show untracked files)
800EOF
70819263 801 git status --untracked-files=no >actual &&
1108cea7 802 test_cmp expected actual
70819263
LK
803'
804
a096a889
JK
805test_expect_success 'status when cherry-picking multiple commits' '
806 git reset --hard cherry_branch &&
807 test_when_finished "git cherry-pick --abort" &&
808 test_must_fail git cherry-pick cherry_branch_second one_cherry &&
809 TO_CHERRY_PICK=$(git rev-parse --short CHERRY_PICK_HEAD) &&
810 cat >expected <<EOF &&
811On branch cherry_branch
812You are currently cherry-picking commit $TO_CHERRY_PICK.
813 (fix conflicts and run "git cherry-pick --continue")
814 (use "git cherry-pick --skip" to skip this patch)
815 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
816
817Unmerged paths:
818 (use "git add <file>..." to mark resolution)
819 both modified: main.txt
820
821no changes added to commit (use "git add" and/or "git commit -a")
822EOF
823 git status --untracked-files=no >actual &&
824 test_cmp expected actual
825'
826
4a72486d
PW
827test_expect_success 'status when cherry-picking after committing conflict resolution' '
828 git reset --hard cherry_branch &&
829 test_when_finished "git cherry-pick --abort" &&
830 test_must_fail git cherry-pick cherry_branch_second one_cherry &&
831 echo end >main.txt &&
832 git commit -a &&
833 cat >expected <<EOF &&
834On branch cherry_branch
835Cherry-pick currently in progress.
836 (run "git cherry-pick --continue" to continue)
86ae43da 837 (use "git cherry-pick --skip" to skip this patch)
4a72486d
PW
838 (use "git cherry-pick --abort" to cancel the cherry-pick operation)
839
840nothing to commit (use -u to show untracked files)
841EOF
842 git status --untracked-files=no >actual &&
1108cea7 843 test_cmp expected actual
4a72486d
PW
844'
845
ed5b1ca1
PW
846test_expect_success 'status shows cherry-pick with invalid oid' '
847 mkdir .git/sequencer &&
848 test_write_lines "pick invalid-oid" >.git/sequencer/todo &&
849 git status --untracked-files=no >actual 2>err &&
850 git cherry-pick --quit &&
851 test_must_be_empty err &&
1108cea7 852 test_cmp expected actual
ed5b1ca1
PW
853'
854
855test_expect_success 'status does not show error if .git/sequencer is a file' '
856 test_when_finished "rm .git/sequencer" &&
857 test_write_lines hello >.git/sequencer &&
858 git status --untracked-files=no 2>err &&
859 test_must_be_empty err
860'
861
46ab7d46 862test_expect_success 'status showing detached at and from a tag' '
b397ea48
NTND
863 test_commit atag tagging &&
864 git checkout atag &&
59c22205 865 cat >expected <<\EOF &&
1c7969c9
MM
866HEAD detached at atag
867nothing to commit (use -u to show untracked files)
868EOF
b397ea48 869 git status --untracked-files=no >actual &&
1108cea7 870 test_cmp expected actual &&
46ab7d46
JH
871
872 git reset --hard HEAD^ &&
59c22205 873 cat >expected <<\EOF &&
1c7969c9
MM
874HEAD detached from atag
875nothing to commit (use -u to show untracked files)
876EOF
46ab7d46 877 git status --untracked-files=no >actual &&
1108cea7 878 test_cmp expected actual
b397ea48 879'
70819263 880
db4ef449 881test_expect_success 'status while reverting commit (conflicts)' '
1e2ae142 882 git checkout main &&
db4ef449
MM
883 echo before >to-revert.txt &&
884 test_commit before to-revert.txt &&
885 echo old >to-revert.txt &&
886 test_commit old to-revert.txt &&
887 echo new >to-revert.txt &&
888 test_commit new to-revert.txt &&
87e139c0
MM
889 TO_REVERT=$(git rev-parse --short HEAD^) &&
890 test_must_fail git revert $TO_REVERT &&
59c22205 891 cat >expected <<EOF &&
1e2ae142 892On branch main
1c7969c9
MM
893You are currently reverting commit $TO_REVERT.
894 (fix conflicts and run "git revert --continue")
86ae43da 895 (use "git revert --skip" to skip this patch)
1c7969c9
MM
896 (use "git revert --abort" to cancel the revert operation)
897
898Unmerged paths:
80f537f7 899 (use "git restore --staged <file>..." to unstage)
1c7969c9 900 (use "git add <file>..." to mark resolution)
c7cb333f 901 both modified: to-revert.txt
1c7969c9
MM
902
903no changes added to commit (use "git add" and/or "git commit -a")
904EOF
db4ef449 905 git status --untracked-files=no >actual &&
1108cea7 906 test_cmp expected actual
db4ef449
MM
907'
908
909test_expect_success 'status while reverting commit (conflicts resolved)' '
910 echo reverted >to-revert.txt &&
911 git add to-revert.txt &&
59c22205 912 cat >expected <<EOF &&
1e2ae142 913On branch main
1c7969c9
MM
914You are currently reverting commit $TO_REVERT.
915 (all conflicts fixed: run "git revert --continue")
86ae43da 916 (use "git revert --skip" to skip this patch)
1c7969c9
MM
917 (use "git revert --abort" to cancel the revert operation)
918
919Changes to be committed:
80f537f7 920 (use "git restore --staged <file>..." to unstage)
1c7969c9
MM
921 modified: to-revert.txt
922
923Untracked files not listed (use -u option to show untracked files)
924EOF
db4ef449 925 git status --untracked-files=no >actual &&
1108cea7 926 test_cmp expected actual
db4ef449
MM
927'
928
929test_expect_success 'status after reverting commit' '
930 git revert --continue &&
59c22205 931 cat >expected <<\EOF &&
1e2ae142 932On branch main
1c7969c9 933nothing to commit (use -u to show untracked files)
4a72486d
PW
934EOF
935 git status --untracked-files=no >actual &&
1108cea7 936 test_cmp expected actual
4a72486d
PW
937'
938
939test_expect_success 'status while reverting after committing conflict resolution' '
940 test_when_finished "git revert --abort" &&
941 git reset --hard new &&
942 test_must_fail git revert old new &&
943 echo reverted >to-revert.txt &&
944 git commit -a &&
945 cat >expected <<EOF &&
1e2ae142 946On branch main
4a72486d
PW
947Revert currently in progress.
948 (run "git revert --continue" to continue)
86ae43da 949 (use "git revert --skip" to skip this patch)
4a72486d
PW
950 (use "git revert --abort" to cancel the revert operation)
951
952nothing to commit (use -u to show untracked files)
1c7969c9 953EOF
db4ef449 954 git status --untracked-files=no >actual &&
1108cea7 955 test_cmp expected actual
db4ef449
MM
956'
957
592e412d 958test_expect_success 'prepare for different number of commits rebased' '
1e2ae142 959 git reset --hard main &&
592e412d
GP
960 git checkout -b several_commits &&
961 test_commit one_commit main.txt one &&
962 test_commit two_commit main.txt two &&
963 test_commit three_commit main.txt three &&
964 test_commit four_commit main.txt four
965'
966
967test_expect_success 'status: one command done nothing remaining' '
968 FAKE_LINES="exec_exit_15" &&
969 export FAKE_LINES &&
970 test_when_finished "git rebase --abort" &&
971 ONTO=$(git rev-parse --short HEAD~3) &&
972 test_must_fail git rebase -i HEAD~3 &&
973 cat >expected <<EOF &&
974interactive rebase in progress; onto $ONTO
975Last command done (1 command done):
976 exec exit 15
977No commands remaining.
978You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
979 (use "git commit --amend" to amend the current commit)
980 (use "git rebase --continue" once you are satisfied with your changes)
981
982nothing to commit (use -u to show untracked files)
983EOF
984 git status --untracked-files=no >actual &&
1108cea7 985 test_cmp expected actual
592e412d
GP
986'
987
988test_expect_success 'status: two commands done with some white lines in done file' '
989 FAKE_LINES="1 > exec_exit_15 2 3" &&
990 export FAKE_LINES &&
991 test_when_finished "git rebase --abort" &&
992 ONTO=$(git rev-parse --short HEAD~3) &&
993 COMMIT4=$(git rev-parse --short HEAD) &&
994 COMMIT3=$(git rev-parse --short HEAD^) &&
995 COMMIT2=$(git rev-parse --short HEAD^^) &&
996 test_must_fail git rebase -i HEAD~3 &&
997 cat >expected <<EOF &&
998interactive rebase in progress; onto $ONTO
999Last commands done (2 commands done):
1000 pick $COMMIT2 two_commit
1001 exec exit 15
1002Next commands to do (2 remaining commands):
1003 pick $COMMIT3 three_commit
1004 pick $COMMIT4 four_commit
1005 (use "git rebase --edit-todo" to view and edit)
1006You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
1007 (use "git commit --amend" to amend the current commit)
1008 (use "git rebase --continue" once you are satisfied with your changes)
1009
1010nothing to commit (use -u to show untracked files)
1011EOF
1012 git status --untracked-files=no >actual &&
1108cea7 1013 test_cmp expected actual
592e412d
GP
1014'
1015
1016test_expect_success 'status: two remaining commands with some white lines in todo file' '
1017 FAKE_LINES="1 2 exec_exit_15 3 > 4" &&
1018 export FAKE_LINES &&
1019 test_when_finished "git rebase --abort" &&
1020 ONTO=$(git rev-parse --short HEAD~4) &&
1021 COMMIT4=$(git rev-parse --short HEAD) &&
1022 COMMIT3=$(git rev-parse --short HEAD^) &&
1023 COMMIT2=$(git rev-parse --short HEAD^^) &&
1024 test_must_fail git rebase -i HEAD~4 &&
1025 cat >expected <<EOF &&
1026interactive rebase in progress; onto $ONTO
1027Last commands done (3 commands done):
1028 pick $COMMIT2 two_commit
1029 exec exit 15
1030 (see more in file .git/rebase-merge/done)
1031Next commands to do (2 remaining commands):
1032 pick $COMMIT3 three_commit
1033 pick $COMMIT4 four_commit
1034 (use "git rebase --edit-todo" to view and edit)
1035You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
1036 (use "git commit --amend" to amend the current commit)
1037 (use "git rebase --continue" once you are satisfied with your changes)
1038
1039nothing to commit (use -u to show untracked files)
1040EOF
1041 git status --untracked-files=no >actual &&
1108cea7 1042 test_cmp expected actual
592e412d
GP
1043'
1044
df9ded49
JS
1045test_expect_success 'status: handle not-yet-started rebase -i gracefully' '
1046 ONTO=$(git rev-parse --short HEAD^) &&
1047 COMMIT=$(git rev-parse --short HEAD) &&
1048 EDITOR="git status --untracked-files=no >actual" git rebase -i HEAD^ &&
1049 cat >expected <<EOF &&
1050On branch several_commits
1051No commands done.
1052Next command to do (1 remaining command):
1053 pick $COMMIT four_commit
1054 (use "git rebase --edit-todo" to view and edit)
1055You are currently editing a commit while rebasing branch '\''several_commits'\'' on '\''$ONTO'\''.
1056 (use "git commit --amend" to amend the current commit)
1057 (use "git rebase --continue" once you are satisfied with your changes)
1058
1059nothing to commit (use -u to show untracked files)
1060EOF
1108cea7 1061 test_cmp expected actual
df9ded49
JS
1062'
1063
70819263 1064test_done