3 # Copyright (c) 2007 Johannes E. Schindelin
6 test_description
='git status'
10 test_expect_success
'setup' '
24 git commit -m initial &&
28 echo 1 >dir1/modified &&
29 echo 2 >dir2/modified &&
34 test_expect_success
'status (1)' '
36 grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
42 # Changes to be committed:
43 # (use "git reset HEAD <file>..." to unstage)
45 # new file: dir2/added
47 # Changed but not updated:
48 # (use "git add <file>..." to update what will be committed)
49 # (use "git checkout -- <file>..." to discard changes in working directory)
51 # modified: dir1/modified
54 # (use "git add <file>..." to include in what will be committed)
64 test_expect_success
'status (2)' '
67 test_cmp expect output
73 # Changes to be committed:
74 # new file: dir2/added
76 # Changed but not updated:
77 # modified: dir1/modified
88 git config advice.statusHints false
90 test_expect_success
'status (advice.statusHints false)' '
93 test_cmp expect output
97 git config
--unset advice.statusHints
110 test_expect_success
'status -s (2)' '
112 git status -s >output &&
113 test_cmp expect output
119 # Changes to be committed:
120 # (use "git reset HEAD <file>..." to unstage)
122 # new file: dir2/added
124 # Changed but not updated:
125 # (use "git add <file>..." to update what will be committed)
126 # (use "git checkout -- <file>..." to discard changes in working directory)
128 # modified: dir1/modified
130 # Untracked files not listed (use -u option to show untracked files)
132 test_expect_success
'status -uno' '
134 : >dir3/untracked1 &&
135 : >dir3/untracked2 &&
136 git status -uno >output &&
137 test_cmp expect output
140 test_expect_success
'status (status.showUntrackedFiles no)' '
141 git config status.showuntrackedfiles no
142 git status >output &&
143 test_cmp expect output
148 # Changes to be committed:
149 # new file: dir2/added
151 # Changed but not updated:
152 # modified: dir1/modified
154 # Untracked files not listed
156 git config advice.statusHints false
157 test_expect_success
'status -uno (advice.statusHints false)' '
158 git status -uno >output &&
159 test_cmp expect output
161 git config
--unset advice.statusHints
167 test_expect_success
'status -s -uno' '
168 git config --unset status.showuntrackedfiles
169 git status -s -uno >output &&
170 test_cmp expect output
173 test_expect_success
'status -s (status.showUntrackedFiles no)' '
174 git config status.showuntrackedfiles no
175 git status -s >output &&
176 test_cmp expect output
181 # Changes to be committed:
182 # (use "git reset HEAD <file>..." to unstage)
184 # new file: dir2/added
186 # Changed but not updated:
187 # (use "git add <file>..." to update what will be committed)
188 # (use "git checkout -- <file>..." to discard changes in working directory)
190 # modified: dir1/modified
193 # (use "git add <file>..." to include in what will be committed)
203 test_expect_success
'status -unormal' '
204 git status -unormal >output &&
205 test_cmp expect output
208 test_expect_success
'status (status.showUntrackedFiles normal)' '
209 git config status.showuntrackedfiles normal
210 git status >output &&
211 test_cmp expect output
225 test_expect_success
'status -s -unormal' '
226 git config --unset status.showuntrackedfiles
227 git status -s -unormal >output &&
228 test_cmp expect output
231 test_expect_success
'status -s (status.showUntrackedFiles normal)' '
232 git config status.showuntrackedfiles normal
233 git status -s >output &&
234 test_cmp expect output
239 # Changes to be committed:
240 # (use "git reset HEAD <file>..." to unstage)
242 # new file: dir2/added
244 # Changed but not updated:
245 # (use "git add <file>..." to update what will be committed)
246 # (use "git checkout -- <file>..." to discard changes in working directory)
248 # modified: dir1/modified
251 # (use "git add <file>..." to include in what will be committed)
262 test_expect_success
'status -uall' '
263 git status -uall >output &&
264 test_cmp expect output
266 test_expect_success
'status (status.showUntrackedFiles all)' '
267 git config status.showuntrackedfiles all
268 git status >output &&
270 git config --unset status.showuntrackedfiles &&
271 test_cmp expect output
284 test_expect_success
'status -s -uall' '
285 git config --unset status.showuntrackedfiles
286 git status -s -uall >output &&
287 test_cmp expect output
289 test_expect_success
'status -s (status.showUntrackedFiles all)' '
290 git config status.showuntrackedfiles all
291 git status -s >output &&
293 git config --unset status.showuntrackedfiles &&
294 test_cmp expect output
299 # Changes to be committed:
300 # (use "git reset HEAD <file>..." to unstage)
302 # new file: ../dir2/added
304 # Changed but not updated:
305 # (use "git add <file>..." to update what will be committed)
306 # (use "git checkout -- <file>..." to discard changes in working directory)
311 # (use "git add <file>..." to include in what will be committed)
321 test_expect_success
'status with relative paths' '
323 (cd dir1 && git status) >output &&
324 test_cmp expect output
338 test_expect_success
'status -s with relative paths' '
340 (cd dir1 && git status -s) >output &&
341 test_cmp expect output
356 test_expect_success
'status --porcelain ignores relative paths setting' '
358 (cd dir1 && git status --porcelain) >output &&
359 test_cmp expect output
363 test_expect_success
'setup unique colors' '
365 git config status.color.untracked blue
371 # Changes to be committed:
372 # (use "git reset HEAD <file>..." to unstage)
374 # <GREEN>new file: dir2/added<RESET>
376 # Changed but not updated:
377 # (use "git add <file>..." to update what will be committed)
378 # (use "git checkout -- <file>..." to discard changes in working directory)
380 # <RED>modified: dir1/modified<RESET>
383 # (use "git add <file>..." to include in what will be committed)
385 # <BLUE>dir1/untracked<RESET>
386 # <BLUE>dir2/modified<RESET>
387 # <BLUE>dir2/untracked<RESET>
388 # <BLUE>expect<RESET>
389 # <BLUE>output<RESET>
390 # <BLUE>untracked<RESET>
393 test_expect_success
'status with color.ui' '
395 git config color.ui always &&
396 git status | test_decode_color >output &&
397 test_cmp expect output
401 test_expect_success
'status with color.status' '
403 git config --unset color.ui &&
404 git config color.status always &&
405 git status | test_decode_color >output &&
406 test_cmp expect output
411 <RED
>M
<RESET
> dir
1/modified
412 <GREEN
>A
<RESET
> dir
2/added
413 <BLUE
>??
<RESET
> dir
1/untracked
414 <BLUE
>??
<RESET
> dir
2/modified
415 <BLUE
>??
<RESET
> dir
2/untracked
416 <BLUE
>??
<RESET
> expect
417 <BLUE
>??
<RESET
> output
418 <BLUE
>??
<RESET
> untracked
421 test_expect_success
'status -s with color.ui' '
423 git config --unset color.status &&
424 git config color.ui always &&
425 git status -s | test_decode_color >output &&
426 test_cmp expect output
430 test_expect_success
'status -s with color.status' '
432 git config --unset color.ui &&
433 git config color.status always &&
434 git status -s | test_decode_color >output &&
435 test_cmp expect output
450 test_expect_success
'status --porcelain ignores color.ui' '
452 git config --unset color.status &&
453 git config color.ui always &&
454 git status --porcelain | test_decode_color >output &&
455 test_cmp expect output
459 test_expect_success
'status --porcelain ignores color.status' '
461 git config --unset color.ui &&
462 git config color.status always &&
463 git status --porcelain | test_decode_color >output &&
464 test_cmp expect output
468 # recover unconditionally from color tests
469 git config
--unset color.status
470 git config
--unset color.ui
474 # Changes to be committed:
475 # (use "git reset HEAD <file>..." to unstage)
477 # new file: dir2/added
479 # Changed but not updated:
480 # (use "git add <file>..." to update what will be committed)
481 # (use "git checkout -- <file>..." to discard changes in working directory)
483 # modified: dir1/modified
486 # (use "git add <file>..." to include in what will be committed)
497 test_expect_success
'status without relative paths' '
499 git config status.relativePaths false
500 (cd dir1 && git status) >output &&
501 test_cmp expect output
516 test_expect_success
'status -s without relative paths' '
518 (cd dir1 && git status -s) >output &&
519 test_cmp expect output
525 # Changes to be committed:
526 # (use "git reset HEAD <file>..." to unstage)
528 # modified: dir1/modified
531 # (use "git add <file>..." to include in what will be committed)
539 test_expect_success
'dry-run of partial commit excluding new file in index' '
540 git commit --dry-run dir1/modified >output &&
541 test_cmp expect output
544 test_expect_success
'setup status submodule summary' '
545 test_create_repo sm && (
549 git commit -m "Add foo"
556 # Changes to be committed:
557 # (use "git reset HEAD <file>..." to unstage)
559 # new file: dir2/added
562 # Changed but not updated:
563 # (use "git add <file>..." to update what will be committed)
564 # (use "git checkout -- <file>..." to discard changes in working directory)
566 # modified: dir1/modified
569 # (use "git add <file>..." to include in what will be committed)
578 test_expect_success
'status submodule summary is disabled by default' '
579 git status >output &&
580 test_cmp expect output
583 # we expect the same as the previous test
584 test_expect_success
'status --untracked-files=all does not show submodule' '
585 git status --untracked-files=all >output &&
586 test_cmp expect output
600 test_expect_success
'status -s submodule summary is disabled by default' '
601 git status -s >output &&
602 test_cmp expect output
605 # we expect the same as the previous test
606 test_expect_success
'status -s --untracked-files=all does not show submodule' '
607 git status -s --untracked-files=all >output &&
608 test_cmp expect output
611 head=$
(cd sm
&& git rev-parse
--short=7 --verify HEAD
)
615 # Changes to be committed:
616 # (use "git reset HEAD <file>..." to unstage)
618 # new file: dir2/added
621 # Changed but not updated:
622 # (use "git add <file>..." to update what will be committed)
623 # (use "git checkout -- <file>..." to discard changes in working directory)
625 # modified: dir1/modified
627 # Submodule changes to be committed:
629 # * sm 0000000...$head (1):
633 # (use "git add <file>..." to include in what will be committed)
642 test_expect_success
'status submodule summary' '
643 git config status.submodulesummary 10 &&
644 git status >output &&
645 test_cmp expect output
659 test_expect_success
'status -s submodule summary' '
660 git status -s >output &&
661 test_cmp expect output
666 # Changed but not updated:
667 # (use "git add <file>..." to update what will be committed)
668 # (use "git checkout -- <file>..." to discard changes in working directory)
670 # modified: dir1/modified
673 # (use "git add <file>..." to include in what will be committed)
681 no changes added to commit (use "git add" and/or "git commit -a")
683 test_expect_success
'status submodule summary (clean submodule)' '
684 git commit -m "commit submodule" &&
685 git config status.submodulesummary 10 &&
686 test_must_fail git commit --dry-run >output &&
687 test_cmp expect output &&
688 git status >output &&
689 test_cmp expect output
701 test_expect_success
'status -s submodule summary (clean submodule)' '
702 git status -s >output &&
703 test_cmp expect output
708 # Changes to be committed:
709 # (use "git reset HEAD^1 <file>..." to unstage)
711 # new file: dir2/added
714 # Changed but not updated:
715 # (use "git add <file>..." to update what will be committed)
716 # (use "git checkout -- <file>..." to discard changes in working directory)
718 # modified: dir1/modified
720 # Submodule changes to be committed:
722 # * sm 0000000...$head (1):
726 # (use "git add <file>..." to include in what will be committed)
735 test_expect_success
'commit --dry-run submodule summary (--amend)' '
736 git config status.submodulesummary 10 &&
737 git commit --dry-run --amend >output &&
738 test_cmp expect output