t7508: test advice.statusHints
[git/kirr.git] / t / t7508-status.sh
blob7409a06c0b40b511d208430c0506dc8b3a1b2429
1 #!/bin/sh
3 # Copyright (c) 2007 Johannes E. Schindelin
6 test_description='git status'
8 . ./test-lib.sh
10 test_expect_success 'setup' '
11 : >tracked &&
12 : >modified &&
13 mkdir dir1 &&
14 : >dir1/tracked &&
15 : >dir1/modified &&
16 mkdir dir2 &&
17 : >dir1/tracked &&
18 : >dir1/modified &&
19 git add . &&
21 git status >output &&
23 test_tick &&
24 git commit -m initial &&
25 : >untracked &&
26 : >dir1/untracked &&
27 : >dir2/untracked &&
28 echo 1 >dir1/modified &&
29 echo 2 >dir2/modified &&
30 echo 3 >dir2/added &&
31 git add dir2/added
34 test_expect_success 'status (1)' '
36 grep "use \"git rm --cached <file>\.\.\.\" to unstage" output
40 cat >expect <<\EOF
41 # On branch master
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
53 # Untracked files:
54 # (use "git add <file>..." to include in what will be committed)
56 # dir1/untracked
57 # dir2/modified
58 # dir2/untracked
59 # expect
60 # output
61 # untracked
62 EOF
64 test_expect_success 'status (2)' '
66 git status >output &&
67 test_cmp expect output
71 cat >expect <<\EOF
72 # On branch master
73 # Changes to be committed:
74 # new file: dir2/added
76 # Changed but not updated:
77 # modified: dir1/modified
79 # Untracked files:
80 # dir1/untracked
81 # dir2/modified
82 # dir2/untracked
83 # expect
84 # output
85 # untracked
86 EOF
88 git config advice.statusHints false
90 test_expect_success 'status (advice.statusHints false)' '
92 git status >output &&
93 test_cmp expect output
97 git config --unset advice.statusHints
99 cat >expect <<\EOF
100 M dir1/modified
101 A dir2/added
102 ?? dir1/untracked
103 ?? dir2/modified
104 ?? dir2/untracked
105 ?? expect
106 ?? output
107 ?? untracked
110 test_expect_success 'status -s (2)' '
112 git status -s >output &&
113 test_cmp expect output
117 cat >expect <<EOF
118 # On branch master
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' '
133 mkdir dir3 &&
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
146 cat >expect <<EOF
147 # On branch master
148 # Changes to be committed:
149 # new file: dir2/added
151 # Changed but not updated:
152 # modified: dir1/modified
154 # Untracked files not listed (use -u option to show untracked files)
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
163 cat >expect << EOF
164 M dir1/modified
165 A dir2/added
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
179 cat >expect <<EOF
180 # On branch master
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
192 # Untracked files:
193 # (use "git add <file>..." to include in what will be committed)
195 # dir1/untracked
196 # dir2/modified
197 # dir2/untracked
198 # dir3/
199 # expect
200 # output
201 # untracked
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
214 cat >expect <<EOF
215 M dir1/modified
216 A dir2/added
217 ?? dir1/untracked
218 ?? dir2/modified
219 ?? dir2/untracked
220 ?? dir3/
221 ?? expect
222 ?? output
223 ?? untracked
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
237 cat >expect <<EOF
238 # On branch master
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
250 # Untracked files:
251 # (use "git add <file>..." to include in what will be committed)
253 # dir1/untracked
254 # dir2/modified
255 # dir2/untracked
256 # dir3/untracked1
257 # dir3/untracked2
258 # expect
259 # output
260 # untracked
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 &&
269 rm -rf dir3 &&
270 git config --unset status.showuntrackedfiles &&
271 test_cmp expect output
274 cat >expect <<EOF
275 M dir1/modified
276 A dir2/added
277 ?? dir1/untracked
278 ?? dir2/modified
279 ?? dir2/untracked
280 ?? expect
281 ?? output
282 ?? untracked
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 &&
292 rm -rf dir3 &&
293 git config --unset status.showuntrackedfiles &&
294 test_cmp expect output
297 cat >expect <<\EOF
298 # On branch master
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)
308 # modified: modified
310 # Untracked files:
311 # (use "git add <file>..." to include in what will be committed)
313 # untracked
314 # ../dir2/modified
315 # ../dir2/untracked
316 # ../expect
317 # ../output
318 # ../untracked
321 test_expect_success 'status with relative paths' '
323 (cd dir1 && git status) >output &&
324 test_cmp expect output
328 cat >expect <<\EOF
329 M modified
330 A ../dir2/added
331 ?? untracked
332 ?? ../dir2/modified
333 ?? ../dir2/untracked
334 ?? ../expect
335 ?? ../output
336 ?? ../untracked
338 test_expect_success 'status -s with relative paths' '
340 (cd dir1 && git status -s) >output &&
341 test_cmp expect output
345 cat >expect <<\EOF
346 M dir1/modified
347 A dir2/added
348 ?? dir1/untracked
349 ?? dir2/modified
350 ?? dir2/untracked
351 ?? expect
352 ?? output
353 ?? untracked
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
369 cat >expect <<\EOF
370 # On branch master
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>
382 # Untracked files:
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
410 cat >expect <<\EOF
411 <RED>M<RESET> dir1/modified
412 <GREEN>A<RESET> dir2/added
413 <BLUE>??<RESET> dir1/untracked
414 <BLUE>??<RESET> dir2/modified
415 <BLUE>??<RESET> dir2/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
439 cat >expect <<\EOF
440 M dir1/modified
441 A dir2/added
442 ?? dir1/untracked
443 ?? dir2/modified
444 ?? dir2/untracked
445 ?? expect
446 ?? output
447 ?? untracked
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
472 cat >expect <<\EOF
473 # On branch master
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
485 # Untracked files:
486 # (use "git add <file>..." to include in what will be committed)
488 # dir1/untracked
489 # dir2/modified
490 # dir2/untracked
491 # expect
492 # output
493 # untracked
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
505 cat >expect <<\EOF
506 M dir1/modified
507 A dir2/added
508 ?? dir1/untracked
509 ?? dir2/modified
510 ?? dir2/untracked
511 ?? expect
512 ?? output
513 ?? untracked
516 test_expect_success 'status -s without relative paths' '
518 (cd dir1 && git status -s) >output &&
519 test_cmp expect output
523 cat <<EOF >expect
524 # On branch master
525 # Changes to be committed:
526 # (use "git reset HEAD <file>..." to unstage)
528 # modified: dir1/modified
530 # Untracked files:
531 # (use "git add <file>..." to include in what will be committed)
533 # dir1/untracked
534 # dir2/
535 # expect
536 # output
537 # untracked
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 && (
546 cd sm &&
547 >foo &&
548 git add foo &&
549 git commit -m "Add foo"
550 ) &&
551 git add sm
554 cat >expect <<EOF
555 # On branch master
556 # Changes to be committed:
557 # (use "git reset HEAD <file>..." to unstage)
559 # new file: dir2/added
560 # new file: sm
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
568 # Untracked files:
569 # (use "git add <file>..." to include in what will be committed)
571 # dir1/untracked
572 # dir2/modified
573 # dir2/untracked
574 # expect
575 # output
576 # untracked
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
589 cat >expect <<EOF
590 M dir1/modified
591 A dir2/added
592 A sm
593 ?? dir1/untracked
594 ?? dir2/modified
595 ?? dir2/untracked
596 ?? expect
597 ?? output
598 ?? untracked
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)
613 cat >expect <<EOF
614 # On branch master
615 # Changes to be committed:
616 # (use "git reset HEAD <file>..." to unstage)
618 # new file: dir2/added
619 # new file: sm
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):
630 # > Add foo
632 # Untracked files:
633 # (use "git add <file>..." to include in what will be committed)
635 # dir1/untracked
636 # dir2/modified
637 # dir2/untracked
638 # expect
639 # output
640 # untracked
642 test_expect_success 'status submodule summary' '
643 git config status.submodulesummary 10 &&
644 git status >output &&
645 test_cmp expect output
648 cat >expect <<EOF
649 M dir1/modified
650 A dir2/added
651 A sm
652 ?? dir1/untracked
653 ?? dir2/modified
654 ?? dir2/untracked
655 ?? expect
656 ?? output
657 ?? untracked
659 test_expect_success 'status -s submodule summary' '
660 git status -s >output &&
661 test_cmp expect output
664 cat >expect <<EOF
665 # On branch master
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
672 # Untracked files:
673 # (use "git add <file>..." to include in what will be committed)
675 # dir1/untracked
676 # dir2/modified
677 # dir2/untracked
678 # expect
679 # output
680 # untracked
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
692 cat >expect <<EOF
693 M dir1/modified
694 ?? dir1/untracked
695 ?? dir2/modified
696 ?? dir2/untracked
697 ?? expect
698 ?? output
699 ?? untracked
701 test_expect_success 'status -s submodule summary (clean submodule)' '
702 git status -s >output &&
703 test_cmp expect output
706 cat >expect <<EOF
707 # On branch master
708 # Changes to be committed:
709 # (use "git reset HEAD^1 <file>..." to unstage)
711 # new file: dir2/added
712 # new file: sm
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):
723 # > Add foo
725 # Untracked files:
726 # (use "git add <file>..." to include in what will be committed)
728 # dir1/untracked
729 # dir2/modified
730 # dir2/untracked
731 # expect
732 # output
733 # untracked
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
741 test_done