Code

Merge branch 'maint-1.7.4' into maint-1.7.5
[git.git] / t / t7508-status.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2007 Johannes E. Schindelin
4 #
6 test_description='git status'
8 . ./test-lib.sh
10 test_expect_success 'status -h in broken repository' '
11         mkdir broken &&
12         test_when_finished "rm -fr broken" &&
13         (
14                 cd broken &&
15                 git init &&
16                 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
17                 test_expect_code 129 git status -h >usage 2>&1
18         ) &&
19         test_i18ngrep "[Uu]sage" broken/usage
20 '
22 test_expect_success 'commit -h in broken repository' '
23         mkdir broken &&
24         test_when_finished "rm -fr broken" &&
25         (
26                 cd broken &&
27                 git init &&
28                 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
29                 test_expect_code 129 git commit -h >usage 2>&1
30         ) &&
31         test_i18ngrep "[Uu]sage" broken/usage
32 '
34 test_expect_success 'setup' '
35         : >tracked &&
36         : >modified &&
37         mkdir dir1 &&
38         : >dir1/tracked &&
39         : >dir1/modified &&
40         mkdir dir2 &&
41         : >dir1/tracked &&
42         : >dir1/modified &&
43         git add . &&
45         git status >output &&
47         test_tick &&
48         git commit -m initial &&
49         : >untracked &&
50         : >dir1/untracked &&
51         : >dir2/untracked &&
52         echo 1 >dir1/modified &&
53         echo 2 >dir2/modified &&
54         echo 3 >dir2/added &&
55         git add dir2/added
56 '
58 test_expect_success 'status (1)' '
59         test_i18ngrep "use \"git rm --cached <file>\.\.\.\" to unstage" output
60 '
62 cat >expect <<\EOF
63 # On branch master
64 # Changes to be committed:
65 #   (use "git reset HEAD <file>..." to unstage)
66 #
67 #       new file:   dir2/added
68 #
69 # Changes not staged for commit:
70 #   (use "git add <file>..." to update what will be committed)
71 #   (use "git checkout -- <file>..." to discard changes in working directory)
72 #
73 #       modified:   dir1/modified
74 #
75 # Untracked files:
76 #   (use "git add <file>..." to include in what will be committed)
77 #
78 #       dir1/untracked
79 #       dir2/modified
80 #       dir2/untracked
81 #       expect
82 #       output
83 #       untracked
84 EOF
86 test_expect_success 'status (2)' '
87         git status >output &&
88         test_i18ncmp expect output
89 '
91 cat >expect <<\EOF
92 # On branch master
93 # Changes to be committed:
94 #       new file:   dir2/added
95 #
96 # Changes not staged for commit:
97 #       modified:   dir1/modified
98 #
99 # Untracked files:
100 #       dir1/untracked
101 #       dir2/modified
102 #       dir2/untracked
103 #       expect
104 #       output
105 #       untracked
106 EOF
108 test_expect_success 'status (advice.statusHints false)' '
109         test_when_finished "git config --unset advice.statusHints" &&
110         git config advice.statusHints false &&
111         git status >output &&
112         test_i18ncmp expect output
116 cat >expect <<\EOF
117  M dir1/modified
118 A  dir2/added
119 ?? dir1/untracked
120 ?? dir2/modified
121 ?? dir2/untracked
122 ?? expect
123 ?? output
124 ?? untracked
125 EOF
127 test_expect_success 'status -s' '
129         git status -s >output &&
130         test_cmp expect output
134 cat >expect <<\EOF
135 ## master
136  M dir1/modified
137 A  dir2/added
138 ?? dir1/untracked
139 ?? dir2/modified
140 ?? dir2/untracked
141 ?? expect
142 ?? output
143 ?? untracked
144 EOF
146 test_expect_success 'status -s -b' '
148         git status -s -b >output &&
149         test_cmp expect output
153 test_expect_success 'setup dir3' '
154         mkdir dir3 &&
155         : >dir3/untracked1 &&
156         : >dir3/untracked2
159 cat >expect <<EOF
160 # On branch master
161 # Changes to be committed:
162 #   (use "git reset HEAD <file>..." to unstage)
164 #       new file:   dir2/added
166 # Changes not staged for commit:
167 #   (use "git add <file>..." to update what will be committed)
168 #   (use "git checkout -- <file>..." to discard changes in working directory)
170 #       modified:   dir1/modified
172 # Untracked files not listed (use -u option to show untracked files)
173 EOF
174 test_expect_success 'status -uno' '
175         git status -uno >output &&
176         test_i18ncmp expect output
179 test_expect_success 'status (status.showUntrackedFiles no)' '
180         git config status.showuntrackedfiles no
181         test_when_finished "git config --unset status.showuntrackedfiles" &&
182         git status >output &&
183         test_i18ncmp expect output
186 cat >expect <<EOF
187 # On branch master
188 # Changes to be committed:
189 #       new file:   dir2/added
191 # Changes not staged for commit:
192 #       modified:   dir1/modified
194 # Untracked files not listed
195 EOF
196 git config advice.statusHints false
197 test_expect_success 'status -uno (advice.statusHints false)' '
198         git status -uno >output &&
199         test_i18ncmp expect output
201 git config --unset advice.statusHints
203 cat >expect << EOF
204  M dir1/modified
205 A  dir2/added
206 EOF
207 test_expect_success 'status -s -uno' '
208         git status -s -uno >output &&
209         test_cmp expect output
212 test_expect_success 'status -s (status.showUntrackedFiles no)' '
213         git config status.showuntrackedfiles no
214         git status -s >output &&
215         test_cmp expect output
218 cat >expect <<EOF
219 # On branch master
220 # Changes to be committed:
221 #   (use "git reset HEAD <file>..." to unstage)
223 #       new file:   dir2/added
225 # Changes not staged for commit:
226 #   (use "git add <file>..." to update what will be committed)
227 #   (use "git checkout -- <file>..." to discard changes in working directory)
229 #       modified:   dir1/modified
231 # Untracked files:
232 #   (use "git add <file>..." to include in what will be committed)
234 #       dir1/untracked
235 #       dir2/modified
236 #       dir2/untracked
237 #       dir3/
238 #       expect
239 #       output
240 #       untracked
241 EOF
242 test_expect_success 'status -unormal' '
243         git status -unormal >output &&
244         test_i18ncmp expect output
247 test_expect_success 'status (status.showUntrackedFiles normal)' '
248         git config status.showuntrackedfiles normal
249         test_when_finished "git config --unset status.showuntrackedfiles" &&
250         git status >output &&
251         test_i18ncmp expect output
254 cat >expect <<EOF
255  M dir1/modified
256 A  dir2/added
257 ?? dir1/untracked
258 ?? dir2/modified
259 ?? dir2/untracked
260 ?? dir3/
261 ?? expect
262 ?? output
263 ?? untracked
264 EOF
265 test_expect_success 'status -s -unormal' '
266         git status -s -unormal >output &&
267         test_cmp expect output
270 test_expect_success 'status -s (status.showUntrackedFiles normal)' '
271         git config status.showuntrackedfiles normal
272         git status -s >output &&
273         test_cmp expect output
276 cat >expect <<EOF
277 # On branch master
278 # Changes to be committed:
279 #   (use "git reset HEAD <file>..." to unstage)
281 #       new file:   dir2/added
283 # Changes not staged for commit:
284 #   (use "git add <file>..." to update what will be committed)
285 #   (use "git checkout -- <file>..." to discard changes in working directory)
287 #       modified:   dir1/modified
289 # Untracked files:
290 #   (use "git add <file>..." to include in what will be committed)
292 #       dir1/untracked
293 #       dir2/modified
294 #       dir2/untracked
295 #       dir3/untracked1
296 #       dir3/untracked2
297 #       expect
298 #       output
299 #       untracked
300 EOF
301 test_expect_success 'status -uall' '
302         git status -uall >output &&
303         test_i18ncmp expect output
306 test_expect_success 'status (status.showUntrackedFiles all)' '
307         git config status.showuntrackedfiles all
308         test_when_finished "git config --unset status.showuntrackedfiles" &&
309         git status >output &&
310         test_i18ncmp expect output
313 test_expect_success 'teardown dir3' '
314         rm -rf dir3
317 cat >expect <<EOF
318  M dir1/modified
319 A  dir2/added
320 ?? dir1/untracked
321 ?? dir2/modified
322 ?? dir2/untracked
323 ?? expect
324 ?? output
325 ?? untracked
326 EOF
327 test_expect_success 'status -s -uall' '
328         git config --unset status.showuntrackedfiles
329         git status -s -uall >output &&
330         test_cmp expect output
332 test_expect_success 'status -s (status.showUntrackedFiles all)' '
333         git config status.showuntrackedfiles all
334         git status -s >output &&
335         rm -rf dir3 &&
336         git config --unset status.showuntrackedfiles &&
337         test_cmp expect output
340 cat >expect <<\EOF
341 # On branch master
342 # Changes to be committed:
343 #   (use "git reset HEAD <file>..." to unstage)
345 #       new file:   ../dir2/added
347 # Changes not staged for commit:
348 #   (use "git add <file>..." to update what will be committed)
349 #   (use "git checkout -- <file>..." to discard changes in working directory)
351 #       modified:   modified
353 # Untracked files:
354 #   (use "git add <file>..." to include in what will be committed)
356 #       untracked
357 #       ../dir2/modified
358 #       ../dir2/untracked
359 #       ../expect
360 #       ../output
361 #       ../untracked
362 EOF
364 test_expect_success 'status with relative paths' '
365         (cd dir1 && git status) >output &&
366         test_i18ncmp expect output
369 cat >expect <<\EOF
370  M modified
371 A  ../dir2/added
372 ?? untracked
373 ?? ../dir2/modified
374 ?? ../dir2/untracked
375 ?? ../expect
376 ?? ../output
377 ?? ../untracked
378 EOF
379 test_expect_success 'status -s with relative paths' '
381         (cd dir1 && git status -s) >output &&
382         test_cmp expect output
386 cat >expect <<\EOF
387  M dir1/modified
388 A  dir2/added
389 ?? dir1/untracked
390 ?? dir2/modified
391 ?? dir2/untracked
392 ?? expect
393 ?? output
394 ?? untracked
395 EOF
397 test_expect_success 'status --porcelain ignores relative paths setting' '
399         (cd dir1 && git status --porcelain) >output &&
400         test_cmp expect output
404 test_expect_success 'setup unique colors' '
406         git config status.color.untracked blue &&
407         git config status.color.branch green
411 cat >expect <<\EOF
412 # On branch <GREEN>master<RESET>
413 # Changes to be committed:
414 #   (use "git reset HEAD <file>..." to unstage)
416 #       <GREEN>new file:   dir2/added<RESET>
418 # Changes not staged for commit:
419 #   (use "git add <file>..." to update what will be committed)
420 #   (use "git checkout -- <file>..." to discard changes in working directory)
422 #       <RED>modified:   dir1/modified<RESET>
424 # Untracked files:
425 #   (use "git add <file>..." to include in what will be committed)
427 #       <BLUE>dir1/untracked<RESET>
428 #       <BLUE>dir2/modified<RESET>
429 #       <BLUE>dir2/untracked<RESET>
430 #       <BLUE>expect<RESET>
431 #       <BLUE>output<RESET>
432 #       <BLUE>untracked<RESET>
433 EOF
435 test_expect_success 'status with color.ui' '
436         git config color.ui always &&
437         test_when_finished "git config --unset color.ui" &&
438         git status | test_decode_color >output &&
439         test_i18ncmp expect output
442 test_expect_success 'status with color.status' '
443         git config color.status always &&
444         test_when_finished "git config --unset color.status" &&
445         git status | test_decode_color >output &&
446         test_i18ncmp expect output
449 cat >expect <<\EOF
450  <RED>M<RESET> dir1/modified
451 <GREEN>A<RESET>  dir2/added
452 <BLUE>??<RESET> dir1/untracked
453 <BLUE>??<RESET> dir2/modified
454 <BLUE>??<RESET> dir2/untracked
455 <BLUE>??<RESET> expect
456 <BLUE>??<RESET> output
457 <BLUE>??<RESET> untracked
458 EOF
460 test_expect_success 'status -s with color.ui' '
462         git config color.ui always &&
463         git status -s | test_decode_color >output &&
464         test_cmp expect output
468 test_expect_success 'status -s with color.status' '
470         git config --unset color.ui &&
471         git config color.status always &&
472         git status -s | test_decode_color >output &&
473         test_cmp expect output
477 cat >expect <<\EOF
478 ## <GREEN>master<RESET>
479  <RED>M<RESET> dir1/modified
480 <GREEN>A<RESET>  dir2/added
481 <BLUE>??<RESET> dir1/untracked
482 <BLUE>??<RESET> dir2/modified
483 <BLUE>??<RESET> dir2/untracked
484 <BLUE>??<RESET> expect
485 <BLUE>??<RESET> output
486 <BLUE>??<RESET> untracked
487 EOF
489 test_expect_success 'status -s -b with color.status' '
491         git status -s -b | test_decode_color >output &&
492         test_cmp expect output
496 cat >expect <<\EOF
497  M dir1/modified
498 A  dir2/added
499 ?? dir1/untracked
500 ?? dir2/modified
501 ?? dir2/untracked
502 ?? expect
503 ?? output
504 ?? untracked
505 EOF
507 test_expect_success 'status --porcelain ignores color.ui' '
509         git config --unset color.status &&
510         git config color.ui always &&
511         git status --porcelain | test_decode_color >output &&
512         test_cmp expect output
516 test_expect_success 'status --porcelain ignores color.status' '
518         git config --unset color.ui &&
519         git config color.status always &&
520         git status --porcelain | test_decode_color >output &&
521         test_cmp expect output
525 # recover unconditionally from color tests
526 git config --unset color.status
527 git config --unset color.ui
529 test_expect_success 'status --porcelain ignores -b' '
531         git status --porcelain -b >output &&
532         test_cmp expect output
536 cat >expect <<\EOF
537 # On branch master
538 # Changes to be committed:
539 #   (use "git reset HEAD <file>..." to unstage)
541 #       new file:   dir2/added
543 # Changes not staged for commit:
544 #   (use "git add <file>..." to update what will be committed)
545 #   (use "git checkout -- <file>..." to discard changes in working directory)
547 #       modified:   dir1/modified
549 # Untracked files:
550 #   (use "git add <file>..." to include in what will be committed)
552 #       dir1/untracked
553 #       dir2/modified
554 #       dir2/untracked
555 #       expect
556 #       output
557 #       untracked
558 EOF
561 test_expect_success 'status without relative paths' '
563         git config status.relativePaths false &&
564         test_when_finished "git config --unset status.relativePaths" &&
565         (cd dir1 && git status) >output &&
566         test_i18ncmp expect output
570 cat >expect <<\EOF
571  M dir1/modified
572 A  dir2/added
573 ?? dir1/untracked
574 ?? dir2/modified
575 ?? dir2/untracked
576 ?? expect
577 ?? output
578 ?? untracked
579 EOF
581 test_expect_success 'status -s without relative paths' '
583         git config status.relativePaths false &&
584         test_when_finished "git config --unset status.relativePaths" &&
585         (cd dir1 && git status -s) >output &&
586         test_cmp expect output
590 cat <<EOF >expect
591 # On branch master
592 # Changes to be committed:
593 #   (use "git reset HEAD <file>..." to unstage)
595 #       modified:   dir1/modified
597 # Untracked files:
598 #   (use "git add <file>..." to include in what will be committed)
600 #       dir1/untracked
601 #       dir2/
602 #       expect
603 #       output
604 #       untracked
605 EOF
606 test_expect_success 'dry-run of partial commit excluding new file in index' '
607         git commit --dry-run dir1/modified >output &&
608         test_i18ncmp expect output
611 cat >expect <<EOF
612 :100644 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 M      dir1/modified
613 EOF
614 test_expect_success 'status refreshes the index' '
615         touch dir2/added &&
616         git status &&
617         git diff-files >output &&
618         test_cmp expect output
621 test_expect_success 'setup status submodule summary' '
622         test_create_repo sm && (
623                 cd sm &&
624                 >foo &&
625                 git add foo &&
626                 git commit -m "Add foo"
627         ) &&
628         git add sm
631 cat >expect <<EOF
632 # On branch master
633 # Changes to be committed:
634 #   (use "git reset HEAD <file>..." to unstage)
636 #       new file:   dir2/added
637 #       new file:   sm
639 # Changes not staged for commit:
640 #   (use "git add <file>..." to update what will be committed)
641 #   (use "git checkout -- <file>..." to discard changes in working directory)
643 #       modified:   dir1/modified
645 # Untracked files:
646 #   (use "git add <file>..." to include in what will be committed)
648 #       dir1/untracked
649 #       dir2/modified
650 #       dir2/untracked
651 #       expect
652 #       output
653 #       untracked
654 EOF
655 test_expect_success 'status submodule summary is disabled by default' '
656         git status >output &&
657         test_i18ncmp expect output
660 # we expect the same as the previous test
661 test_expect_success 'status --untracked-files=all does not show submodule' '
662         git status --untracked-files=all >output &&
663         test_i18ncmp expect output
666 cat >expect <<EOF
667  M dir1/modified
668 A  dir2/added
669 A  sm
670 ?? dir1/untracked
671 ?? dir2/modified
672 ?? dir2/untracked
673 ?? expect
674 ?? output
675 ?? untracked
676 EOF
677 test_expect_success 'status -s submodule summary is disabled by default' '
678         git status -s >output &&
679         test_cmp expect output
682 # we expect the same as the previous test
683 test_expect_success 'status -s --untracked-files=all does not show submodule' '
684         git status -s --untracked-files=all >output &&
685         test_cmp expect output
688 head=$(cd sm && git rev-parse --short=7 --verify HEAD)
690 cat >expect <<EOF
691 # On branch master
692 # Changes to be committed:
693 #   (use "git reset HEAD <file>..." to unstage)
695 #       new file:   dir2/added
696 #       new file:   sm
698 # Changes not staged for commit:
699 #   (use "git add <file>..." to update what will be committed)
700 #   (use "git checkout -- <file>..." to discard changes in working directory)
702 #       modified:   dir1/modified
704 # Submodule changes to be committed:
706 # * sm 0000000...$head (1):
707 #   > Add foo
709 # Untracked files:
710 #   (use "git add <file>..." to include in what will be committed)
712 #       dir1/untracked
713 #       dir2/modified
714 #       dir2/untracked
715 #       expect
716 #       output
717 #       untracked
718 EOF
719 test_expect_success 'status submodule summary' '
720         git config status.submodulesummary 10 &&
721         git status >output &&
722         test_i18ncmp expect output
725 cat >expect <<EOF
726  M dir1/modified
727 A  dir2/added
728 A  sm
729 ?? dir1/untracked
730 ?? dir2/modified
731 ?? dir2/untracked
732 ?? expect
733 ?? output
734 ?? untracked
735 EOF
736 test_expect_success 'status -s submodule summary' '
737         git status -s >output &&
738         test_cmp expect output
741 cat >expect <<EOF
742 # On branch master
743 # Changes not staged for commit:
744 #   (use "git add <file>..." to update what will be committed)
745 #   (use "git checkout -- <file>..." to discard changes in working directory)
747 #       modified:   dir1/modified
749 # Untracked files:
750 #   (use "git add <file>..." to include in what will be committed)
752 #       dir1/untracked
753 #       dir2/modified
754 #       dir2/untracked
755 #       expect
756 #       output
757 #       untracked
758 no changes added to commit (use "git add" and/or "git commit -a")
759 EOF
760 test_expect_success 'status submodule summary (clean submodule): commit' '
761         git commit -m "commit submodule" &&
762         git config status.submodulesummary 10 &&
763         test_must_fail git commit --dry-run >output &&
764         test_i18ncmp expect output &&
765         git status >output &&
766         test_i18ncmp expect output
769 cat >expect <<EOF
770  M dir1/modified
771 ?? dir1/untracked
772 ?? dir2/modified
773 ?? dir2/untracked
774 ?? expect
775 ?? output
776 ?? untracked
777 EOF
778 test_expect_success 'status -s submodule summary (clean submodule)' '
779         git status -s >output &&
780         test_cmp expect output
783 cat >expect <<EOF
784 # On branch master
785 # Changes to be committed:
786 #   (use "git reset HEAD^1 <file>..." to unstage)
788 #       new file:   dir2/added
789 #       new file:   sm
791 # Changes not staged for commit:
792 #   (use "git add <file>..." to update what will be committed)
793 #   (use "git checkout -- <file>..." to discard changes in working directory)
795 #       modified:   dir1/modified
797 # Submodule changes to be committed:
799 # * sm 0000000...$head (1):
800 #   > Add foo
802 # Untracked files:
803 #   (use "git add <file>..." to include in what will be committed)
805 #       dir1/untracked
806 #       dir2/modified
807 #       dir2/untracked
808 #       expect
809 #       output
810 #       untracked
811 EOF
812 test_expect_success 'commit --dry-run submodule summary (--amend)' '
813         git config status.submodulesummary 10 &&
814         git commit --dry-run --amend >output &&
815         test_i18ncmp expect output
818 test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
819         (
820                 chmod a-w .git &&
821                 # make dir1/tracked stat-dirty
822                 >dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
823                 git status -s >output &&
824                 ! grep dir1/tracked output &&
825                 # make sure "status" succeeded without writing index out
826                 git diff-files | grep dir1/tracked
827         )
828         status=$?
829         chmod 775 .git
830         (exit $status)
833 (cd sm && echo > bar && git add bar && git commit -q -m 'Add bar') && git add sm
834 new_head=$(cd sm && git rev-parse --short=7 --verify HEAD)
835 touch .gitmodules
837 cat > expect << EOF
838 # On branch master
839 # Changes to be committed:
840 #   (use "git reset HEAD <file>..." to unstage)
842 #       modified:   sm
844 # Changes not staged for commit:
845 #   (use "git add <file>..." to update what will be committed)
846 #   (use "git checkout -- <file>..." to discard changes in working directory)
848 #       modified:   dir1/modified
850 # Submodule changes to be committed:
852 # * sm $head...$new_head (1):
853 #   > Add bar
855 # Untracked files:
856 #   (use "git add <file>..." to include in what will be committed)
858 #       .gitmodules
859 #       dir1/untracked
860 #       dir2/modified
861 #       dir2/untracked
862 #       expect
863 #       output
864 #       untracked
865 EOF
867 test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
868         echo modified  sm/untracked &&
869         git status --ignore-submodules=untracked >output &&
870         test_i18ncmp expect output
873 test_expect_success '.gitmodules ignore=untracked suppresses submodules with untracked content' '
874         git config diff.ignoreSubmodules dirty &&
875         git status >output &&
876         test_i18ncmp expect output &&
877         git config --add -f .gitmodules submodule.subname.ignore untracked &&
878         git config --add -f .gitmodules submodule.subname.path sm &&
879         git status >output &&
880         test_i18ncmp expect output &&
881         git config -f .gitmodules  --remove-section submodule.subname &&
882         git config --unset diff.ignoreSubmodules
885 test_expect_success '.git/config ignore=untracked suppresses submodules with untracked content' '
886         git config --add -f .gitmodules submodule.subname.ignore none &&
887         git config --add -f .gitmodules submodule.subname.path sm &&
888         git config --add submodule.subname.ignore untracked &&
889         git config --add submodule.subname.path sm &&
890         git status >output &&
891         test_i18ncmp expect output &&
892         git config --remove-section submodule.subname &&
893         git config --remove-section -f .gitmodules submodule.subname
896 test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
897         git status --ignore-submodules=dirty >output &&
898         test_i18ncmp expect output
901 test_expect_success '.gitmodules ignore=dirty suppresses submodules with untracked content' '
902         git config diff.ignoreSubmodules dirty &&
903         git status >output &&
904         ! test -s actual &&
905         git config --add -f .gitmodules submodule.subname.ignore dirty &&
906         git config --add -f .gitmodules submodule.subname.path sm &&
907         git status >output &&
908         test_i18ncmp expect output &&
909         git config -f .gitmodules  --remove-section submodule.subname &&
910         git config --unset diff.ignoreSubmodules
913 test_expect_success '.git/config ignore=dirty suppresses submodules with untracked content' '
914         git config --add -f .gitmodules submodule.subname.ignore none &&
915         git config --add -f .gitmodules submodule.subname.path sm &&
916         git config --add submodule.subname.ignore dirty &&
917         git config --add submodule.subname.path sm &&
918         git status >output &&
919         test_i18ncmp expect output &&
920         git config --remove-section submodule.subname &&
921         git config -f .gitmodules  --remove-section submodule.subname
924 test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
925         echo modified >sm/foo &&
926         git status --ignore-submodules=dirty >output &&
927         test_i18ncmp expect output
930 test_expect_success '.gitmodules ignore=dirty suppresses submodules with modified content' '
931         git config --add -f .gitmodules submodule.subname.ignore dirty &&
932         git config --add -f .gitmodules submodule.subname.path sm &&
933         git status >output &&
934         test_i18ncmp expect output &&
935         git config -f .gitmodules  --remove-section submodule.subname
938 test_expect_success '.git/config ignore=dirty suppresses submodules with modified content' '
939         git config --add -f .gitmodules submodule.subname.ignore none &&
940         git config --add -f .gitmodules submodule.subname.path sm &&
941         git config --add submodule.subname.ignore dirty &&
942         git config --add submodule.subname.path sm &&
943         git status >output &&
944         test_i18ncmp expect output &&
945         git config --remove-section submodule.subname &&
946         git config -f .gitmodules  --remove-section submodule.subname
949 cat > expect << EOF
950 # On branch master
951 # Changes to be committed:
952 #   (use "git reset HEAD <file>..." to unstage)
954 #       modified:   sm
956 # Changes not staged for commit:
957 #   (use "git add <file>..." to update what will be committed)
958 #   (use "git checkout -- <file>..." to discard changes in working directory)
959 #   (commit or discard the untracked or modified content in submodules)
961 #       modified:   dir1/modified
962 #       modified:   sm (modified content)
964 # Submodule changes to be committed:
966 # * sm $head...$new_head (1):
967 #   > Add bar
969 # Untracked files:
970 #   (use "git add <file>..." to include in what will be committed)
972 #       .gitmodules
973 #       dir1/untracked
974 #       dir2/modified
975 #       dir2/untracked
976 #       expect
977 #       output
978 #       untracked
979 EOF
981 test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
982         git status --ignore-submodules=untracked > output &&
983         test_i18ncmp expect output
986 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules with modified content" '
987         git config --add -f .gitmodules submodule.subname.ignore untracked &&
988         git config --add -f .gitmodules submodule.subname.path sm &&
989         git status >output &&
990         test_i18ncmp expect output &&
991         git config -f .gitmodules  --remove-section submodule.subname
994 test_expect_success ".git/config ignore=untracked doesn't suppress submodules with modified content" '
995         git config --add -f .gitmodules submodule.subname.ignore none &&
996         git config --add -f .gitmodules submodule.subname.path sm &&
997         git config --add submodule.subname.ignore untracked &&
998         git config --add submodule.subname.path sm &&
999         git status >output &&
1000         test_i18ncmp expect output &&
1001         git config --remove-section submodule.subname &&
1002         git config -f .gitmodules  --remove-section submodule.subname
1005 head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --verify HEAD)
1007 cat > expect << EOF
1008 # On branch master
1009 # Changes to be committed:
1010 #   (use "git reset HEAD <file>..." to unstage)
1012 #       modified:   sm
1014 # Changes not staged for commit:
1015 #   (use "git add <file>..." to update what will be committed)
1016 #   (use "git checkout -- <file>..." to discard changes in working directory)
1018 #       modified:   dir1/modified
1019 #       modified:   sm (new commits)
1021 # Submodule changes to be committed:
1023 # * sm $head...$new_head (1):
1024 #   > Add bar
1026 # Submodules changed but not updated:
1028 # * sm $new_head...$head2 (1):
1029 #   > 2nd commit
1031 # Untracked files:
1032 #   (use "git add <file>..." to include in what will be committed)
1034 #       .gitmodules
1035 #       dir1/untracked
1036 #       dir2/modified
1037 #       dir2/untracked
1038 #       expect
1039 #       output
1040 #       untracked
1041 EOF
1043 test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
1044         git status --ignore-submodules=untracked > output &&
1045         test_i18ncmp expect output
1048 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule summary" '
1049         git config --add -f .gitmodules submodule.subname.ignore untracked &&
1050         git config --add -f .gitmodules submodule.subname.path sm &&
1051         git status >output &&
1052         test_i18ncmp expect output &&
1053         git config -f .gitmodules  --remove-section submodule.subname
1056 test_expect_success ".git/config ignore=untracked doesn't suppress submodule summary" '
1057         git config --add -f .gitmodules submodule.subname.ignore none &&
1058         git config --add -f .gitmodules submodule.subname.path sm &&
1059         git config --add submodule.subname.ignore untracked &&
1060         git config --add submodule.subname.path sm &&
1061         git status >output &&
1062         test_i18ncmp expect output &&
1063         git config --remove-section submodule.subname &&
1064         git config -f .gitmodules  --remove-section submodule.subname
1067 test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
1068         git status --ignore-submodules=dirty > output &&
1069         test_i18ncmp expect output
1071 test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary" '
1072         git config --add -f .gitmodules submodule.subname.ignore dirty &&
1073         git config --add -f .gitmodules submodule.subname.path sm &&
1074         git status >output &&
1075         test_i18ncmp expect output &&
1076         git config -f .gitmodules  --remove-section submodule.subname
1079 test_expect_success ".git/config ignore=dirty doesn't suppress submodule summary" '
1080         git config --add -f .gitmodules submodule.subname.ignore none &&
1081         git config --add -f .gitmodules submodule.subname.path sm &&
1082         git config --add submodule.subname.ignore dirty &&
1083         git config --add submodule.subname.path sm &&
1084         git status >output &&
1085         test_i18ncmp expect output &&
1086         git config --remove-section submodule.subname &&
1087         git config -f .gitmodules  --remove-section submodule.subname
1090 cat > expect << EOF
1091 # On branch master
1092 # Changes not staged for commit:
1093 #   (use "git add <file>..." to update what will be committed)
1094 #   (use "git checkout -- <file>..." to discard changes in working directory)
1096 #       modified:   dir1/modified
1098 # Untracked files:
1099 #   (use "git add <file>..." to include in what will be committed)
1101 #       .gitmodules
1102 #       dir1/untracked
1103 #       dir2/modified
1104 #       dir2/untracked
1105 #       expect
1106 #       output
1107 #       untracked
1108 no changes added to commit (use "git add" and/or "git commit -a")
1109 EOF
1111 test_expect_success "--ignore-submodules=all suppresses submodule summary" '
1112         git status --ignore-submodules=all > output &&
1113         test_i18ncmp expect output
1116 test_expect_failure '.gitmodules ignore=all suppresses submodule summary' '
1117         git config --add -f .gitmodules submodule.subname.ignore all &&
1118         git config --add -f .gitmodules submodule.subname.path sm &&
1119         git status > output &&
1120         test_cmp expect output &&
1121         git config -f .gitmodules  --remove-section submodule.subname
1124 test_expect_failure '.git/config ignore=all suppresses submodule summary' '
1125         git config --add -f .gitmodules submodule.subname.ignore none &&
1126         git config --add -f .gitmodules submodule.subname.path sm &&
1127         git config --add submodule.subname.ignore all &&
1128         git config --add submodule.subname.path sm &&
1129         git status > output &&
1130         test_cmp expect output &&
1131         git config --remove-section submodule.subname &&
1132         git config -f .gitmodules  --remove-section submodule.subname
1135 test_done