t7508: .gitignore 'expect' and 'output' files
[git/mingw.git] / t / t7508-status.sh
blob514df671c9b19c5c8d8cc0b18ff3d98649534375
1 #!/bin/sh
3 # Copyright (c) 2007 Johannes E. Schindelin
6 test_description='git status'
8 . ./test-lib.sh
10 test_expect_success 'status -h in broken repository' '
11 git config --global advice.statusuoption false &&
12 mkdir broken &&
13 test_when_finished "rm -fr broken" &&
15 cd broken &&
16 git init &&
17 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
18 test_expect_code 129 git status -h >usage 2>&1
19 ) &&
20 test_i18ngrep "[Uu]sage" broken/usage
23 test_expect_success 'commit -h in broken repository' '
24 mkdir broken &&
25 test_when_finished "rm -fr broken" &&
27 cd broken &&
28 git init &&
29 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
30 test_expect_code 129 git commit -h >usage 2>&1
31 ) &&
32 test_i18ngrep "[Uu]sage" broken/usage
35 test_expect_success 'setup' '
36 : >tracked &&
37 : >modified &&
38 mkdir dir1 &&
39 : >dir1/tracked &&
40 : >dir1/modified &&
41 mkdir dir2 &&
42 : >dir1/tracked &&
43 : >dir1/modified &&
44 git add . &&
46 git status >output &&
48 test_tick &&
49 git commit -m initial &&
50 : >untracked &&
51 : >dir1/untracked &&
52 : >dir2/untracked &&
53 echo 1 >dir1/modified &&
54 echo 2 >dir2/modified &&
55 echo 3 >dir2/added &&
56 git add dir2/added
59 test_expect_success 'status (1)' '
60 test_i18ngrep "use \"git rm --cached <file>\.\.\.\" to unstage" output
63 strip_comments () {
64 tab=' '
65 sed "s/^\# //; s/^\#$//; s/^#$tab/$tab/" <"$1" >"$1".tmp &&
66 rm "$1" && mv "$1".tmp "$1"
69 cat >.gitignore <<\EOF
70 .gitignore
71 expect*
72 output*
73 EOF
75 test_expect_success 'status --column' '
76 cat >expect <<\EOF &&
77 # On branch master
78 # Changes to be committed:
79 # (use "git reset HEAD <file>..." to unstage)
81 # new file: dir2/added
83 # Changes not staged for commit:
84 # (use "git add <file>..." to update what will be committed)
85 # (use "git checkout -- <file>..." to discard changes in working directory)
87 # modified: dir1/modified
89 # Untracked files:
90 # (use "git add <file>..." to include in what will be committed)
92 # dir1/untracked dir2/untracked
93 # dir2/modified untracked
95 EOF
96 COLUMNS=50 git -c status.displayCommentPrefix=true status --column="column dense" >output &&
97 test_i18ncmp expect output
100 test_expect_success 'status --column status.displayCommentPrefix=false' '
101 strip_comments expect &&
102 COLUMNS=49 git -c status.displayCommentPrefix=false status --column="column dense" >output &&
103 test_i18ncmp expect output
106 cat >expect <<\EOF
107 # On branch master
108 # Changes to be committed:
109 # (use "git reset HEAD <file>..." to unstage)
111 # new file: dir2/added
113 # Changes not staged for commit:
114 # (use "git add <file>..." to update what will be committed)
115 # (use "git checkout -- <file>..." to discard changes in working directory)
117 # modified: dir1/modified
119 # Untracked files:
120 # (use "git add <file>..." to include in what will be committed)
122 # dir1/untracked
123 # dir2/modified
124 # dir2/untracked
125 # untracked
129 test_expect_success 'status with status.displayCommentPrefix=true' '
130 git -c status.displayCommentPrefix=true status >output &&
131 test_i18ncmp expect output
134 test_expect_success 'status with status.displayCommentPrefix=false' '
135 strip_comments expect &&
136 git -c status.displayCommentPrefix=false status >output &&
137 test_i18ncmp expect output
140 test_expect_success 'setup fake editor' '
141 cat >.git/editor <<-\EOF &&
142 #! /bin/sh
143 cp "$1" output
145 chmod 755 .git/editor
148 commit_template_commented () {
150 EDITOR=.git/editor &&
151 export EDITOR &&
152 # Fails due to empty message
153 test_must_fail git commit
154 ) &&
155 ! grep '^[^#]' output
158 test_expect_success 'commit ignores status.displayCommentPrefix=false in COMMIT_EDITMSG' '
159 commit_template_commented
162 cat >expect <<\EOF
163 On branch master
164 Changes to be committed:
165 new file: dir2/added
167 Changes not staged for commit:
168 modified: dir1/modified
170 Untracked files:
171 dir1/untracked
172 dir2/modified
173 dir2/untracked
174 untracked
178 test_expect_success 'status (advice.statusHints false)' '
179 test_config advice.statusHints false &&
180 git status >output &&
181 test_i18ncmp expect output
185 cat >expect <<\EOF
186 M dir1/modified
187 A dir2/added
188 ?? dir1/untracked
189 ?? dir2/modified
190 ?? dir2/untracked
191 ?? untracked
194 test_expect_success 'status -s' '
196 git status -s >output &&
197 test_cmp expect output
201 test_expect_success 'status with gitignore' '
203 echo ".gitignore" &&
204 echo "expect" &&
205 echo "output" &&
206 echo "untracked"
207 } >.gitignore &&
209 cat >expect <<-\EOF &&
210 M dir1/modified
211 A dir2/added
212 ?? dir2/modified
214 git status -s >output &&
215 test_cmp expect output &&
217 cat >expect <<-\EOF &&
218 M dir1/modified
219 A dir2/added
220 ?? dir2/modified
221 !! .gitignore
222 !! dir1/untracked
223 !! dir2/untracked
224 !! expect
225 !! output
226 !! untracked
228 git status -s --ignored >output &&
229 test_cmp expect output &&
231 cat >expect <<\EOF &&
232 On branch master
233 Changes to be committed:
234 (use "git reset HEAD <file>..." to unstage)
236 new file: dir2/added
238 Changes not staged for commit:
239 (use "git add <file>..." to update what will be committed)
240 (use "git checkout -- <file>..." to discard changes in working directory)
242 modified: dir1/modified
244 Untracked files:
245 (use "git add <file>..." to include in what will be committed)
247 dir2/modified
249 Ignored files:
250 (use "git add -f <file>..." to include in what will be committed)
252 .gitignore
253 dir1/untracked
254 dir2/untracked
255 expect
256 output
257 untracked
260 git status --ignored >output &&
261 test_i18ncmp expect output
264 test_expect_success 'status with gitignore (nothing untracked)' '
266 echo ".gitignore" &&
267 echo "expect" &&
268 echo "dir2/modified" &&
269 echo "output" &&
270 echo "untracked"
271 } >.gitignore &&
273 cat >expect <<-\EOF &&
274 M dir1/modified
275 A dir2/added
277 git status -s >output &&
278 test_cmp expect output &&
280 cat >expect <<-\EOF &&
281 M dir1/modified
282 A dir2/added
283 !! .gitignore
284 !! dir1/untracked
285 !! dir2/modified
286 !! dir2/untracked
287 !! expect
288 !! output
289 !! untracked
291 git status -s --ignored >output &&
292 test_cmp expect output &&
294 cat >expect <<\EOF &&
295 On branch master
296 Changes to be committed:
297 (use "git reset HEAD <file>..." to unstage)
299 new file: dir2/added
301 Changes not staged for commit:
302 (use "git add <file>..." to update what will be committed)
303 (use "git checkout -- <file>..." to discard changes in working directory)
305 modified: dir1/modified
307 Ignored files:
308 (use "git add -f <file>..." to include in what will be committed)
310 .gitignore
311 dir1/untracked
312 dir2/modified
313 dir2/untracked
314 expect
315 output
316 untracked
319 git status --ignored >output &&
320 test_i18ncmp expect output
323 cat >.gitignore <<\EOF
324 .gitignore
325 expect*
326 output*
329 cat >expect <<\EOF
330 ## master
331 M dir1/modified
332 A dir2/added
333 ?? dir1/untracked
334 ?? dir2/modified
335 ?? dir2/untracked
336 ?? untracked
339 test_expect_success 'status -s -b' '
341 git status -s -b >output &&
342 test_cmp expect output
346 test_expect_success 'status -s -z -b' '
347 tr "\\n" Q <expect >expect.q &&
348 mv expect.q expect &&
349 git status -s -z -b >output &&
350 nul_to_q <output >output.q &&
351 mv output.q output &&
352 test_cmp expect output
355 test_expect_success 'setup dir3' '
356 mkdir dir3 &&
357 : >dir3/untracked1 &&
358 : >dir3/untracked2
361 test_expect_success 'status -uno' '
362 cat >expect <<EOF &&
363 On branch master
364 Changes to be committed:
365 (use "git reset HEAD <file>..." to unstage)
367 new file: dir2/added
369 Changes not staged for commit:
370 (use "git add <file>..." to update what will be committed)
371 (use "git checkout -- <file>..." to discard changes in working directory)
373 modified: dir1/modified
375 Untracked files not listed (use -u option to show untracked files)
377 git status -uno >output &&
378 test_i18ncmp expect output
381 test_expect_success 'status (status.showUntrackedFiles no)' '
382 test_config status.showuntrackedfiles no &&
383 git status >output &&
384 test_i18ncmp expect output
387 test_expect_success 'status -uno (advice.statusHints false)' '
388 cat >expect <<EOF &&
389 On branch master
390 Changes to be committed:
391 new file: dir2/added
393 Changes not staged for commit:
394 modified: dir1/modified
396 Untracked files not listed
398 test_config advice.statusHints false &&
399 git status -uno >output &&
400 test_i18ncmp expect output
403 cat >expect << EOF
404 M dir1/modified
405 A dir2/added
407 test_expect_success 'status -s -uno' '
408 git status -s -uno >output &&
409 test_cmp expect output
412 test_expect_success 'status -s (status.showUntrackedFiles no)' '
413 git config status.showuntrackedfiles no
414 git status -s >output &&
415 test_cmp expect output
418 test_expect_success 'status -unormal' '
419 cat >expect <<EOF &&
420 On branch master
421 Changes to be committed:
422 (use "git reset HEAD <file>..." to unstage)
424 new file: dir2/added
426 Changes not staged for commit:
427 (use "git add <file>..." to update what will be committed)
428 (use "git checkout -- <file>..." to discard changes in working directory)
430 modified: dir1/modified
432 Untracked files:
433 (use "git add <file>..." to include in what will be committed)
435 dir1/untracked
436 dir2/modified
437 dir2/untracked
438 dir3/
439 untracked
442 git status -unormal >output &&
443 test_i18ncmp expect output
446 test_expect_success 'status (status.showUntrackedFiles normal)' '
447 test_config status.showuntrackedfiles normal
448 git status >output &&
449 test_i18ncmp expect output
452 cat >expect <<EOF
453 M dir1/modified
454 A dir2/added
455 ?? dir1/untracked
456 ?? dir2/modified
457 ?? dir2/untracked
458 ?? dir3/
459 ?? untracked
461 test_expect_success 'status -s -unormal' '
462 git status -s -unormal >output &&
463 test_cmp expect output
466 test_expect_success 'status -s (status.showUntrackedFiles normal)' '
467 git config status.showuntrackedfiles normal
468 git status -s >output &&
469 test_cmp expect output
472 test_expect_success 'status -uall' '
473 cat >expect <<EOF &&
474 On branch master
475 Changes to be committed:
476 (use "git reset HEAD <file>..." to unstage)
478 new file: dir2/added
480 Changes not staged for commit:
481 (use "git add <file>..." to update what will be committed)
482 (use "git checkout -- <file>..." to discard changes in working directory)
484 modified: dir1/modified
486 Untracked files:
487 (use "git add <file>..." to include in what will be committed)
489 dir1/untracked
490 dir2/modified
491 dir2/untracked
492 dir3/untracked1
493 dir3/untracked2
494 untracked
497 git status -uall >output &&
498 test_i18ncmp expect output
501 test_expect_success 'status (status.showUntrackedFiles all)' '
502 test_config status.showuntrackedfiles all
503 git status >output &&
504 test_i18ncmp expect output
507 test_expect_success 'teardown dir3' '
508 rm -rf dir3
511 cat >expect <<EOF
512 M dir1/modified
513 A dir2/added
514 ?? dir1/untracked
515 ?? dir2/modified
516 ?? dir2/untracked
517 ?? untracked
519 test_expect_success 'status -s -uall' '
520 git config --unset status.showuntrackedfiles
521 git status -s -uall >output &&
522 test_cmp expect output
524 test_expect_success 'status -s (status.showUntrackedFiles all)' '
525 test_config status.showuntrackedfiles all &&
526 git status -s >output &&
527 rm -rf dir3 &&
528 test_cmp expect output
531 test_expect_success 'status with relative paths' '
532 cat >expect <<\EOF &&
533 On branch master
534 Changes to be committed:
535 (use "git reset HEAD <file>..." to unstage)
537 new file: ../dir2/added
539 Changes not staged for commit:
540 (use "git add <file>..." to update what will be committed)
541 (use "git checkout -- <file>..." to discard changes in working directory)
543 modified: modified
545 Untracked files:
546 (use "git add <file>..." to include in what will be committed)
548 untracked
549 ../dir2/modified
550 ../dir2/untracked
551 ../untracked
554 (cd dir1 && git status) >output &&
555 test_i18ncmp expect output
558 cat >expect <<\EOF
559 M modified
560 A ../dir2/added
561 ?? untracked
562 ?? ../dir2/modified
563 ?? ../dir2/untracked
564 ?? ../untracked
566 test_expect_success 'status -s with relative paths' '
568 (cd dir1 && git status -s) >output &&
569 test_cmp expect output
573 cat >expect <<\EOF
574 M dir1/modified
575 A dir2/added
576 ?? dir1/untracked
577 ?? dir2/modified
578 ?? dir2/untracked
579 ?? untracked
582 test_expect_success 'status --porcelain ignores relative paths setting' '
584 (cd dir1 && git status --porcelain) >output &&
585 test_cmp expect output
589 test_expect_success 'setup unique colors' '
591 git config status.color.untracked blue &&
592 git config status.color.branch green
596 test_expect_success 'status with color.ui' '
597 cat >expect <<\EOF &&
598 On branch <GREEN>master<RESET>
599 Changes to be committed:
600 (use "git reset HEAD <file>..." to unstage)
602 <GREEN>new file: dir2/added<RESET>
604 Changes not staged for commit:
605 (use "git add <file>..." to update what will be committed)
606 (use "git checkout -- <file>..." to discard changes in working directory)
608 <RED>modified: dir1/modified<RESET>
610 Untracked files:
611 (use "git add <file>..." to include in what will be committed)
613 <BLUE>dir1/untracked<RESET>
614 <BLUE>dir2/modified<RESET>
615 <BLUE>dir2/untracked<RESET>
616 <BLUE>untracked<RESET>
619 test_config color.ui always &&
620 git status | test_decode_color >output &&
621 test_i18ncmp expect output
624 test_expect_success 'status with color.status' '
625 test_config color.status always &&
626 git status | test_decode_color >output &&
627 test_i18ncmp expect output
630 cat >expect <<\EOF
631 <RED>M<RESET> dir1/modified
632 <GREEN>A<RESET> dir2/added
633 <BLUE>??<RESET> dir1/untracked
634 <BLUE>??<RESET> dir2/modified
635 <BLUE>??<RESET> dir2/untracked
636 <BLUE>??<RESET> untracked
639 test_expect_success 'status -s with color.ui' '
641 git config color.ui always &&
642 git status -s | test_decode_color >output &&
643 test_cmp expect output
647 test_expect_success 'status -s with color.status' '
649 git config --unset color.ui &&
650 git config color.status always &&
651 git status -s | test_decode_color >output &&
652 test_cmp expect output
656 cat >expect <<\EOF
657 ## <GREEN>master<RESET>
658 <RED>M<RESET> dir1/modified
659 <GREEN>A<RESET> dir2/added
660 <BLUE>??<RESET> dir1/untracked
661 <BLUE>??<RESET> dir2/modified
662 <BLUE>??<RESET> dir2/untracked
663 <BLUE>??<RESET> untracked
666 test_expect_success 'status -s -b with color.status' '
668 git status -s -b | test_decode_color >output &&
669 test_cmp expect output
673 cat >expect <<\EOF
674 M dir1/modified
675 A dir2/added
676 ?? dir1/untracked
677 ?? dir2/modified
678 ?? dir2/untracked
679 ?? untracked
682 test_expect_success 'status --porcelain ignores color.ui' '
684 git config --unset color.status &&
685 git config color.ui always &&
686 git status --porcelain | test_decode_color >output &&
687 test_cmp expect output
691 test_expect_success 'status --porcelain ignores color.status' '
693 git config --unset color.ui &&
694 git config color.status always &&
695 git status --porcelain | test_decode_color >output &&
696 test_cmp expect output
700 # recover unconditionally from color tests
701 git config --unset color.status
702 git config --unset color.ui
704 test_expect_success 'status --porcelain respects -b' '
706 git status --porcelain -b >output &&
708 echo "## master" &&
709 cat expect
710 } >tmp &&
711 mv tmp expect &&
712 test_cmp expect output
718 test_expect_success 'status without relative paths' '
719 cat >expect <<\EOF &&
720 On branch master
721 Changes to be committed:
722 (use "git reset HEAD <file>..." to unstage)
724 new file: dir2/added
726 Changes not staged for commit:
727 (use "git add <file>..." to update what will be committed)
728 (use "git checkout -- <file>..." to discard changes in working directory)
730 modified: dir1/modified
732 Untracked files:
733 (use "git add <file>..." to include in what will be committed)
735 dir1/untracked
736 dir2/modified
737 dir2/untracked
738 untracked
741 test_config status.relativePaths false &&
742 (cd dir1 && git status) >output &&
743 test_i18ncmp expect output
747 cat >expect <<\EOF
748 M dir1/modified
749 A dir2/added
750 ?? dir1/untracked
751 ?? dir2/modified
752 ?? dir2/untracked
753 ?? untracked
756 test_expect_success 'status -s without relative paths' '
758 test_config status.relativePaths false &&
759 (cd dir1 && git status -s) >output &&
760 test_cmp expect output
764 test_expect_success 'dry-run of partial commit excluding new file in index' '
765 cat >expect <<EOF &&
766 On branch master
767 Changes to be committed:
768 (use "git reset HEAD <file>..." to unstage)
770 modified: dir1/modified
772 Untracked files:
773 (use "git add <file>..." to include in what will be committed)
775 dir1/untracked
776 dir2/
777 untracked
780 git commit --dry-run dir1/modified >output &&
781 test_i18ncmp expect output
784 cat >expect <<EOF
785 :100644 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0000000000000000000000000000000000000000 M dir1/modified
787 test_expect_success 'status refreshes the index' '
788 touch dir2/added &&
789 git status &&
790 git diff-files >output &&
791 test_cmp expect output
794 test_expect_success 'setup status submodule summary' '
795 test_create_repo sm && (
796 cd sm &&
797 >foo &&
798 git add foo &&
799 git commit -m "Add foo"
800 ) &&
801 git add sm
804 test_expect_success 'status submodule summary is disabled by default' '
805 cat >expect <<EOF &&
806 On branch master
807 Changes to be committed:
808 (use "git reset HEAD <file>..." to unstage)
810 new file: dir2/added
811 new file: sm
813 Changes not staged for commit:
814 (use "git add <file>..." to update what will be committed)
815 (use "git checkout -- <file>..." to discard changes in working directory)
817 modified: dir1/modified
819 Untracked files:
820 (use "git add <file>..." to include in what will be committed)
822 dir1/untracked
823 dir2/modified
824 dir2/untracked
825 untracked
828 git status >output &&
829 test_i18ncmp expect output
832 # we expect the same as the previous test
833 test_expect_success 'status --untracked-files=all does not show submodule' '
834 git status --untracked-files=all >output &&
835 test_i18ncmp expect output
838 cat >expect <<EOF
839 M dir1/modified
840 A dir2/added
841 A sm
842 ?? dir1/untracked
843 ?? dir2/modified
844 ?? dir2/untracked
845 ?? untracked
847 test_expect_success 'status -s submodule summary is disabled by default' '
848 git status -s >output &&
849 test_cmp expect output
852 # we expect the same as the previous test
853 test_expect_success 'status -s --untracked-files=all does not show submodule' '
854 git status -s --untracked-files=all >output &&
855 test_cmp expect output
858 head=$(cd sm && git rev-parse --short=7 --verify HEAD)
860 test_expect_success 'status submodule summary' '
861 cat >expect <<EOF &&
862 On branch master
863 Changes to be committed:
864 (use "git reset HEAD <file>..." to unstage)
866 new file: dir2/added
867 new file: sm
869 Changes not staged for commit:
870 (use "git add <file>..." to update what will be committed)
871 (use "git checkout -- <file>..." to discard changes in working directory)
873 modified: dir1/modified
875 Submodule changes to be committed:
877 * sm 0000000...$head (1):
878 > Add foo
880 Untracked files:
881 (use "git add <file>..." to include in what will be committed)
883 dir1/untracked
884 dir2/modified
885 dir2/untracked
886 untracked
889 git config status.submodulesummary 10 &&
890 git status >output &&
891 test_i18ncmp expect output
894 test_expect_success 'status submodule summary with status.displayCommentPrefix=false' '
895 strip_comments expect &&
896 git -c status.displayCommentPrefix=false status >output &&
897 test_i18ncmp expect output
900 test_expect_success 'commit with submodule summary ignores status.displayCommentPrefix' '
901 commit_template_commented
904 cat >expect <<EOF
905 M dir1/modified
906 A dir2/added
907 A sm
908 ?? dir1/untracked
909 ?? dir2/modified
910 ?? dir2/untracked
911 ?? untracked
913 test_expect_success 'status -s submodule summary' '
914 git status -s >output &&
915 test_cmp expect output
918 test_expect_success 'status submodule summary (clean submodule): commit' '
919 cat >expect <<EOF &&
920 On branch master
921 Changes not staged for commit:
922 (use "git add <file>..." to update what will be committed)
923 (use "git checkout -- <file>..." to discard changes in working directory)
925 modified: dir1/modified
927 Untracked files:
928 (use "git add <file>..." to include in what will be committed)
930 dir1/untracked
931 dir2/modified
932 dir2/untracked
933 untracked
935 no changes added to commit (use "git add" and/or "git commit -a")
937 git commit -m "commit submodule" &&
938 git config status.submodulesummary 10 &&
939 test_must_fail git commit --dry-run >output &&
940 test_i18ncmp expect output &&
941 git status >output &&
942 test_i18ncmp expect output
945 cat >expect <<EOF
946 M dir1/modified
947 ?? dir1/untracked
948 ?? dir2/modified
949 ?? dir2/untracked
950 ?? untracked
952 test_expect_success 'status -s submodule summary (clean submodule)' '
953 git status -s >output &&
954 test_cmp expect output
957 test_expect_success 'status -z implies porcelain' '
958 git status --porcelain |
959 perl -pe "s/\012/\000/g" >expect &&
960 git status -z >output &&
961 test_cmp expect output
964 test_expect_success 'commit --dry-run submodule summary (--amend)' '
965 cat >expect <<EOF &&
966 On branch master
967 Changes to be committed:
968 (use "git reset HEAD^1 <file>..." to unstage)
970 new file: dir2/added
971 new file: sm
973 Changes not staged for commit:
974 (use "git add <file>..." to update what will be committed)
975 (use "git checkout -- <file>..." to discard changes in working directory)
977 modified: dir1/modified
979 Submodule changes to be committed:
981 * sm 0000000...$head (1):
982 > Add foo
984 Untracked files:
985 (use "git add <file>..." to include in what will be committed)
987 dir1/untracked
988 dir2/modified
989 dir2/untracked
990 untracked
993 git config status.submodulesummary 10 &&
994 git commit --dry-run --amend >output &&
995 test_i18ncmp expect output
998 test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
1000 chmod a-w .git &&
1001 # make dir1/tracked stat-dirty
1002 >dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
1003 git status -s >output &&
1004 ! grep dir1/tracked output &&
1005 # make sure "status" succeeded without writing index out
1006 git diff-files | grep dir1/tracked
1008 status=$?
1009 chmod 775 .git
1010 (exit $status)
1013 (cd sm && echo > bar && git add bar && git commit -q -m 'Add bar') && git add sm
1014 new_head=$(cd sm && git rev-parse --short=7 --verify HEAD)
1015 touch .gitmodules
1017 test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
1018 cat > expect << EOF &&
1019 On branch master
1020 Changes to be committed:
1021 (use "git reset HEAD <file>..." to unstage)
1023 modified: sm
1025 Changes not staged for commit:
1026 (use "git add <file>..." to update what will be committed)
1027 (use "git checkout -- <file>..." to discard changes in working directory)
1029 modified: dir1/modified
1031 Submodule changes to be committed:
1033 * sm $head...$new_head (1):
1034 > Add bar
1036 Untracked files:
1037 (use "git add <file>..." to include in what will be committed)
1039 .gitmodules
1040 dir1/untracked
1041 dir2/modified
1042 dir2/untracked
1043 untracked
1046 echo modified sm/untracked &&
1047 git status --ignore-submodules=untracked >output &&
1048 test_i18ncmp expect output
1051 test_expect_success '.gitmodules ignore=untracked suppresses submodules with untracked content' '
1052 test_config diff.ignoreSubmodules dirty &&
1053 git status >output &&
1054 test_i18ncmp expect output &&
1055 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1056 git config --add -f .gitmodules submodule.subname.path sm &&
1057 git status >output &&
1058 test_i18ncmp expect output &&
1059 git config -f .gitmodules --remove-section submodule.subname
1062 test_expect_success '.git/config ignore=untracked suppresses submodules with untracked content' '
1063 git config --add -f .gitmodules submodule.subname.ignore none &&
1064 git config --add -f .gitmodules submodule.subname.path sm &&
1065 git config --add submodule.subname.ignore untracked &&
1066 git config --add submodule.subname.path sm &&
1067 git status >output &&
1068 test_i18ncmp expect output &&
1069 git config --remove-section submodule.subname &&
1070 git config --remove-section -f .gitmodules submodule.subname
1073 test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
1074 git status --ignore-submodules=dirty >output &&
1075 test_i18ncmp expect output
1078 test_expect_success '.gitmodules ignore=dirty suppresses submodules with untracked content' '
1079 test_config diff.ignoreSubmodules dirty &&
1080 git status >output &&
1081 ! test -s actual &&
1082 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1083 git config --add -f .gitmodules submodule.subname.path sm &&
1084 git status >output &&
1085 test_i18ncmp expect output &&
1086 git config -f .gitmodules --remove-section submodule.subname
1089 test_expect_success '.git/config ignore=dirty suppresses submodules with untracked content' '
1090 git config --add -f .gitmodules submodule.subname.ignore none &&
1091 git config --add -f .gitmodules submodule.subname.path sm &&
1092 git config --add submodule.subname.ignore dirty &&
1093 git config --add submodule.subname.path sm &&
1094 git status >output &&
1095 test_i18ncmp expect output &&
1096 git config --remove-section submodule.subname &&
1097 git config -f .gitmodules --remove-section submodule.subname
1100 test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
1101 echo modified >sm/foo &&
1102 git status --ignore-submodules=dirty >output &&
1103 test_i18ncmp expect output
1106 test_expect_success '.gitmodules ignore=dirty suppresses submodules with modified content' '
1107 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1108 git config --add -f .gitmodules submodule.subname.path sm &&
1109 git status >output &&
1110 test_i18ncmp expect output &&
1111 git config -f .gitmodules --remove-section submodule.subname
1114 test_expect_success '.git/config ignore=dirty suppresses submodules with modified content' '
1115 git config --add -f .gitmodules submodule.subname.ignore none &&
1116 git config --add -f .gitmodules submodule.subname.path sm &&
1117 git config --add submodule.subname.ignore dirty &&
1118 git config --add submodule.subname.path sm &&
1119 git status >output &&
1120 test_i18ncmp expect output &&
1121 git config --remove-section submodule.subname &&
1122 git config -f .gitmodules --remove-section submodule.subname
1125 test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
1126 cat > expect << EOF &&
1127 On branch master
1128 Changes to be committed:
1129 (use "git reset HEAD <file>..." to unstage)
1131 modified: sm
1133 Changes not staged for commit:
1134 (use "git add <file>..." to update what will be committed)
1135 (use "git checkout -- <file>..." to discard changes in working directory)
1136 (commit or discard the untracked or modified content in submodules)
1138 modified: dir1/modified
1139 modified: sm (modified content)
1141 Submodule changes to be committed:
1143 * sm $head...$new_head (1):
1144 > Add bar
1146 Untracked files:
1147 (use "git add <file>..." to include in what will be committed)
1149 .gitmodules
1150 dir1/untracked
1151 dir2/modified
1152 dir2/untracked
1153 untracked
1156 git status --ignore-submodules=untracked > output &&
1157 test_i18ncmp expect output
1160 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules with modified content" '
1161 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1162 git config --add -f .gitmodules submodule.subname.path sm &&
1163 git status >output &&
1164 test_i18ncmp expect output &&
1165 git config -f .gitmodules --remove-section submodule.subname
1168 test_expect_success ".git/config ignore=untracked doesn't suppress submodules with modified content" '
1169 git config --add -f .gitmodules submodule.subname.ignore none &&
1170 git config --add -f .gitmodules submodule.subname.path sm &&
1171 git config --add submodule.subname.ignore untracked &&
1172 git config --add submodule.subname.path sm &&
1173 git status >output &&
1174 test_i18ncmp expect output &&
1175 git config --remove-section submodule.subname &&
1176 git config -f .gitmodules --remove-section submodule.subname
1179 head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --verify HEAD)
1181 test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
1182 cat > expect << EOF &&
1183 On branch master
1184 Changes to be committed:
1185 (use "git reset HEAD <file>..." to unstage)
1187 modified: sm
1189 Changes not staged for commit:
1190 (use "git add <file>..." to update what will be committed)
1191 (use "git checkout -- <file>..." to discard changes in working directory)
1193 modified: dir1/modified
1194 modified: sm (new commits)
1196 Submodule changes to be committed:
1198 * sm $head...$new_head (1):
1199 > Add bar
1201 Submodules changed but not updated:
1203 * sm $new_head...$head2 (1):
1204 > 2nd commit
1206 Untracked files:
1207 (use "git add <file>..." to include in what will be committed)
1209 .gitmodules
1210 dir1/untracked
1211 dir2/modified
1212 dir2/untracked
1213 untracked
1216 git status --ignore-submodules=untracked > output &&
1217 test_i18ncmp expect output
1220 test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule summary" '
1221 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1222 git config --add -f .gitmodules submodule.subname.path sm &&
1223 git status >output &&
1224 test_i18ncmp expect output &&
1225 git config -f .gitmodules --remove-section submodule.subname
1228 test_expect_success ".git/config ignore=untracked doesn't suppress submodule summary" '
1229 git config --add -f .gitmodules submodule.subname.ignore none &&
1230 git config --add -f .gitmodules submodule.subname.path sm &&
1231 git config --add submodule.subname.ignore untracked &&
1232 git config --add submodule.subname.path sm &&
1233 git status >output &&
1234 test_i18ncmp expect output &&
1235 git config --remove-section submodule.subname &&
1236 git config -f .gitmodules --remove-section submodule.subname
1239 test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
1240 git status --ignore-submodules=dirty > output &&
1241 test_i18ncmp expect output
1243 test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary" '
1244 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1245 git config --add -f .gitmodules submodule.subname.path sm &&
1246 git status >output &&
1247 test_i18ncmp expect output &&
1248 git config -f .gitmodules --remove-section submodule.subname
1251 test_expect_success ".git/config ignore=dirty doesn't suppress submodule summary" '
1252 git config --add -f .gitmodules submodule.subname.ignore none &&
1253 git config --add -f .gitmodules submodule.subname.path sm &&
1254 git config --add submodule.subname.ignore dirty &&
1255 git config --add submodule.subname.path sm &&
1256 git status >output &&
1257 test_i18ncmp expect output &&
1258 git config --remove-section submodule.subname &&
1259 git config -f .gitmodules --remove-section submodule.subname
1262 cat > expect << EOF
1263 ; On branch master
1264 ; Changes to be committed:
1265 ; (use "git reset HEAD <file>..." to unstage)
1267 ; modified: sm
1269 ; Changes not staged for commit:
1270 ; (use "git add <file>..." to update what will be committed)
1271 ; (use "git checkout -- <file>..." to discard changes in working directory)
1273 ; modified: dir1/modified
1274 ; modified: sm (new commits)
1276 ; Submodule changes to be committed:
1278 ; * sm $head...$new_head (1):
1279 ; > Add bar
1281 ; Submodules changed but not updated:
1283 ; * sm $new_head...$head2 (1):
1284 ; > 2nd commit
1286 ; Untracked files:
1287 ; (use "git add <file>..." to include in what will be committed)
1289 ; .gitmodules
1290 ; dir1/untracked
1291 ; dir2/modified
1292 ; dir2/untracked
1293 ; untracked
1297 test_expect_success "status (core.commentchar with submodule summary)" '
1298 test_config core.commentchar ";" &&
1299 git -c status.displayCommentPrefix=true status >output &&
1300 test_i18ncmp expect output
1303 test_expect_success "status (core.commentchar with two chars with submodule summary)" '
1304 test_config core.commentchar ";;" &&
1305 test_must_fail git -c status.displayCommentPrefix=true status
1308 test_expect_success "--ignore-submodules=all suppresses submodule summary" '
1309 cat > expect << EOF &&
1310 On branch master
1311 Changes not staged for commit:
1312 (use "git add <file>..." to update what will be committed)
1313 (use "git checkout -- <file>..." to discard changes in working directory)
1315 modified: dir1/modified
1317 Untracked files:
1318 (use "git add <file>..." to include in what will be committed)
1320 .gitmodules
1321 dir1/untracked
1322 dir2/modified
1323 dir2/untracked
1324 untracked
1326 no changes added to commit (use "git add" and/or "git commit -a")
1328 git status --ignore-submodules=all > output &&
1329 test_i18ncmp expect output
1332 test_expect_success '.gitmodules ignore=all suppresses unstaged submodule summary' '
1333 cat > expect << EOF &&
1334 On branch master
1335 Changes to be committed:
1336 (use "git reset HEAD <file>..." to unstage)
1338 modified: sm
1340 Changes not staged for commit:
1341 (use "git add <file>..." to update what will be committed)
1342 (use "git checkout -- <file>..." to discard changes in working directory)
1344 modified: dir1/modified
1346 Untracked files:
1347 (use "git add <file>..." to include in what will be committed)
1349 .gitmodules
1350 dir1/untracked
1351 dir2/modified
1352 dir2/untracked
1353 untracked
1356 git config --add -f .gitmodules submodule.subname.ignore all &&
1357 git config --add -f .gitmodules submodule.subname.path sm &&
1358 git status > output &&
1359 test_cmp expect output &&
1360 git config -f .gitmodules --remove-section submodule.subname
1363 test_expect_success '.git/config ignore=all suppresses unstaged submodule summary' '
1364 git config --add -f .gitmodules submodule.subname.ignore none &&
1365 git config --add -f .gitmodules submodule.subname.path sm &&
1366 git config --add submodule.subname.ignore all &&
1367 git config --add submodule.subname.path sm &&
1368 git status > output &&
1369 test_cmp expect output &&
1370 git config --remove-section submodule.subname &&
1371 git config -f .gitmodules --remove-section submodule.subname
1374 test_expect_success 'setup of test environment' '
1375 git config status.showUntrackedFiles no &&
1376 git status -s >expected_short &&
1377 git status --no-short >expected_noshort
1380 test_expect_success '"status.short=true" same as "-s"' '
1381 git -c status.short=true status >actual &&
1382 test_cmp expected_short actual
1385 test_expect_success '"status.short=true" weaker than "--no-short"' '
1386 git -c status.short=true status --no-short >actual &&
1387 test_cmp expected_noshort actual
1390 test_expect_success '"status.short=false" same as "--no-short"' '
1391 git -c status.short=false status >actual &&
1392 test_cmp expected_noshort actual
1395 test_expect_success '"status.short=false" weaker than "-s"' '
1396 git -c status.short=false status -s >actual &&
1397 test_cmp expected_short actual
1400 test_expect_success '"status.branch=true" same as "-b"' '
1401 git status -sb >expected_branch &&
1402 git -c status.branch=true status -s >actual &&
1403 test_cmp expected_branch actual
1406 test_expect_success '"status.branch=true" different from "--no-branch"' '
1407 git status -s --no-branch >expected_nobranch &&
1408 git -c status.branch=true status -s >actual &&
1409 test_must_fail test_cmp expected_nobranch actual
1412 test_expect_success '"status.branch=true" weaker than "--no-branch"' '
1413 git -c status.branch=true status -s --no-branch >actual &&
1414 test_cmp expected_nobranch actual
1417 test_expect_success '"status.branch=true" weaker than "--porcelain"' '
1418 git -c status.branch=true status --porcelain >actual &&
1419 test_cmp expected_nobranch actual
1422 test_expect_success '"status.branch=false" same as "--no-branch"' '
1423 git -c status.branch=false status -s >actual &&
1424 test_cmp expected_nobranch actual
1427 test_expect_success '"status.branch=false" weaker than "-b"' '
1428 git -c status.branch=false status -sb >actual &&
1429 test_cmp expected_branch actual
1432 test_expect_success 'Restore default test environment' '
1433 git config --unset status.showUntrackedFiles
1436 test_expect_success 'git commit will commit a staged but ignored submodule' '
1437 git config --add -f .gitmodules submodule.subname.ignore all &&
1438 git config --add -f .gitmodules submodule.subname.path sm &&
1439 git config --add submodule.subname.ignore all &&
1440 git status -s --ignore-submodules=dirty >output &&
1441 test_i18ngrep "^M. sm" output &&
1442 GIT_EDITOR="echo hello >>\"\$1\"" &&
1443 export GIT_EDITOR &&
1444 git commit -uno &&
1445 git status -s --ignore-submodules=dirty >output &&
1446 test_i18ngrep ! "^M. sm" output
1449 test_expect_success 'git commit --dry-run will show a staged but ignored submodule' '
1450 git reset HEAD^ &&
1451 git add sm &&
1452 cat >expect << EOF &&
1453 On branch master
1454 Changes to be committed:
1455 (use "git reset HEAD <file>..." to unstage)
1457 modified: sm
1459 Changes not staged for commit:
1460 (use "git add <file>..." to update what will be committed)
1461 (use "git checkout -- <file>..." to discard changes in working directory)
1463 modified: dir1/modified
1465 Untracked files not listed (use -u option to show untracked files)
1467 git commit -uno --dry-run >output &&
1468 test_i18ncmp expect output &&
1469 git status -s --ignore-submodules=dirty >output &&
1470 test_i18ngrep "^M. sm" output
1473 test_expect_success 'git commit -m will commit a staged but ignored submodule' '
1474 git commit -uno -m message &&
1475 git status -s --ignore-submodules=dirty >output &&
1476 test_i18ngrep ! "^M. sm" output &&
1477 git config --remove-section submodule.subname &&
1478 git config -f .gitmodules --remove-section submodule.subname
1481 test_done