Merge branch 'master' of git://github.com/gitster/git
[git/mingw.git] / t / t7508-status.sh
blobf52ce52cf89c7631b9f665849074eb4d9938a426
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 test_expect_success 'status --column' '
67 COLUMNS=50 git status --column="column dense" >output &&
68 cat >expect <<\EOF &&
69 # On branch master
70 # Changes to be committed:
71 # (use "git reset HEAD <file>..." to unstage)
73 # new file: dir2/added
75 # Changes not staged for commit:
76 # (use "git add <file>..." to update what will be committed)
77 # (use "git checkout -- <file>..." to discard changes in working directory)
79 # modified: dir1/modified
81 # Untracked files:
82 # (use "git add <file>..." to include in what will be committed)
84 # dir1/untracked dir2/untracked untracked
85 # dir2/modified output
86 EOF
87 test_cmp expect output
90 cat >expect <<\EOF
91 # On branch master
92 # Changes to be committed:
93 # (use "git reset HEAD <file>..." to unstage)
95 # new file: dir2/added
97 # Changes not staged for commit:
98 # (use "git add <file>..." to update what will be committed)
99 # (use "git checkout -- <file>..." to discard changes in working directory)
101 # modified: dir1/modified
103 # Untracked files:
104 # (use "git add <file>..." to include in what will be committed)
106 # dir1/untracked
107 # dir2/modified
108 # dir2/untracked
109 # expect
110 # output
111 # untracked
114 test_expect_success 'status (2)' '
115 git status >output &&
116 test_i18ncmp expect output
119 cat >expect <<\EOF
120 # On branch master
121 # Changes to be committed:
122 # new file: dir2/added
124 # Changes not staged for commit:
125 # modified: dir1/modified
127 # Untracked files:
128 # dir1/untracked
129 # dir2/modified
130 # dir2/untracked
131 # expect
132 # output
133 # untracked
136 test_expect_success 'status (advice.statusHints false)' '
137 test_when_finished "git config --unset advice.statusHints" &&
138 git config advice.statusHints false &&
139 git status >output &&
140 test_i18ncmp expect output
144 cat >expect <<\EOF
145 M dir1/modified
146 A dir2/added
147 ?? dir1/untracked
148 ?? dir2/modified
149 ?? dir2/untracked
150 ?? expect
151 ?? output
152 ?? untracked
155 test_expect_success 'status -s' '
157 git status -s >output &&
158 test_cmp expect output
162 test_expect_success 'status with gitignore' '
164 echo ".gitignore" &&
165 echo "expect" &&
166 echo "output" &&
167 echo "untracked"
168 } >.gitignore &&
170 cat >expect <<-\EOF &&
171 M dir1/modified
172 A dir2/added
173 ?? dir2/modified
175 git status -s >output &&
176 test_cmp expect output &&
178 cat >expect <<-\EOF &&
179 M dir1/modified
180 A dir2/added
181 ?? dir2/modified
182 !! .gitignore
183 !! dir1/untracked
184 !! dir2/untracked
185 !! expect
186 !! output
187 !! untracked
189 git status -s --ignored >output &&
190 test_cmp expect output &&
192 cat >expect <<-\EOF &&
193 # On branch master
194 # Changes to be committed:
195 # (use "git reset HEAD <file>..." to unstage)
197 # new file: dir2/added
199 # Changes not staged for commit:
200 # (use "git add <file>..." to update what will be committed)
201 # (use "git checkout -- <file>..." to discard changes in working directory)
203 # modified: dir1/modified
205 # Untracked files:
206 # (use "git add <file>..." to include in what will be committed)
208 # dir2/modified
209 # Ignored files:
210 # (use "git add -f <file>..." to include in what will be committed)
212 # .gitignore
213 # dir1/untracked
214 # dir2/untracked
215 # expect
216 # output
217 # untracked
219 git status --ignored >output &&
220 test_i18ncmp expect output
223 test_expect_success 'status with gitignore (nothing untracked)' '
225 echo ".gitignore" &&
226 echo "expect" &&
227 echo "dir2/modified" &&
228 echo "output" &&
229 echo "untracked"
230 } >.gitignore &&
232 cat >expect <<-\EOF &&
233 M dir1/modified
234 A dir2/added
236 git status -s >output &&
237 test_cmp expect output &&
239 cat >expect <<-\EOF &&
240 M dir1/modified
241 A dir2/added
242 !! .gitignore
243 !! dir1/untracked
244 !! dir2/modified
245 !! dir2/untracked
246 !! expect
247 !! output
248 !! untracked
250 git status -s --ignored >output &&
251 test_cmp expect output &&
253 cat >expect <<-\EOF &&
254 # On branch master
255 # Changes to be committed:
256 # (use "git reset HEAD <file>..." to unstage)
258 # new file: dir2/added
260 # Changes not staged for commit:
261 # (use "git add <file>..." to update what will be committed)
262 # (use "git checkout -- <file>..." to discard changes in working directory)
264 # modified: dir1/modified
266 # Ignored files:
267 # (use "git add -f <file>..." to include in what will be committed)
269 # .gitignore
270 # dir1/untracked
271 # dir2/modified
272 # dir2/untracked
273 # expect
274 # output
275 # untracked
277 git status --ignored >output &&
278 test_i18ncmp expect output
281 rm -f .gitignore
283 cat >expect <<\EOF
284 ## master
285 M dir1/modified
286 A dir2/added
287 ?? dir1/untracked
288 ?? dir2/modified
289 ?? dir2/untracked
290 ?? expect
291 ?? output
292 ?? untracked
295 test_expect_success 'status -s -b' '
297 git status -s -b >output &&
298 test_cmp expect output
302 test_expect_success 'setup dir3' '
303 mkdir dir3 &&
304 : >dir3/untracked1 &&
305 : >dir3/untracked2
308 cat >expect <<EOF
309 # On branch master
310 # Changes to be committed:
311 # (use "git reset HEAD <file>..." to unstage)
313 # new file: dir2/added
315 # Changes not staged for commit:
316 # (use "git add <file>..." to update what will be committed)
317 # (use "git checkout -- <file>..." to discard changes in working directory)
319 # modified: dir1/modified
321 # Untracked files not listed (use -u option to show untracked files)
323 test_expect_success 'status -uno' '
324 git status -uno >output &&
325 test_i18ncmp expect output
328 test_expect_success 'status (status.showUntrackedFiles no)' '
329 git config status.showuntrackedfiles no
330 test_when_finished "git config --unset status.showuntrackedfiles" &&
331 git status >output &&
332 test_i18ncmp expect output
335 cat >expect <<EOF
336 # On branch master
337 # Changes to be committed:
338 # new file: dir2/added
340 # Changes not staged for commit:
341 # modified: dir1/modified
343 # Untracked files not listed
345 git config advice.statusHints false
346 test_expect_success 'status -uno (advice.statusHints false)' '
347 git status -uno >output &&
348 test_i18ncmp expect output
350 git config --unset advice.statusHints
352 cat >expect << EOF
353 M dir1/modified
354 A dir2/added
356 test_expect_success 'status -s -uno' '
357 git status -s -uno >output &&
358 test_cmp expect output
361 test_expect_success 'status -s (status.showUntrackedFiles no)' '
362 git config status.showuntrackedfiles no
363 git status -s >output &&
364 test_cmp expect output
367 cat >expect <<EOF
368 # On branch master
369 # Changes to be committed:
370 # (use "git reset HEAD <file>..." to unstage)
372 # new file: dir2/added
374 # Changes not staged for commit:
375 # (use "git add <file>..." to update what will be committed)
376 # (use "git checkout -- <file>..." to discard changes in working directory)
378 # modified: dir1/modified
380 # Untracked files:
381 # (use "git add <file>..." to include in what will be committed)
383 # dir1/untracked
384 # dir2/modified
385 # dir2/untracked
386 # dir3/
387 # expect
388 # output
389 # untracked
391 test_expect_success 'status -unormal' '
392 git status -unormal >output &&
393 test_i18ncmp expect output
396 test_expect_success 'status (status.showUntrackedFiles normal)' '
397 git config status.showuntrackedfiles normal
398 test_when_finished "git config --unset status.showuntrackedfiles" &&
399 git status >output &&
400 test_i18ncmp expect output
403 cat >expect <<EOF
404 M dir1/modified
405 A dir2/added
406 ?? dir1/untracked
407 ?? dir2/modified
408 ?? dir2/untracked
409 ?? dir3/
410 ?? expect
411 ?? output
412 ?? untracked
414 test_expect_success 'status -s -unormal' '
415 git status -s -unormal >output &&
416 test_cmp expect output
419 test_expect_success 'status -s (status.showUntrackedFiles normal)' '
420 git config status.showuntrackedfiles normal
421 git status -s >output &&
422 test_cmp expect output
425 cat >expect <<EOF
426 # On branch master
427 # Changes to be committed:
428 # (use "git reset HEAD <file>..." to unstage)
430 # new file: dir2/added
432 # Changes not staged for commit:
433 # (use "git add <file>..." to update what will be committed)
434 # (use "git checkout -- <file>..." to discard changes in working directory)
436 # modified: dir1/modified
438 # Untracked files:
439 # (use "git add <file>..." to include in what will be committed)
441 # dir1/untracked
442 # dir2/modified
443 # dir2/untracked
444 # dir3/untracked1
445 # dir3/untracked2
446 # expect
447 # output
448 # untracked
450 test_expect_success 'status -uall' '
451 git status -uall >output &&
452 test_i18ncmp expect output
455 test_expect_success 'status (status.showUntrackedFiles all)' '
456 git config status.showuntrackedfiles all
457 test_when_finished "git config --unset status.showuntrackedfiles" &&
458 git status >output &&
459 test_i18ncmp expect output
462 test_expect_success 'teardown dir3' '
463 rm -rf dir3
466 cat >expect <<EOF
467 M dir1/modified
468 A dir2/added
469 ?? dir1/untracked
470 ?? dir2/modified
471 ?? dir2/untracked
472 ?? expect
473 ?? output
474 ?? untracked
476 test_expect_success 'status -s -uall' '
477 git config --unset status.showuntrackedfiles
478 git status -s -uall >output &&
479 test_cmp expect output
481 test_expect_success 'status -s (status.showUntrackedFiles all)' '
482 git config status.showuntrackedfiles all
483 git status -s >output &&
484 rm -rf dir3 &&
485 git config --unset status.showuntrackedfiles &&
486 test_cmp expect output
489 cat >expect <<\EOF
490 # On branch master
491 # Changes to be committed:
492 # (use "git reset HEAD <file>..." to unstage)
494 # new file: ../dir2/added
496 # Changes not staged for commit:
497 # (use "git add <file>..." to update what will be committed)
498 # (use "git checkout -- <file>..." to discard changes in working directory)
500 # modified: modified
502 # Untracked files:
503 # (use "git add <file>..." to include in what will be committed)
505 # untracked
506 # ../dir2/modified
507 # ../dir2/untracked
508 # ../expect
509 # ../output
510 # ../untracked
513 test_expect_success 'status with relative paths' '
514 (cd dir1 && git status) >output &&
515 test_i18ncmp expect output
518 cat >expect <<\EOF
519 M modified
520 A ../dir2/added
521 ?? untracked
522 ?? ../dir2/modified
523 ?? ../dir2/untracked
524 ?? ../expect
525 ?? ../output
526 ?? ../untracked
528 test_expect_success 'status -s with relative paths' '
530 (cd dir1 && git status -s) >output &&
531 test_cmp expect output
535 cat >expect <<\EOF
536 M dir1/modified
537 A dir2/added
538 ?? dir1/untracked
539 ?? dir2/modified
540 ?? dir2/untracked
541 ?? expect
542 ?? output
543 ?? untracked
546 test_expect_success 'status --porcelain ignores relative paths setting' '
548 (cd dir1 && git status --porcelain) >output &&
549 test_cmp expect output
553 test_expect_success 'setup unique colors' '
555 git config status.color.untracked blue &&
556 git config status.color.branch green
560 cat >expect <<\EOF
561 # On branch <GREEN>master<RESET>
562 # Changes to be committed:
563 # (use "git reset HEAD <file>..." to unstage)
565 # <GREEN>new file: dir2/added<RESET>
567 # Changes not staged for commit:
568 # (use "git add <file>..." to update what will be committed)
569 # (use "git checkout -- <file>..." to discard changes in working directory)
571 # <RED>modified: dir1/modified<RESET>
573 # Untracked files:
574 # (use "git add <file>..." to include in what will be committed)
576 # <BLUE>dir1/untracked<RESET>
577 # <BLUE>dir2/modified<RESET>
578 # <BLUE>dir2/untracked<RESET>
579 # <BLUE>expect<RESET>
580 # <BLUE>output<RESET>
581 # <BLUE>untracked<RESET>
584 test_expect_success 'status with color.ui' '
585 git config color.ui always &&
586 test_when_finished "git config --unset color.ui" &&
587 git status | test_decode_color >output &&
588 test_i18ncmp expect output
591 test_expect_success 'status with color.status' '
592 git config color.status always &&
593 test_when_finished "git config --unset color.status" &&
594 git status | test_decode_color >output &&
595 test_i18ncmp expect output
598 cat >expect <<\EOF
599 <RED>M<RESET> dir1/modified
600 <GREEN>A<RESET> dir2/added
601 <BLUE>??<RESET> dir1/untracked
602 <BLUE>??<RESET> dir2/modified
603 <BLUE>??<RESET> dir2/untracked
604 <BLUE>??<RESET> expect
605 <BLUE>??<RESET> output
606 <BLUE>??<RESET> untracked
609 test_expect_success 'status -s with color.ui' '
611 git config color.ui always &&
612 git status -s | test_decode_color >output &&
613 test_cmp expect output
617 test_expect_success 'status -s with color.status' '
619 git config --unset color.ui &&
620 git config color.status always &&
621 git status -s | test_decode_color >output &&
622 test_cmp expect output
626 cat >expect <<\EOF
627 ## <GREEN>master<RESET>
628 <RED>M<RESET> dir1/modified
629 <GREEN>A<RESET> dir2/added
630 <BLUE>??<RESET> dir1/untracked
631 <BLUE>??<RESET> dir2/modified
632 <BLUE>??<RESET> dir2/untracked
633 <BLUE>??<RESET> expect
634 <BLUE>??<RESET> output
635 <BLUE>??<RESET> untracked
638 test_expect_success 'status -s -b with color.status' '
640 git status -s -b | test_decode_color >output &&
641 test_cmp expect output
645 cat >expect <<\EOF
646 M dir1/modified
647 A dir2/added
648 ?? dir1/untracked
649 ?? dir2/modified
650 ?? dir2/untracked
651 ?? expect
652 ?? output
653 ?? untracked
656 test_expect_success 'status --porcelain ignores color.ui' '
658 git config --unset color.status &&
659 git config color.ui always &&
660 git status --porcelain | test_decode_color >output &&
661 test_cmp expect output
665 test_expect_success 'status --porcelain ignores color.status' '
667 git config --unset color.ui &&
668 git config color.status always &&
669 git status --porcelain | test_decode_color >output &&
670 test_cmp expect output
674 # recover unconditionally from color tests
675 git config --unset color.status
676 git config --unset color.ui
678 test_expect_success 'status --porcelain ignores -b' '
680 git status --porcelain -b >output &&
681 test_cmp expect output
685 cat >expect <<\EOF
686 # On branch master
687 # Changes to be committed:
688 # (use "git reset HEAD <file>..." to unstage)
690 # new file: dir2/added
692 # Changes not staged for commit:
693 # (use "git add <file>..." to update what will be committed)
694 # (use "git checkout -- <file>..." to discard changes in working directory)
696 # modified: dir1/modified
698 # Untracked files:
699 # (use "git add <file>..." to include in what will be committed)
701 # dir1/untracked
702 # dir2/modified
703 # dir2/untracked
704 # expect
705 # output
706 # untracked
710 test_expect_success 'status without relative paths' '
712 git config status.relativePaths false &&
713 test_when_finished "git config --unset status.relativePaths" &&
714 (cd dir1 && git status) >output &&
715 test_i18ncmp expect output
719 cat >expect <<\EOF
720 M dir1/modified
721 A dir2/added
722 ?? dir1/untracked
723 ?? dir2/modified
724 ?? dir2/untracked
725 ?? expect
726 ?? output
727 ?? untracked
730 test_expect_success 'status -s without relative paths' '
732 git config status.relativePaths false &&
733 test_when_finished "git config --unset status.relativePaths" &&
734 (cd dir1 && git status -s) >output &&
735 test_cmp expect output
739 cat <<EOF >expect
740 # On branch master
741 # Changes to be committed:
742 # (use "git reset HEAD <file>..." to unstage)
744 # modified: dir1/modified
746 # Untracked files:
747 # (use "git add <file>..." to include in what will be committed)
749 # dir1/untracked
750 # dir2/
751 # expect
752 # output
753 # untracked
755 test_expect_success 'dry-run of partial commit excluding new file in index' '
756 git commit --dry-run dir1/modified >output &&
757 test_i18ncmp expect output
760 cat >expect <<EOF
761 :100644 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 M dir1/modified
763 test_expect_success 'status refreshes the index' '
764 touch dir2/added &&
765 git status &&
766 git diff-files >output &&
767 test_cmp expect output
770 test_expect_success 'setup status submodule summary' '
771 test_create_repo sm && (
772 cd sm &&
773 >foo &&
774 git add foo &&
775 git commit -m "Add foo"
776 ) &&
777 git add sm
780 cat >expect <<EOF
781 # On branch master
782 # Changes to be committed:
783 # (use "git reset HEAD <file>..." to unstage)
785 # new file: dir2/added
786 # new file: sm
788 # Changes not staged for commit:
789 # (use "git add <file>..." to update what will be committed)
790 # (use "git checkout -- <file>..." to discard changes in working directory)
792 # modified: dir1/modified
794 # Untracked files:
795 # (use "git add <file>..." to include in what will be committed)
797 # dir1/untracked
798 # dir2/modified
799 # dir2/untracked
800 # expect
801 # output
802 # untracked
804 test_expect_success 'status submodule summary is disabled by default' '
805 git status >output &&
806 test_i18ncmp expect output
809 # we expect the same as the previous test
810 test_expect_success 'status --untracked-files=all does not show submodule' '
811 git status --untracked-files=all >output &&
812 test_i18ncmp expect output
815 cat >expect <<EOF
816 M dir1/modified
817 A dir2/added
818 A sm
819 ?? dir1/untracked
820 ?? dir2/modified
821 ?? dir2/untracked
822 ?? expect
823 ?? output
824 ?? untracked
826 test_expect_success 'status -s submodule summary is disabled by default' '
827 git status -s >output &&
828 test_cmp expect output
831 # we expect the same as the previous test
832 test_expect_success 'status -s --untracked-files=all does not show submodule' '
833 git status -s --untracked-files=all >output &&
834 test_cmp expect output
837 head=$(cd sm && git rev-parse --short=7 --verify HEAD)
839 cat >expect <<EOF
840 # On branch master
841 # Changes to be committed:
842 # (use "git reset HEAD <file>..." to unstage)
844 # new file: dir2/added
845 # new file: sm
847 # Changes not staged for commit:
848 # (use "git add <file>..." to update what will be committed)
849 # (use "git checkout -- <file>..." to discard changes in working directory)
851 # modified: dir1/modified
853 # Submodule changes to be committed:
855 # * sm 0000000...$head (1):
856 # > Add foo
858 # Untracked files:
859 # (use "git add <file>..." to include in what will be committed)
861 # dir1/untracked
862 # dir2/modified
863 # dir2/untracked
864 # expect
865 # output
866 # untracked
868 test_expect_success 'status submodule summary' '
869 git config status.submodulesummary 10 &&
870 git status >output &&
871 test_i18ncmp expect output
874 cat >expect <<EOF
875 M dir1/modified
876 A dir2/added
877 A sm
878 ?? dir1/untracked
879 ?? dir2/modified
880 ?? dir2/untracked
881 ?? expect
882 ?? output
883 ?? untracked
885 test_expect_success 'status -s submodule summary' '
886 git status -s >output &&
887 test_cmp expect output
890 cat >expect <<EOF
891 # On branch master
892 # Changes not staged for commit:
893 # (use "git add <file>..." to update what will be committed)
894 # (use "git checkout -- <file>..." to discard changes in working directory)
896 # modified: dir1/modified
898 # Untracked files:
899 # (use "git add <file>..." to include in what will be committed)
901 # dir1/untracked
902 # dir2/modified
903 # dir2/untracked
904 # expect
905 # output
906 # untracked
907 no changes added to commit (use "git add" and/or "git commit -a")
909 test_expect_success 'status submodule summary (clean submodule): commit' '
910 git commit -m "commit submodule" &&
911 git config status.submodulesummary 10 &&
912 test_must_fail git commit --dry-run >output &&
913 test_i18ncmp expect output &&
914 git status >output &&
915 test_i18ncmp expect output
918 cat >expect <<EOF
919 M dir1/modified
920 ?? dir1/untracked
921 ?? dir2/modified
922 ?? dir2/untracked
923 ?? expect
924 ?? output
925 ?? untracked
927 test_expect_success 'status -s submodule summary (clean submodule)' '
928 git status -s >output &&
929 test_cmp expect output
932 test_expect_success 'status -z implies porcelain' '
933 git status --porcelain |
934 perl -pe "s/\012/\000/g" >expect &&
935 git status -z >output &&
936 test_cmp expect output
939 cat >expect <<EOF
940 # On branch master
941 # Changes to be committed:
942 # (use "git reset HEAD^1 <file>..." to unstage)
944 # new file: dir2/added
945 # new file: sm
947 # Changes not staged for commit:
948 # (use "git add <file>..." to update what will be committed)
949 # (use "git checkout -- <file>..." to discard changes in working directory)
951 # modified: dir1/modified
953 # Submodule changes to be committed:
955 # * sm 0000000...$head (1):
956 # > Add foo
958 # Untracked files:
959 # (use "git add <file>..." to include in what will be committed)
961 # dir1/untracked
962 # dir2/modified
963 # dir2/untracked
964 # expect
965 # output
966 # untracked
968 test_expect_success 'commit --dry-run submodule summary (--amend)' '
969 git config status.submodulesummary 10 &&
970 git commit --dry-run --amend >output &&
971 test_i18ncmp expect output
974 test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
976 chmod a-w .git &&
977 # make dir1/tracked stat-dirty
978 >dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
979 git status -s >output &&
980 ! grep dir1/tracked output &&
981 # make sure "status" succeeded without writing index out
982 git diff-files | grep dir1/tracked
984 status=$?
985 chmod 775 .git
986 (exit $status)
989 (cd sm && echo > bar && git add bar && git commit -q -m 'Add bar') && git add sm
990 new_head=$(cd sm && git rev-parse --short=7 --verify HEAD)
991 touch .gitmodules
993 cat > expect << EOF
994 # On branch master
995 # Changes to be committed:
996 # (use "git reset HEAD <file>..." to unstage)
998 # modified: sm
1000 # Changes not staged for commit:
1001 # (use "git add <file>..." to update what will be committed)
1002 # (use "git checkout -- <file>..." to discard changes in working directory)
1004 # modified: dir1/modified
1006 # Submodule changes to be committed:
1008 # * sm $head...$new_head (1):
1009 # > Add bar
1011 # Untracked files:
1012 # (use "git add <file>..." to include in what will be committed)
1014 # .gitmodules
1015 # dir1/untracked
1016 # dir2/modified
1017 # dir2/untracked
1018 # expect
1019 # output
1020 # untracked
1023 test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
1024 echo modified sm/untracked &&
1025 git status --ignore-submodules=untracked >output &&
1026 test_i18ncmp expect output
1029 test_expect_success '.gitmodules ignore=untracked suppresses submodules with untracked content' '
1030 git config diff.ignoreSubmodules dirty &&
1031 git status >output &&
1032 test_i18ncmp expect output &&
1033 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1034 git config --add -f .gitmodules submodule.subname.path sm &&
1035 git status >output &&
1036 test_i18ncmp expect output &&
1037 git config -f .gitmodules --remove-section submodule.subname &&
1038 git config --unset diff.ignoreSubmodules
1041 test_expect_success '.git/config ignore=untracked suppresses submodules with untracked content' '
1042 git config --add -f .gitmodules submodule.subname.ignore none &&
1043 git config --add -f .gitmodules submodule.subname.path sm &&
1044 git config --add submodule.subname.ignore untracked &&
1045 git config --add submodule.subname.path sm &&
1046 git status >output &&
1047 test_i18ncmp expect output &&
1048 git config --remove-section submodule.subname &&
1049 git config --remove-section -f .gitmodules submodule.subname
1052 test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
1053 git status --ignore-submodules=dirty >output &&
1054 test_i18ncmp expect output
1057 test_expect_success '.gitmodules ignore=dirty suppresses submodules with untracked content' '
1058 git config diff.ignoreSubmodules dirty &&
1059 git status >output &&
1060 ! test -s actual &&
1061 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1062 git config --add -f .gitmodules submodule.subname.path sm &&
1063 git status >output &&
1064 test_i18ncmp expect output &&
1065 git config -f .gitmodules --remove-section submodule.subname &&
1066 git config --unset diff.ignoreSubmodules
1069 test_expect_success '.git/config ignore=dirty suppresses submodules with untracked content' '
1070 git config --add -f .gitmodules submodule.subname.ignore none &&
1071 git config --add -f .gitmodules submodule.subname.path sm &&
1072 git config --add submodule.subname.ignore dirty &&
1073 git config --add submodule.subname.path sm &&
1074 git status >output &&
1075 test_i18ncmp expect output &&
1076 git config --remove-section submodule.subname &&
1077 git config -f .gitmodules --remove-section submodule.subname
1080 test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
1081 echo modified >sm/foo &&
1082 git status --ignore-submodules=dirty >output &&
1083 test_i18ncmp expect output
1086 test_expect_success '.gitmodules ignore=dirty suppresses submodules with modified content' '
1087 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1088 git config --add -f .gitmodules submodule.subname.path sm &&
1089 git status >output &&
1090 test_i18ncmp expect output &&
1091 git config -f .gitmodules --remove-section submodule.subname
1094 test_expect_success '.git/config ignore=dirty suppresses submodules with modified content' '
1095 git config --add -f .gitmodules submodule.subname.ignore none &&
1096 git config --add -f .gitmodules submodule.subname.path sm &&
1097 git config --add submodule.subname.ignore dirty &&
1098 git config --add submodule.subname.path sm &&
1099 git status >output &&
1100 test_i18ncmp expect output &&
1101 git config --remove-section submodule.subname &&
1102 git config -f .gitmodules --remove-section submodule.subname
1105 cat > expect << EOF
1106 # On branch master
1107 # Changes to be committed:
1108 # (use "git reset HEAD <file>..." to unstage)
1110 # modified: sm
1112 # Changes not staged for commit:
1113 # (use "git add <file>..." to update what will be committed)
1114 # (use "git checkout -- <file>..." to discard changes in working directory)
1115 # (commit or discard the untracked or modified content in submodules)
1117 # modified: dir1/modified
1118 # modified: sm (modified content)
1120 # Submodule changes to be committed:
1122 # * sm $head...$new_head (1):
1123 # > Add bar
1125 # Untracked files:
1126 # (use "git add <file>..." to include in what will be committed)
1128 # .gitmodules
1129 # dir1/untracked
1130 # dir2/modified
1131 # dir2/untracked
1132 # expect
1133 # output
1134 # untracked
1137 test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
1138 git status --ignore-submodules=untracked > output &&
1139 test_i18ncmp expect output
1142 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules with modified content" '
1143 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1144 git config --add -f .gitmodules submodule.subname.path sm &&
1145 git status >output &&
1146 test_i18ncmp expect output &&
1147 git config -f .gitmodules --remove-section submodule.subname
1150 test_expect_success ".git/config ignore=untracked doesn't suppress submodules with modified content" '
1151 git config --add -f .gitmodules submodule.subname.ignore none &&
1152 git config --add -f .gitmodules submodule.subname.path sm &&
1153 git config --add submodule.subname.ignore untracked &&
1154 git config --add submodule.subname.path sm &&
1155 git status >output &&
1156 test_i18ncmp expect output &&
1157 git config --remove-section submodule.subname &&
1158 git config -f .gitmodules --remove-section submodule.subname
1161 head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --verify HEAD)
1163 cat > expect << EOF
1164 # On branch master
1165 # Changes to be committed:
1166 # (use "git reset HEAD <file>..." to unstage)
1168 # modified: sm
1170 # Changes not staged for commit:
1171 # (use "git add <file>..." to update what will be committed)
1172 # (use "git checkout -- <file>..." to discard changes in working directory)
1174 # modified: dir1/modified
1175 # modified: sm (new commits)
1177 # Submodule changes to be committed:
1179 # * sm $head...$new_head (1):
1180 # > Add bar
1182 # Submodules changed but not updated:
1184 # * sm $new_head...$head2 (1):
1185 # > 2nd commit
1187 # Untracked files:
1188 # (use "git add <file>..." to include in what will be committed)
1190 # .gitmodules
1191 # dir1/untracked
1192 # dir2/modified
1193 # dir2/untracked
1194 # expect
1195 # output
1196 # untracked
1199 test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
1200 git status --ignore-submodules=untracked > output &&
1201 test_i18ncmp expect output
1204 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule summary" '
1205 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1206 git config --add -f .gitmodules submodule.subname.path sm &&
1207 git status >output &&
1208 test_i18ncmp expect output &&
1209 git config -f .gitmodules --remove-section submodule.subname
1212 test_expect_success ".git/config ignore=untracked doesn't suppress submodule summary" '
1213 git config --add -f .gitmodules submodule.subname.ignore none &&
1214 git config --add -f .gitmodules submodule.subname.path sm &&
1215 git config --add submodule.subname.ignore untracked &&
1216 git config --add submodule.subname.path sm &&
1217 git status >output &&
1218 test_i18ncmp expect output &&
1219 git config --remove-section submodule.subname &&
1220 git config -f .gitmodules --remove-section submodule.subname
1223 test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
1224 git status --ignore-submodules=dirty > output &&
1225 test_i18ncmp expect output
1227 test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary" '
1228 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1229 git config --add -f .gitmodules submodule.subname.path sm &&
1230 git status >output &&
1231 test_i18ncmp expect output &&
1232 git config -f .gitmodules --remove-section submodule.subname
1235 test_expect_success ".git/config ignore=dirty doesn't suppress submodule summary" '
1236 git config --add -f .gitmodules submodule.subname.ignore none &&
1237 git config --add -f .gitmodules submodule.subname.path sm &&
1238 git config --add submodule.subname.ignore dirty &&
1239 git config --add submodule.subname.path sm &&
1240 git status >output &&
1241 test_i18ncmp expect output &&
1242 git config --remove-section submodule.subname &&
1243 git config -f .gitmodules --remove-section submodule.subname
1246 cat > expect << EOF
1247 # On branch master
1248 # Changes not staged for commit:
1249 # (use "git add <file>..." to update what will be committed)
1250 # (use "git checkout -- <file>..." to discard changes in working directory)
1252 # modified: dir1/modified
1254 # Untracked files:
1255 # (use "git add <file>..." to include in what will be committed)
1257 # .gitmodules
1258 # dir1/untracked
1259 # dir2/modified
1260 # dir2/untracked
1261 # expect
1262 # output
1263 # untracked
1264 no changes added to commit (use "git add" and/or "git commit -a")
1267 test_expect_success "--ignore-submodules=all suppresses submodule summary" '
1268 git status --ignore-submodules=all > output &&
1269 test_i18ncmp expect output
1272 test_expect_failure '.gitmodules ignore=all suppresses submodule summary' '
1273 git config --add -f .gitmodules submodule.subname.ignore all &&
1274 git config --add -f .gitmodules submodule.subname.path sm &&
1275 git status > output &&
1276 test_cmp expect output &&
1277 git config -f .gitmodules --remove-section submodule.subname
1280 test_expect_failure '.git/config ignore=all suppresses submodule summary' '
1281 git config --add -f .gitmodules submodule.subname.ignore none &&
1282 git config --add -f .gitmodules submodule.subname.path sm &&
1283 git config --add submodule.subname.ignore all &&
1284 git config --add submodule.subname.path sm &&
1285 git status > output &&
1286 test_cmp expect output &&
1287 git config --remove-section submodule.subname &&
1288 git config -f .gitmodules --remove-section submodule.subname
1291 test_done