Merge branch 'master' of git://github.com/gitster/git
[git/mingw.git] / t / t7508-status.sh
blobed9fdbef2b8a5971039fce91809b34b5a38dc5e2
1 #!/bin/sh
3 # Copyright (c) 2007 Johannes E. Schindelin
6 test_description='git status'
8 case $(uname -s) in
9 *MINGW*) GIT_TEST_CMP="diff -uw";;
10 esac
12 . ./test-lib.sh
14 test_expect_success 'status -h in broken repository' '
15 mkdir broken &&
16 test_when_finished "rm -fr broken" &&
18 cd broken &&
19 git init &&
20 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
21 test_expect_code 129 git status -h >usage 2>&1
22 ) &&
23 test_i18ngrep "[Uu]sage" broken/usage
26 test_expect_success 'commit -h in broken repository' '
27 mkdir broken &&
28 test_when_finished "rm -fr broken" &&
30 cd broken &&
31 git init &&
32 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
33 test_expect_code 129 git commit -h >usage 2>&1
34 ) &&
35 test_i18ngrep "[Uu]sage" broken/usage
38 test_expect_success 'setup' '
39 : >tracked &&
40 : >modified &&
41 mkdir dir1 &&
42 : >dir1/tracked &&
43 : >dir1/modified &&
44 mkdir dir2 &&
45 : >dir1/tracked &&
46 : >dir1/modified &&
47 git add . &&
49 git status >output &&
51 test_tick &&
52 git commit -m initial &&
53 : >untracked &&
54 : >dir1/untracked &&
55 : >dir2/untracked &&
56 echo 1 >dir1/modified &&
57 echo 2 >dir2/modified &&
58 echo 3 >dir2/added &&
59 git add dir2/added
62 test_expect_success 'status (1)' '
63 test_i18ngrep "use \"git rm --cached <file>\.\.\.\" to unstage" output
66 cat >expect <<\EOF
67 # On branch master
68 # Changes to be committed:
69 # (use "git reset HEAD <file>..." to unstage)
71 # new file: dir2/added
73 # Changes not staged for commit:
74 # (use "git add <file>..." to update what will be committed)
75 # (use "git checkout -- <file>..." to discard changes in working directory)
77 # modified: dir1/modified
79 # Untracked files:
80 # (use "git add <file>..." to include in what will be committed)
82 # dir1/untracked
83 # dir2/modified
84 # dir2/untracked
85 # expect
86 # output
87 # untracked
88 EOF
90 test_expect_success 'status (2)' '
91 git status >output &&
92 test_i18ncmp expect output
95 cat >expect <<\EOF
96 # On branch master
97 # Changes to be committed:
98 # new file: dir2/added
100 # Changes not staged for commit:
101 # modified: dir1/modified
103 # Untracked files:
104 # dir1/untracked
105 # dir2/modified
106 # dir2/untracked
107 # expect
108 # output
109 # untracked
112 test_expect_success 'status (advice.statusHints false)' '
113 test_when_finished "git config --unset advice.statusHints" &&
114 git config advice.statusHints false &&
115 git status >output &&
116 test_i18ncmp expect output
120 cat >expect <<\EOF
121 M dir1/modified
122 A dir2/added
123 ?? dir1/untracked
124 ?? dir2/modified
125 ?? dir2/untracked
126 ?? expect
127 ?? output
128 ?? untracked
131 test_expect_success 'status -s' '
133 git status -s >output &&
134 test_cmp expect output
138 test_expect_success 'status with gitignore' '
140 echo ".gitignore" &&
141 echo "expect" &&
142 echo "output" &&
143 echo "untracked"
144 } >.gitignore &&
146 cat >expect <<-\EOF &&
147 M dir1/modified
148 A dir2/added
149 ?? dir2/modified
151 git status -s >output &&
152 test_cmp expect output &&
154 cat >expect <<-\EOF &&
155 M dir1/modified
156 A dir2/added
157 ?? dir2/modified
158 !! .gitignore
159 !! dir1/untracked
160 !! dir2/untracked
161 !! expect
162 !! output
163 !! untracked
165 git status -s --ignored >output &&
166 test_cmp expect output &&
168 cat >expect <<-\EOF &&
169 # On branch master
170 # Changes to be committed:
171 # (use "git reset HEAD <file>..." to unstage)
173 # new file: dir2/added
175 # Changes not staged for commit:
176 # (use "git add <file>..." to update what will be committed)
177 # (use "git checkout -- <file>..." to discard changes in working directory)
179 # modified: dir1/modified
181 # Untracked files:
182 # (use "git add <file>..." to include in what will be committed)
184 # dir2/modified
185 # Ignored files:
186 # (use "git add -f <file>..." to include in what will be committed)
188 # .gitignore
189 # dir1/untracked
190 # dir2/untracked
191 # expect
192 # output
193 # untracked
195 git status --ignored >output &&
196 test_i18ncmp expect output
199 test_expect_success 'status with gitignore (nothing untracked)' '
201 echo ".gitignore" &&
202 echo "expect" &&
203 echo "dir2/modified" &&
204 echo "output" &&
205 echo "untracked"
206 } >.gitignore &&
208 cat >expect <<-\EOF &&
209 M dir1/modified
210 A dir2/added
212 git status -s >output &&
213 test_cmp expect output &&
215 cat >expect <<-\EOF &&
216 M dir1/modified
217 A dir2/added
218 !! .gitignore
219 !! dir1/untracked
220 !! dir2/modified
221 !! dir2/untracked
222 !! expect
223 !! output
224 !! untracked
226 git status -s --ignored >output &&
227 test_cmp expect output &&
229 cat >expect <<-\EOF &&
230 # On branch master
231 # Changes to be committed:
232 # (use "git reset HEAD <file>..." to unstage)
234 # new file: dir2/added
236 # Changes not staged for commit:
237 # (use "git add <file>..." to update what will be committed)
238 # (use "git checkout -- <file>..." to discard changes in working directory)
240 # modified: dir1/modified
242 # Ignored files:
243 # (use "git add -f <file>..." to include in what will be committed)
245 # .gitignore
246 # dir1/untracked
247 # dir2/modified
248 # dir2/untracked
249 # expect
250 # output
251 # untracked
253 git status --ignored >output &&
254 test_i18ncmp expect output
257 rm -f .gitignore
259 cat >expect <<\EOF
260 ## master
261 M dir1/modified
262 A dir2/added
263 ?? dir1/untracked
264 ?? dir2/modified
265 ?? dir2/untracked
266 ?? expect
267 ?? output
268 ?? untracked
271 test_expect_success 'status -s -b' '
273 git status -s -b >output &&
274 test_cmp expect output
278 test_expect_success 'setup dir3' '
279 mkdir dir3 &&
280 : >dir3/untracked1 &&
281 : >dir3/untracked2
284 cat >expect <<EOF
285 # On branch master
286 # Changes to be committed:
287 # (use "git reset HEAD <file>..." to unstage)
289 # new file: dir2/added
291 # Changes not staged for commit:
292 # (use "git add <file>..." to update what will be committed)
293 # (use "git checkout -- <file>..." to discard changes in working directory)
295 # modified: dir1/modified
297 # Untracked files not listed (use -u option to show untracked files)
299 test_expect_success 'status -uno' '
300 git status -uno >output &&
301 test_i18ncmp expect output
304 test_expect_success 'status (status.showUntrackedFiles no)' '
305 git config status.showuntrackedfiles no
306 test_when_finished "git config --unset status.showuntrackedfiles" &&
307 git status >output &&
308 test_i18ncmp expect output
311 cat >expect <<EOF
312 # On branch master
313 # Changes to be committed:
314 # new file: dir2/added
316 # Changes not staged for commit:
317 # modified: dir1/modified
319 # Untracked files not listed
321 git config advice.statusHints false
322 test_expect_success 'status -uno (advice.statusHints false)' '
323 git status -uno >output &&
324 test_i18ncmp expect output
326 git config --unset advice.statusHints
328 cat >expect << EOF
329 M dir1/modified
330 A dir2/added
332 test_expect_success 'status -s -uno' '
333 git status -s -uno >output &&
334 test_cmp expect output
337 test_expect_success 'status -s (status.showUntrackedFiles no)' '
338 git config status.showuntrackedfiles no
339 git status -s >output &&
340 test_cmp expect output
343 cat >expect <<EOF
344 # On branch master
345 # Changes to be committed:
346 # (use "git reset HEAD <file>..." to unstage)
348 # new file: dir2/added
350 # Changes not staged for commit:
351 # (use "git add <file>..." to update what will be committed)
352 # (use "git checkout -- <file>..." to discard changes in working directory)
354 # modified: dir1/modified
356 # Untracked files:
357 # (use "git add <file>..." to include in what will be committed)
359 # dir1/untracked
360 # dir2/modified
361 # dir2/untracked
362 # dir3/
363 # expect
364 # output
365 # untracked
367 test_expect_success 'status -unormal' '
368 git status -unormal >output &&
369 test_i18ncmp expect output
372 test_expect_success 'status (status.showUntrackedFiles normal)' '
373 git config status.showuntrackedfiles normal
374 test_when_finished "git config --unset status.showuntrackedfiles" &&
375 git status >output &&
376 test_i18ncmp expect output
379 cat >expect <<EOF
380 M dir1/modified
381 A dir2/added
382 ?? dir1/untracked
383 ?? dir2/modified
384 ?? dir2/untracked
385 ?? dir3/
386 ?? expect
387 ?? output
388 ?? untracked
390 test_expect_success 'status -s -unormal' '
391 git status -s -unormal >output &&
392 test_cmp expect output
395 test_expect_success 'status -s (status.showUntrackedFiles normal)' '
396 git config status.showuntrackedfiles normal
397 git status -s >output &&
398 test_cmp expect output
401 cat >expect <<EOF
402 # On branch master
403 # Changes to be committed:
404 # (use "git reset HEAD <file>..." to unstage)
406 # new file: dir2/added
408 # Changes not staged for commit:
409 # (use "git add <file>..." to update what will be committed)
410 # (use "git checkout -- <file>..." to discard changes in working directory)
412 # modified: dir1/modified
414 # Untracked files:
415 # (use "git add <file>..." to include in what will be committed)
417 # dir1/untracked
418 # dir2/modified
419 # dir2/untracked
420 # dir3/untracked1
421 # dir3/untracked2
422 # expect
423 # output
424 # untracked
426 test_expect_success 'status -uall' '
427 git status -uall >output &&
428 test_i18ncmp expect output
431 test_expect_success 'status (status.showUntrackedFiles all)' '
432 git config status.showuntrackedfiles all
433 test_when_finished "git config --unset status.showuntrackedfiles" &&
434 git status >output &&
435 test_i18ncmp expect output
438 test_expect_success 'teardown dir3' '
439 rm -rf dir3
442 cat >expect <<EOF
443 M dir1/modified
444 A dir2/added
445 ?? dir1/untracked
446 ?? dir2/modified
447 ?? dir2/untracked
448 ?? expect
449 ?? output
450 ?? untracked
452 test_expect_success 'status -s -uall' '
453 git config --unset status.showuntrackedfiles
454 git status -s -uall >output &&
455 test_cmp expect output
457 test_expect_success 'status -s (status.showUntrackedFiles all)' '
458 git config status.showuntrackedfiles all
459 git status -s >output &&
460 rm -rf dir3 &&
461 git config --unset status.showuntrackedfiles &&
462 test_cmp expect output
465 cat >expect <<\EOF
466 # On branch master
467 # Changes to be committed:
468 # (use "git reset HEAD <file>..." to unstage)
470 # new file: ../dir2/added
472 # Changes not staged for commit:
473 # (use "git add <file>..." to update what will be committed)
474 # (use "git checkout -- <file>..." to discard changes in working directory)
476 # modified: modified
478 # Untracked files:
479 # (use "git add <file>..." to include in what will be committed)
481 # untracked
482 # ../dir2/modified
483 # ../dir2/untracked
484 # ../expect
485 # ../output
486 # ../untracked
489 test_expect_success 'status with relative paths' '
490 (cd dir1 && git status) >output &&
491 test_i18ncmp expect output
494 cat >expect <<\EOF
495 M modified
496 A ../dir2/added
497 ?? untracked
498 ?? ../dir2/modified
499 ?? ../dir2/untracked
500 ?? ../expect
501 ?? ../output
502 ?? ../untracked
504 test_expect_success 'status -s with relative paths' '
506 (cd dir1 && git status -s) >output &&
507 test_cmp expect output
511 cat >expect <<\EOF
512 M dir1/modified
513 A dir2/added
514 ?? dir1/untracked
515 ?? dir2/modified
516 ?? dir2/untracked
517 ?? expect
518 ?? output
519 ?? untracked
522 test_expect_success 'status --porcelain ignores relative paths setting' '
524 (cd dir1 && git status --porcelain) >output &&
525 test_cmp expect output
529 test_expect_success 'setup unique colors' '
531 git config status.color.untracked blue &&
532 git config status.color.branch green
536 cat >expect <<\EOF
537 # On branch <GREEN>master<RESET>
538 # Changes to be committed:
539 # (use "git reset HEAD <file>..." to unstage)
541 # <GREEN>new file: dir2/added<RESET>
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 # <RED>modified: dir1/modified<RESET>
549 # Untracked files:
550 # (use "git add <file>..." to include in what will be committed)
552 # <BLUE>dir1/untracked<RESET>
553 # <BLUE>dir2/modified<RESET>
554 # <BLUE>dir2/untracked<RESET>
555 # <BLUE>expect<RESET>
556 # <BLUE>output<RESET>
557 # <BLUE>untracked<RESET>
560 test_expect_success 'status with color.ui' '
561 git config color.ui always &&
562 test_when_finished "git config --unset color.ui" &&
563 git status | test_decode_color >output &&
564 test_i18ncmp expect output
567 test_expect_success 'status with color.status' '
568 git config color.status always &&
569 test_when_finished "git config --unset color.status" &&
570 git status | test_decode_color >output &&
571 test_i18ncmp expect output
574 cat >expect <<\EOF
575 <RED>M<RESET> dir1/modified
576 <GREEN>A<RESET> dir2/added
577 <BLUE>??<RESET> dir1/untracked
578 <BLUE>??<RESET> dir2/modified
579 <BLUE>??<RESET> dir2/untracked
580 <BLUE>??<RESET> expect
581 <BLUE>??<RESET> output
582 <BLUE>??<RESET> untracked
585 test_expect_success 'status -s with color.ui' '
587 git config color.ui always &&
588 git status -s | test_decode_color >output &&
589 test_cmp expect output
593 test_expect_success 'status -s with color.status' '
595 git config --unset color.ui &&
596 git config color.status always &&
597 git status -s | test_decode_color >output &&
598 test_cmp expect output
602 cat >expect <<\EOF
603 ## <GREEN>master<RESET>
604 <RED>M<RESET> dir1/modified
605 <GREEN>A<RESET> dir2/added
606 <BLUE>??<RESET> dir1/untracked
607 <BLUE>??<RESET> dir2/modified
608 <BLUE>??<RESET> dir2/untracked
609 <BLUE>??<RESET> expect
610 <BLUE>??<RESET> output
611 <BLUE>??<RESET> untracked
614 test_expect_success 'status -s -b with color.status' '
616 git status -s -b | test_decode_color >output &&
617 test_cmp expect output
621 cat >expect <<\EOF
622 M dir1/modified
623 A dir2/added
624 ?? dir1/untracked
625 ?? dir2/modified
626 ?? dir2/untracked
627 ?? expect
628 ?? output
629 ?? untracked
632 test_expect_success 'status --porcelain ignores color.ui' '
634 git config --unset color.status &&
635 git config color.ui always &&
636 git status --porcelain | test_decode_color >output &&
637 test_cmp expect output
641 test_expect_success 'status --porcelain ignores color.status' '
643 git config --unset color.ui &&
644 git config color.status always &&
645 git status --porcelain | test_decode_color >output &&
646 test_cmp expect output
650 # recover unconditionally from color tests
651 git config --unset color.status
652 git config --unset color.ui
654 test_expect_success 'status --porcelain ignores -b' '
656 git status --porcelain -b >output &&
657 test_cmp expect output
661 cat >expect <<\EOF
662 # On branch master
663 # Changes to be committed:
664 # (use "git reset HEAD <file>..." to unstage)
666 # new file: dir2/added
668 # Changes not staged for commit:
669 # (use "git add <file>..." to update what will be committed)
670 # (use "git checkout -- <file>..." to discard changes in working directory)
672 # modified: dir1/modified
674 # Untracked files:
675 # (use "git add <file>..." to include in what will be committed)
677 # dir1/untracked
678 # dir2/modified
679 # dir2/untracked
680 # expect
681 # output
682 # untracked
686 test_expect_success 'status without relative paths' '
688 git config status.relativePaths false &&
689 test_when_finished "git config --unset status.relativePaths" &&
690 (cd dir1 && git status) >output &&
691 test_i18ncmp expect output
695 cat >expect <<\EOF
696 M dir1/modified
697 A dir2/added
698 ?? dir1/untracked
699 ?? dir2/modified
700 ?? dir2/untracked
701 ?? expect
702 ?? output
703 ?? untracked
706 test_expect_success 'status -s without relative paths' '
708 git config status.relativePaths false &&
709 test_when_finished "git config --unset status.relativePaths" &&
710 (cd dir1 && git status -s) >output &&
711 test_cmp expect output
715 cat <<EOF >expect
716 # On branch master
717 # Changes to be committed:
718 # (use "git reset HEAD <file>..." to unstage)
720 # modified: dir1/modified
722 # Untracked files:
723 # (use "git add <file>..." to include in what will be committed)
725 # dir1/untracked
726 # dir2/
727 # expect
728 # output
729 # untracked
731 test_expect_success 'dry-run of partial commit excluding new file in index' '
732 git commit --dry-run dir1/modified >output &&
733 test_i18ncmp expect output
736 cat >expect <<EOF
737 :100644 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 M dir1/modified
739 test_expect_success 'status refreshes the index' '
740 touch dir2/added &&
741 git status &&
742 git diff-files >output &&
743 test_cmp expect output
746 test_expect_success 'setup status submodule summary' '
747 test_create_repo sm && (
748 cd sm &&
749 >foo &&
750 git add foo &&
751 git commit -m "Add foo"
752 ) &&
753 git add sm
756 cat >expect <<EOF
757 # On branch master
758 # Changes to be committed:
759 # (use "git reset HEAD <file>..." to unstage)
761 # new file: dir2/added
762 # new file: sm
764 # Changes not staged for commit:
765 # (use "git add <file>..." to update what will be committed)
766 # (use "git checkout -- <file>..." to discard changes in working directory)
768 # modified: dir1/modified
770 # Untracked files:
771 # (use "git add <file>..." to include in what will be committed)
773 # dir1/untracked
774 # dir2/modified
775 # dir2/untracked
776 # expect
777 # output
778 # untracked
780 test_expect_success 'status submodule summary is disabled by default' '
781 git status >output &&
782 test_i18ncmp expect output
785 # we expect the same as the previous test
786 test_expect_success 'status --untracked-files=all does not show submodule' '
787 git status --untracked-files=all >output &&
788 test_i18ncmp expect output
791 cat >expect <<EOF
792 M dir1/modified
793 A dir2/added
794 A sm
795 ?? dir1/untracked
796 ?? dir2/modified
797 ?? dir2/untracked
798 ?? expect
799 ?? output
800 ?? untracked
802 test_expect_success 'status -s submodule summary is disabled by default' '
803 git status -s >output &&
804 test_cmp expect output
807 # we expect the same as the previous test
808 test_expect_success 'status -s --untracked-files=all does not show submodule' '
809 git status -s --untracked-files=all >output &&
810 test_cmp expect output
813 head=$(cd sm && git rev-parse --short=7 --verify HEAD)
815 cat >expect <<EOF
816 # On branch master
817 # Changes to be committed:
818 # (use "git reset HEAD <file>..." to unstage)
820 # new file: dir2/added
821 # new file: sm
823 # Changes not staged for commit:
824 # (use "git add <file>..." to update what will be committed)
825 # (use "git checkout -- <file>..." to discard changes in working directory)
827 # modified: dir1/modified
829 # Submodule changes to be committed:
831 # * sm 0000000...$head (1):
832 # > Add foo
834 # Untracked files:
835 # (use "git add <file>..." to include in what will be committed)
837 # dir1/untracked
838 # dir2/modified
839 # dir2/untracked
840 # expect
841 # output
842 # untracked
844 test_expect_success 'status submodule summary' '
845 git config status.submodulesummary 10 &&
846 git status >output &&
847 test_i18ncmp expect output
850 cat >expect <<EOF
851 M dir1/modified
852 A dir2/added
853 A sm
854 ?? dir1/untracked
855 ?? dir2/modified
856 ?? dir2/untracked
857 ?? expect
858 ?? output
859 ?? untracked
861 test_expect_success 'status -s submodule summary' '
862 git status -s >output &&
863 test_cmp expect output
866 cat >expect <<EOF
867 # On branch master
868 # Changes not staged for commit:
869 # (use "git add <file>..." to update what will be committed)
870 # (use "git checkout -- <file>..." to discard changes in working directory)
872 # modified: dir1/modified
874 # Untracked files:
875 # (use "git add <file>..." to include in what will be committed)
877 # dir1/untracked
878 # dir2/modified
879 # dir2/untracked
880 # expect
881 # output
882 # untracked
883 no changes added to commit (use "git add" and/or "git commit -a")
885 test_expect_success 'status submodule summary (clean submodule): commit' '
886 git commit -m "commit submodule" &&
887 git config status.submodulesummary 10 &&
888 test_must_fail git commit --dry-run >output &&
889 test_i18ncmp expect output &&
890 git status >output &&
891 test_i18ncmp expect output
894 cat >expect <<EOF
895 M dir1/modified
896 ?? dir1/untracked
897 ?? dir2/modified
898 ?? dir2/untracked
899 ?? expect
900 ?? output
901 ?? untracked
903 test_expect_success 'status -s submodule summary (clean submodule)' '
904 git status -s >output &&
905 test_cmp expect output
908 test_expect_success 'status -z implies porcelain' '
909 git status --porcelain |
910 perl -pe "s/\012/\000/g" >expect &&
911 git status -z >output &&
912 test_cmp expect output
915 cat >expect <<EOF
916 # On branch master
917 # Changes to be committed:
918 # (use "git reset HEAD^1 <file>..." to unstage)
920 # new file: dir2/added
921 # new file: sm
923 # Changes not staged for commit:
924 # (use "git add <file>..." to update what will be committed)
925 # (use "git checkout -- <file>..." to discard changes in working directory)
927 # modified: dir1/modified
929 # Submodule changes to be committed:
931 # * sm 0000000...$head (1):
932 # > Add foo
934 # Untracked files:
935 # (use "git add <file>..." to include in what will be committed)
937 # dir1/untracked
938 # dir2/modified
939 # dir2/untracked
940 # expect
941 # output
942 # untracked
944 test_expect_success 'commit --dry-run submodule summary (--amend)' '
945 git config status.submodulesummary 10 &&
946 git commit --dry-run --amend >output &&
947 test_i18ncmp expect output
950 test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
952 chmod a-w .git &&
953 # make dir1/tracked stat-dirty
954 >dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
955 git status -s >output &&
956 ! grep dir1/tracked output &&
957 # make sure "status" succeeded without writing index out
958 git diff-files | grep dir1/tracked
960 status=$?
961 chmod 775 .git
962 (exit $status)
965 (cd sm && echo > bar && git add bar && git commit -q -m 'Add bar') && git add sm
966 new_head=$(cd sm && git rev-parse --short=7 --verify HEAD)
967 touch .gitmodules
969 cat > expect << EOF
970 # On branch master
971 # Changes to be committed:
972 # (use "git reset HEAD <file>..." to unstage)
974 # modified: sm
976 # Changes not staged for commit:
977 # (use "git add <file>..." to update what will be committed)
978 # (use "git checkout -- <file>..." to discard changes in working directory)
980 # modified: dir1/modified
982 # Submodule changes to be committed:
984 # * sm $head...$new_head (1):
985 # > Add bar
987 # Untracked files:
988 # (use "git add <file>..." to include in what will be committed)
990 # .gitmodules
991 # dir1/untracked
992 # dir2/modified
993 # dir2/untracked
994 # expect
995 # output
996 # untracked
999 test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
1000 echo modified sm/untracked &&
1001 git status --ignore-submodules=untracked >output &&
1002 test_i18ncmp expect output
1005 test_expect_success '.gitmodules ignore=untracked suppresses submodules with untracked content' '
1006 git config diff.ignoreSubmodules dirty &&
1007 git status >output &&
1008 test_i18ncmp expect output &&
1009 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1010 git config --add -f .gitmodules submodule.subname.path sm &&
1011 git status >output &&
1012 test_i18ncmp expect output &&
1013 git config -f .gitmodules --remove-section submodule.subname &&
1014 git config --unset diff.ignoreSubmodules
1017 test_expect_success '.git/config ignore=untracked suppresses submodules with untracked content' '
1018 git config --add -f .gitmodules submodule.subname.ignore none &&
1019 git config --add -f .gitmodules submodule.subname.path sm &&
1020 git config --add submodule.subname.ignore untracked &&
1021 git config --add submodule.subname.path sm &&
1022 git status >output &&
1023 test_i18ncmp expect output &&
1024 git config --remove-section submodule.subname &&
1025 git config --remove-section -f .gitmodules submodule.subname
1028 test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
1029 git status --ignore-submodules=dirty >output &&
1030 test_i18ncmp expect output
1033 test_expect_success '.gitmodules ignore=dirty suppresses submodules with untracked content' '
1034 git config diff.ignoreSubmodules dirty &&
1035 git status >output &&
1036 ! test -s actual &&
1037 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1038 git config --add -f .gitmodules submodule.subname.path sm &&
1039 git status >output &&
1040 test_i18ncmp expect output &&
1041 git config -f .gitmodules --remove-section submodule.subname &&
1042 git config --unset diff.ignoreSubmodules
1045 test_expect_success '.git/config ignore=dirty suppresses submodules with untracked content' '
1046 git config --add -f .gitmodules submodule.subname.ignore none &&
1047 git config --add -f .gitmodules submodule.subname.path sm &&
1048 git config --add submodule.subname.ignore dirty &&
1049 git config --add submodule.subname.path sm &&
1050 git status >output &&
1051 test_i18ncmp expect output &&
1052 git config --remove-section submodule.subname &&
1053 git config -f .gitmodules --remove-section submodule.subname
1056 test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
1057 echo modified >sm/foo &&
1058 git status --ignore-submodules=dirty >output &&
1059 test_i18ncmp expect output
1062 test_expect_success '.gitmodules ignore=dirty suppresses submodules with modified content' '
1063 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1064 git config --add -f .gitmodules submodule.subname.path sm &&
1065 git status >output &&
1066 test_i18ncmp expect output &&
1067 git config -f .gitmodules --remove-section submodule.subname
1070 test_expect_success '.git/config ignore=dirty suppresses submodules with modified content' '
1071 git config --add -f .gitmodules submodule.subname.ignore none &&
1072 git config --add -f .gitmodules submodule.subname.path sm &&
1073 git config --add submodule.subname.ignore dirty &&
1074 git config --add submodule.subname.path sm &&
1075 git status >output &&
1076 test_i18ncmp expect output &&
1077 git config --remove-section submodule.subname &&
1078 git config -f .gitmodules --remove-section submodule.subname
1081 cat > expect << EOF
1082 # On branch master
1083 # Changes to be committed:
1084 # (use "git reset HEAD <file>..." to unstage)
1086 # modified: sm
1088 # Changes not staged for commit:
1089 # (use "git add <file>..." to update what will be committed)
1090 # (use "git checkout -- <file>..." to discard changes in working directory)
1091 # (commit or discard the untracked or modified content in submodules)
1093 # modified: dir1/modified
1094 # modified: sm (modified content)
1096 # Submodule changes to be committed:
1098 # * sm $head...$new_head (1):
1099 # > Add bar
1101 # Untracked files:
1102 # (use "git add <file>..." to include in what will be committed)
1104 # .gitmodules
1105 # dir1/untracked
1106 # dir2/modified
1107 # dir2/untracked
1108 # expect
1109 # output
1110 # untracked
1113 test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
1114 git status --ignore-submodules=untracked > output &&
1115 test_i18ncmp expect output
1118 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules with modified content" '
1119 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1120 git config --add -f .gitmodules submodule.subname.path sm &&
1121 git status >output &&
1122 test_i18ncmp expect output &&
1123 git config -f .gitmodules --remove-section submodule.subname
1126 test_expect_success ".git/config ignore=untracked doesn't suppress submodules with modified content" '
1127 git config --add -f .gitmodules submodule.subname.ignore none &&
1128 git config --add -f .gitmodules submodule.subname.path sm &&
1129 git config --add submodule.subname.ignore untracked &&
1130 git config --add submodule.subname.path sm &&
1131 git status >output &&
1132 test_i18ncmp expect output &&
1133 git config --remove-section submodule.subname &&
1134 git config -f .gitmodules --remove-section submodule.subname
1137 head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --verify HEAD)
1139 cat > expect << EOF
1140 # On branch master
1141 # Changes to be committed:
1142 # (use "git reset HEAD <file>..." to unstage)
1144 # modified: sm
1146 # Changes not staged for commit:
1147 # (use "git add <file>..." to update what will be committed)
1148 # (use "git checkout -- <file>..." to discard changes in working directory)
1150 # modified: dir1/modified
1151 # modified: sm (new commits)
1153 # Submodule changes to be committed:
1155 # * sm $head...$new_head (1):
1156 # > Add bar
1158 # Submodules changed but not updated:
1160 # * sm $new_head...$head2 (1):
1161 # > 2nd commit
1163 # Untracked files:
1164 # (use "git add <file>..." to include in what will be committed)
1166 # .gitmodules
1167 # dir1/untracked
1168 # dir2/modified
1169 # dir2/untracked
1170 # expect
1171 # output
1172 # untracked
1175 test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
1176 git status --ignore-submodules=untracked > output &&
1177 test_i18ncmp expect output
1180 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule summary" '
1181 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1182 git config --add -f .gitmodules submodule.subname.path sm &&
1183 git status >output &&
1184 test_i18ncmp expect output &&
1185 git config -f .gitmodules --remove-section submodule.subname
1188 test_expect_success ".git/config ignore=untracked doesn't suppress submodule summary" '
1189 git config --add -f .gitmodules submodule.subname.ignore none &&
1190 git config --add -f .gitmodules submodule.subname.path sm &&
1191 git config --add submodule.subname.ignore untracked &&
1192 git config --add submodule.subname.path sm &&
1193 git status >output &&
1194 test_i18ncmp expect output &&
1195 git config --remove-section submodule.subname &&
1196 git config -f .gitmodules --remove-section submodule.subname
1199 test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
1200 git status --ignore-submodules=dirty > output &&
1201 test_i18ncmp expect output
1203 test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary" '
1204 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1205 git config --add -f .gitmodules submodule.subname.path sm &&
1206 git status >output &&
1207 test_i18ncmp expect output &&
1208 git config -f .gitmodules --remove-section submodule.subname
1211 test_expect_success ".git/config ignore=dirty doesn't suppress submodule summary" '
1212 git config --add -f .gitmodules submodule.subname.ignore none &&
1213 git config --add -f .gitmodules submodule.subname.path sm &&
1214 git config --add submodule.subname.ignore dirty &&
1215 git config --add submodule.subname.path sm &&
1216 git status >output &&
1217 test_i18ncmp expect output &&
1218 git config --remove-section submodule.subname &&
1219 git config -f .gitmodules --remove-section submodule.subname
1222 cat > expect << EOF
1223 # On branch master
1224 # Changes not staged for commit:
1225 # (use "git add <file>..." to update what will be committed)
1226 # (use "git checkout -- <file>..." to discard changes in working directory)
1228 # modified: dir1/modified
1230 # Untracked files:
1231 # (use "git add <file>..." to include in what will be committed)
1233 # .gitmodules
1234 # dir1/untracked
1235 # dir2/modified
1236 # dir2/untracked
1237 # expect
1238 # output
1239 # untracked
1240 no changes added to commit (use "git add" and/or "git commit -a")
1243 test_expect_success "--ignore-submodules=all suppresses submodule summary" '
1244 git status --ignore-submodules=all > output &&
1245 test_i18ncmp expect output
1248 test_expect_failure '.gitmodules ignore=all suppresses submodule summary' '
1249 git config --add -f .gitmodules submodule.subname.ignore all &&
1250 git config --add -f .gitmodules submodule.subname.path sm &&
1251 git status > output &&
1252 test_cmp expect output &&
1253 git config -f .gitmodules --remove-section submodule.subname
1256 test_expect_failure '.git/config ignore=all suppresses submodule summary' '
1257 git config --add -f .gitmodules submodule.subname.ignore none &&
1258 git config --add -f .gitmodules submodule.subname.path sm &&
1259 git config --add submodule.subname.ignore all &&
1260 git config --add submodule.subname.path sm &&
1261 git status > output &&
1262 test_cmp expect output &&
1263 git config --remove-section submodule.subname &&
1264 git config -f .gitmodules --remove-section submodule.subname
1267 test_done