]> git.ipfire.org Git - thirdparty/git.git/blame_incremental - t/t7508-status.sh
path.c: don't call the match function without value in trie_find()
[thirdparty/git.git] / t / t7508-status.sh
... / ...
CommitLineData
1#!/bin/sh
2#
3# Copyright (c) 2007 Johannes E. Schindelin
4#
5
6test_description='git status'
7
8. ./test-lib.sh
9. "$TEST_DIRECTORY"/lib-terminal.sh
10
11test_expect_success 'status -h in broken repository' '
12 git config --global advice.statusuoption false &&
13 mkdir broken &&
14 test_when_finished "rm -fr broken" &&
15 (
16 cd broken &&
17 git init &&
18 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
19 test_expect_code 129 git status -h >usage 2>&1
20 ) &&
21 test_i18ngrep "[Uu]sage" broken/usage
22'
23
24test_expect_success 'commit -h in broken repository' '
25 mkdir broken &&
26 test_when_finished "rm -fr broken" &&
27 (
28 cd broken &&
29 git init &&
30 echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
31 test_expect_code 129 git commit -h >usage 2>&1
32 ) &&
33 test_i18ngrep "[Uu]sage" broken/usage
34'
35
36test_expect_success 'create upstream branch' '
37 git checkout -b upstream &&
38 test_commit upstream1 &&
39 test_commit upstream2 &&
40 # leave the first commit on master as root because several
41 # tests depend on this case; for our upstream we only
42 # care about commit counts anyway, so a totally divergent
43 # history is OK
44 git checkout --orphan master
45'
46
47test_expect_success 'setup' '
48 : >tracked &&
49 : >modified &&
50 mkdir dir1 &&
51 : >dir1/tracked &&
52 : >dir1/modified &&
53 mkdir dir2 &&
54 : >dir1/tracked &&
55 : >dir1/modified &&
56 git add . &&
57
58 git status >output &&
59
60 test_tick &&
61 git commit -m initial &&
62 : >untracked &&
63 : >dir1/untracked &&
64 : >dir2/untracked &&
65 echo 1 >dir1/modified &&
66 echo 2 >dir2/modified &&
67 echo 3 >dir2/added &&
68 git add dir2/added &&
69
70 git branch --set-upstream-to=upstream
71'
72
73test_expect_success 'status (1)' '
74 test_i18ngrep "use \"git rm --cached <file>\.\.\.\" to unstage" output
75'
76
77strip_comments () {
78 tab=' '
79 sed "s/^\# //; s/^\#$//; s/^#$tab/$tab/" <"$1" >"$1".tmp &&
80 rm "$1" && mv "$1".tmp "$1"
81}
82
83cat >.gitignore <<\EOF
84.gitignore
85expect*
86output*
87EOF
88
89test_expect_success 'status --column' '
90 cat >expect <<\EOF &&
91# On branch master
92# Your branch and '\''upstream'\'' have diverged,
93# and have 1 and 2 different commits each, respectively.
94# (use "git pull" to merge the remote branch into yours)
95#
96# Changes to be committed:
97# (use "git restore --staged <file>..." to unstage)
98# new file: dir2/added
99#
100# Changes not staged for commit:
101# (use "git add <file>..." to update what will be committed)
102# (use "git restore <file>..." to discard changes in working directory)
103# modified: dir1/modified
104#
105# Untracked files:
106# (use "git add <file>..." to include in what will be committed)
107# dir1/untracked dir2/untracked
108# dir2/modified untracked
109#
110EOF
111 COLUMNS=50 git -c status.displayCommentPrefix=true status --column="column dense" >output &&
112 test_i18ncmp expect output
113'
114
115test_expect_success 'status --column status.displayCommentPrefix=false' '
116 strip_comments expect &&
117 COLUMNS=49 git -c status.displayCommentPrefix=false status --column="column dense" >output &&
118 test_i18ncmp expect output
119'
120
121cat >expect <<\EOF
122# On branch master
123# Your branch and 'upstream' have diverged,
124# and have 1 and 2 different commits each, respectively.
125# (use "git pull" to merge the remote branch into yours)
126#
127# Changes to be committed:
128# (use "git restore --staged <file>..." to unstage)
129# new file: dir2/added
130#
131# Changes not staged for commit:
132# (use "git add <file>..." to update what will be committed)
133# (use "git restore <file>..." to discard changes in working directory)
134# modified: dir1/modified
135#
136# Untracked files:
137# (use "git add <file>..." to include in what will be committed)
138# dir1/untracked
139# dir2/modified
140# dir2/untracked
141# untracked
142#
143EOF
144
145test_expect_success 'status with status.displayCommentPrefix=true' '
146 git -c status.displayCommentPrefix=true status >output &&
147 test_i18ncmp expect output
148'
149
150test_expect_success 'status with status.displayCommentPrefix=false' '
151 strip_comments expect &&
152 git -c status.displayCommentPrefix=false status >output &&
153 test_i18ncmp expect output
154'
155
156test_expect_success 'status -v' '
157 (cat expect && git diff --cached) >expect-with-v &&
158 git status -v >output &&
159 test_i18ncmp expect-with-v output
160'
161
162test_expect_success 'status -v -v' '
163 (cat expect &&
164 echo "Changes to be committed:" &&
165 git -c diff.mnemonicprefix=true diff --cached &&
166 echo "--------------------------------------------------" &&
167 echo "Changes not staged for commit:" &&
168 git -c diff.mnemonicprefix=true diff) >expect-with-v &&
169 git status -v -v >output &&
170 test_i18ncmp expect-with-v output
171'
172
173test_expect_success 'setup fake editor' '
174 cat >.git/editor <<-\EOF &&
175 #! /bin/sh
176 cp "$1" output
177EOF
178 chmod 755 .git/editor
179'
180
181commit_template_commented () {
182 (
183 EDITOR=.git/editor &&
184 export EDITOR &&
185 # Fails due to empty message
186 test_must_fail git commit
187 ) &&
188 ! grep '^[^#]' output
189}
190
191test_expect_success 'commit ignores status.displayCommentPrefix=false in COMMIT_EDITMSG' '
192 commit_template_commented
193'
194
195cat >expect <<\EOF
196On branch master
197Your branch and 'upstream' have diverged,
198and have 1 and 2 different commits each, respectively.
199
200Changes to be committed:
201 new file: dir2/added
202
203Changes not staged for commit:
204 modified: dir1/modified
205
206Untracked files:
207 dir1/untracked
208 dir2/modified
209 dir2/untracked
210 untracked
211
212EOF
213
214test_expect_success 'status (advice.statusHints false)' '
215 test_config advice.statusHints false &&
216 git status >output &&
217 test_i18ncmp expect output
218
219'
220
221cat >expect <<\EOF
222 M dir1/modified
223A dir2/added
224?? dir1/untracked
225?? dir2/modified
226?? dir2/untracked
227?? untracked
228EOF
229
230test_expect_success 'status -s' '
231
232 git status -s >output &&
233 test_cmp expect output
234
235'
236
237test_expect_success 'status with gitignore' '
238 {
239 echo ".gitignore" &&
240 echo "expect*" &&
241 echo "output" &&
242 echo "untracked"
243 } >.gitignore &&
244
245 cat >expect <<-\EOF &&
246 M dir1/modified
247 A dir2/added
248 ?? dir2/modified
249 EOF
250 git status -s >output &&
251 test_cmp expect output &&
252
253 cat >expect <<-\EOF &&
254 M dir1/modified
255 A dir2/added
256 ?? dir2/modified
257 !! .gitignore
258 !! dir1/untracked
259 !! dir2/untracked
260 !! expect
261 !! expect-with-v
262 !! output
263 !! untracked
264 EOF
265 git status -s --ignored >output &&
266 test_cmp expect output &&
267
268 cat >expect <<\EOF &&
269On branch master
270Your branch and '\''upstream'\'' have diverged,
271and have 1 and 2 different commits each, respectively.
272 (use "git pull" to merge the remote branch into yours)
273
274Changes to be committed:
275 (use "git restore --staged <file>..." to unstage)
276 new file: dir2/added
277
278Changes not staged for commit:
279 (use "git add <file>..." to update what will be committed)
280 (use "git restore <file>..." to discard changes in working directory)
281 modified: dir1/modified
282
283Untracked files:
284 (use "git add <file>..." to include in what will be committed)
285 dir2/modified
286
287Ignored files:
288 (use "git add -f <file>..." to include in what will be committed)
289 .gitignore
290 dir1/untracked
291 dir2/untracked
292 expect
293 expect-with-v
294 output
295 untracked
296
297EOF
298 git status --ignored >output &&
299 test_i18ncmp expect output
300'
301
302test_expect_success 'status with gitignore (nothing untracked)' '
303 {
304 echo ".gitignore" &&
305 echo "expect*" &&
306 echo "dir2/modified" &&
307 echo "output" &&
308 echo "untracked"
309 } >.gitignore &&
310
311 cat >expect <<-\EOF &&
312 M dir1/modified
313 A dir2/added
314 EOF
315 git status -s >output &&
316 test_cmp expect output &&
317
318 cat >expect <<-\EOF &&
319 M dir1/modified
320 A dir2/added
321 !! .gitignore
322 !! dir1/untracked
323 !! dir2/modified
324 !! dir2/untracked
325 !! expect
326 !! expect-with-v
327 !! output
328 !! untracked
329 EOF
330 git status -s --ignored >output &&
331 test_cmp expect output &&
332
333 cat >expect <<\EOF &&
334On branch master
335Your branch and '\''upstream'\'' have diverged,
336and have 1 and 2 different commits each, respectively.
337 (use "git pull" to merge the remote branch into yours)
338
339Changes to be committed:
340 (use "git restore --staged <file>..." to unstage)
341 new file: dir2/added
342
343Changes not staged for commit:
344 (use "git add <file>..." to update what will be committed)
345 (use "git restore <file>..." to discard changes in working directory)
346 modified: dir1/modified
347
348Ignored files:
349 (use "git add -f <file>..." to include in what will be committed)
350 .gitignore
351 dir1/untracked
352 dir2/modified
353 dir2/untracked
354 expect
355 expect-with-v
356 output
357 untracked
358
359EOF
360 git status --ignored >output &&
361 test_i18ncmp expect output
362'
363
364cat >.gitignore <<\EOF
365.gitignore
366expect*
367output*
368EOF
369
370cat >expect <<\EOF
371## master...upstream [ahead 1, behind 2]
372 M dir1/modified
373A dir2/added
374?? dir1/untracked
375?? dir2/modified
376?? dir2/untracked
377?? untracked
378EOF
379
380test_expect_success 'status -s -b' '
381
382 git status -s -b >output &&
383 test_i18ncmp expect output
384
385'
386
387test_expect_success 'status -s -z -b' '
388 tr "\\n" Q <expect >expect.q &&
389 mv expect.q expect &&
390 git status -s -z -b >output &&
391 nul_to_q <output >output.q &&
392 mv output.q output &&
393 test_i18ncmp expect output
394'
395
396test_expect_success 'setup dir3' '
397 mkdir dir3 &&
398 : >dir3/untracked1 &&
399 : >dir3/untracked2
400'
401
402test_expect_success 'status -uno' '
403 cat >expect <<EOF &&
404On branch master
405Your branch and '\''upstream'\'' have diverged,
406and have 1 and 2 different commits each, respectively.
407 (use "git pull" to merge the remote branch into yours)
408
409Changes to be committed:
410 (use "git restore --staged <file>..." to unstage)
411 new file: dir2/added
412
413Changes not staged for commit:
414 (use "git add <file>..." to update what will be committed)
415 (use "git restore <file>..." to discard changes in working directory)
416 modified: dir1/modified
417
418Untracked files not listed (use -u option to show untracked files)
419EOF
420 git status -uno >output &&
421 test_i18ncmp expect output
422'
423
424test_expect_success 'status (status.showUntrackedFiles no)' '
425 test_config status.showuntrackedfiles no &&
426 git status >output &&
427 test_i18ncmp expect output
428'
429
430test_expect_success 'status -uno (advice.statusHints false)' '
431 cat >expect <<EOF &&
432On branch master
433Your branch and '\''upstream'\'' have diverged,
434and have 1 and 2 different commits each, respectively.
435
436Changes to be committed:
437 new file: dir2/added
438
439Changes not staged for commit:
440 modified: dir1/modified
441
442Untracked files not listed
443EOF
444 test_config advice.statusHints false &&
445 git status -uno >output &&
446 test_i18ncmp expect output
447'
448
449cat >expect << EOF
450 M dir1/modified
451A dir2/added
452EOF
453test_expect_success 'status -s -uno' '
454 git status -s -uno >output &&
455 test_cmp expect output
456'
457
458test_expect_success 'status -s (status.showUntrackedFiles no)' '
459 git config status.showuntrackedfiles no &&
460 git status -s >output &&
461 test_cmp expect output
462'
463
464test_expect_success 'status -unormal' '
465 cat >expect <<EOF &&
466On branch master
467Your branch and '\''upstream'\'' have diverged,
468and have 1 and 2 different commits each, respectively.
469 (use "git pull" to merge the remote branch into yours)
470
471Changes to be committed:
472 (use "git restore --staged <file>..." to unstage)
473 new file: dir2/added
474
475Changes not staged for commit:
476 (use "git add <file>..." to update what will be committed)
477 (use "git restore <file>..." to discard changes in working directory)
478 modified: dir1/modified
479
480Untracked files:
481 (use "git add <file>..." to include in what will be committed)
482 dir1/untracked
483 dir2/modified
484 dir2/untracked
485 dir3/
486 untracked
487
488EOF
489 git status -unormal >output &&
490 test_i18ncmp expect output
491'
492
493test_expect_success 'status (status.showUntrackedFiles normal)' '
494 test_config status.showuntrackedfiles normal &&
495 git status >output &&
496 test_i18ncmp expect output
497'
498
499cat >expect <<EOF
500 M dir1/modified
501A dir2/added
502?? dir1/untracked
503?? dir2/modified
504?? dir2/untracked
505?? dir3/
506?? untracked
507EOF
508test_expect_success 'status -s -unormal' '
509 git status -s -unormal >output &&
510 test_cmp expect output
511'
512
513test_expect_success 'status -s (status.showUntrackedFiles normal)' '
514 git config status.showuntrackedfiles normal &&
515 git status -s >output &&
516 test_cmp expect output
517'
518
519test_expect_success 'status -uall' '
520 cat >expect <<EOF &&
521On branch master
522Your branch and '\''upstream'\'' have diverged,
523and have 1 and 2 different commits each, respectively.
524 (use "git pull" to merge the remote branch into yours)
525
526Changes to be committed:
527 (use "git restore --staged <file>..." to unstage)
528 new file: dir2/added
529
530Changes not staged for commit:
531 (use "git add <file>..." to update what will be committed)
532 (use "git restore <file>..." to discard changes in working directory)
533 modified: dir1/modified
534
535Untracked files:
536 (use "git add <file>..." to include in what will be committed)
537 dir1/untracked
538 dir2/modified
539 dir2/untracked
540 dir3/untracked1
541 dir3/untracked2
542 untracked
543
544EOF
545 git status -uall >output &&
546 test_i18ncmp expect output
547'
548
549test_expect_success 'status (status.showUntrackedFiles all)' '
550 test_config status.showuntrackedfiles all &&
551 git status >output &&
552 test_i18ncmp expect output
553'
554
555test_expect_success 'teardown dir3' '
556 rm -rf dir3
557'
558
559cat >expect <<EOF
560 M dir1/modified
561A dir2/added
562?? dir1/untracked
563?? dir2/modified
564?? dir2/untracked
565?? untracked
566EOF
567test_expect_success 'status -s -uall' '
568 test_unconfig status.showuntrackedfiles &&
569 git status -s -uall >output &&
570 test_cmp expect output
571'
572test_expect_success 'status -s (status.showUntrackedFiles all)' '
573 test_config status.showuntrackedfiles all &&
574 git status -s >output &&
575 rm -rf dir3 &&
576 test_cmp expect output
577'
578
579test_expect_success 'status with relative paths' '
580 cat >expect <<\EOF &&
581On branch master
582Your branch and '\''upstream'\'' have diverged,
583and have 1 and 2 different commits each, respectively.
584 (use "git pull" to merge the remote branch into yours)
585
586Changes to be committed:
587 (use "git restore --staged <file>..." to unstage)
588 new file: ../dir2/added
589
590Changes not staged for commit:
591 (use "git add <file>..." to update what will be committed)
592 (use "git restore <file>..." to discard changes in working directory)
593 modified: modified
594
595Untracked files:
596 (use "git add <file>..." to include in what will be committed)
597 untracked
598 ../dir2/modified
599 ../dir2/untracked
600 ../untracked
601
602EOF
603 (cd dir1 && git status) >output &&
604 test_i18ncmp expect output
605'
606
607cat >expect <<\EOF
608 M modified
609A ../dir2/added
610?? untracked
611?? ../dir2/modified
612?? ../dir2/untracked
613?? ../untracked
614EOF
615test_expect_success 'status -s with relative paths' '
616
617 (cd dir1 && git status -s) >output &&
618 test_cmp expect output
619
620'
621
622cat >expect <<\EOF
623 M dir1/modified
624A dir2/added
625?? dir1/untracked
626?? dir2/modified
627?? dir2/untracked
628?? untracked
629EOF
630
631test_expect_success 'status --porcelain ignores relative paths setting' '
632
633 (cd dir1 && git status --porcelain) >output &&
634 test_cmp expect output
635
636'
637
638test_expect_success 'setup unique colors' '
639
640 git config status.color.untracked blue &&
641 git config status.color.branch green &&
642 git config status.color.localBranch yellow &&
643 git config status.color.remoteBranch cyan
644
645'
646
647test_expect_success TTY 'status with color.ui' '
648 cat >expect <<\EOF &&
649On branch <GREEN>master<RESET>
650Your branch and '\''upstream'\'' have diverged,
651and have 1 and 2 different commits each, respectively.
652 (use "git pull" to merge the remote branch into yours)
653
654Changes to be committed:
655 (use "git restore --staged <file>..." to unstage)
656 <GREEN>new file: dir2/added<RESET>
657
658Changes not staged for commit:
659 (use "git add <file>..." to update what will be committed)
660 (use "git restore <file>..." to discard changes in working directory)
661 <RED>modified: dir1/modified<RESET>
662
663Untracked files:
664 (use "git add <file>..." to include in what will be committed)
665 <BLUE>dir1/untracked<RESET>
666 <BLUE>dir2/modified<RESET>
667 <BLUE>dir2/untracked<RESET>
668 <BLUE>untracked<RESET>
669
670EOF
671 test_config color.ui auto &&
672 test_terminal git status | test_decode_color >output &&
673 test_i18ncmp expect output
674'
675
676test_expect_success TTY 'status with color.status' '
677 test_config color.status auto &&
678 test_terminal git status | test_decode_color >output &&
679 test_i18ncmp expect output
680'
681
682cat >expect <<\EOF
683 <RED>M<RESET> dir1/modified
684<GREEN>A<RESET> dir2/added
685<BLUE>??<RESET> dir1/untracked
686<BLUE>??<RESET> dir2/modified
687<BLUE>??<RESET> dir2/untracked
688<BLUE>??<RESET> untracked
689EOF
690
691test_expect_success TTY 'status -s with color.ui' '
692
693 git config color.ui auto &&
694 test_terminal git status -s | test_decode_color >output &&
695 test_cmp expect output
696
697'
698
699test_expect_success TTY 'status -s with color.status' '
700
701 git config --unset color.ui &&
702 git config color.status auto &&
703 test_terminal git status -s | test_decode_color >output &&
704 test_cmp expect output
705
706'
707
708cat >expect <<\EOF
709## <YELLOW>master<RESET>...<CYAN>upstream<RESET> [ahead <YELLOW>1<RESET>, behind <CYAN>2<RESET>]
710 <RED>M<RESET> dir1/modified
711<GREEN>A<RESET> dir2/added
712<BLUE>??<RESET> dir1/untracked
713<BLUE>??<RESET> dir2/modified
714<BLUE>??<RESET> dir2/untracked
715<BLUE>??<RESET> untracked
716EOF
717
718test_expect_success TTY 'status -s -b with color.status' '
719
720 test_terminal git status -s -b | test_decode_color >output &&
721 test_i18ncmp expect output
722
723'
724
725cat >expect <<\EOF
726 M dir1/modified
727A dir2/added
728?? dir1/untracked
729?? dir2/modified
730?? dir2/untracked
731?? untracked
732EOF
733
734test_expect_success TTY 'status --porcelain ignores color.ui' '
735
736 git config --unset color.status &&
737 git config color.ui auto &&
738 test_terminal git status --porcelain | test_decode_color >output &&
739 test_cmp expect output
740
741'
742
743test_expect_success TTY 'status --porcelain ignores color.status' '
744
745 git config --unset color.ui &&
746 git config color.status auto &&
747 test_terminal git status --porcelain | test_decode_color >output &&
748 test_cmp expect output
749
750'
751
752# recover unconditionally from color tests
753git config --unset color.status
754git config --unset color.ui
755
756test_expect_success 'status --porcelain respects -b' '
757
758 git status --porcelain -b >output &&
759 {
760 echo "## master...upstream [ahead 1, behind 2]" &&
761 cat expect
762 } >tmp &&
763 mv tmp expect &&
764 test_cmp expect output
765
766'
767
768
769
770test_expect_success 'status without relative paths' '
771 cat >expect <<\EOF &&
772On branch master
773Your branch and '\''upstream'\'' have diverged,
774and have 1 and 2 different commits each, respectively.
775 (use "git pull" to merge the remote branch into yours)
776
777Changes to be committed:
778 (use "git restore --staged <file>..." to unstage)
779 new file: dir2/added
780
781Changes not staged for commit:
782 (use "git add <file>..." to update what will be committed)
783 (use "git restore <file>..." to discard changes in working directory)
784 modified: dir1/modified
785
786Untracked files:
787 (use "git add <file>..." to include in what will be committed)
788 dir1/untracked
789 dir2/modified
790 dir2/untracked
791 untracked
792
793EOF
794 test_config status.relativePaths false &&
795 (cd dir1 && git status) >output &&
796 test_i18ncmp expect output
797
798'
799
800cat >expect <<\EOF
801 M dir1/modified
802A dir2/added
803?? dir1/untracked
804?? dir2/modified
805?? dir2/untracked
806?? untracked
807EOF
808
809test_expect_success 'status -s without relative paths' '
810
811 test_config status.relativePaths false &&
812 (cd dir1 && git status -s) >output &&
813 test_cmp expect output
814
815'
816
817test_expect_success 'dry-run of partial commit excluding new file in index' '
818 cat >expect <<EOF &&
819On branch master
820Your branch and '\''upstream'\'' have diverged,
821and have 1 and 2 different commits each, respectively.
822 (use "git pull" to merge the remote branch into yours)
823
824Changes to be committed:
825 (use "git restore --staged <file>..." to unstage)
826 modified: dir1/modified
827
828Untracked files:
829 (use "git add <file>..." to include in what will be committed)
830 dir1/untracked
831 dir2/
832 untracked
833
834EOF
835 git commit --dry-run dir1/modified >output &&
836 test_i18ncmp expect output
837'
838
839cat >expect <<EOF
840:100644 100644 $EMPTY_BLOB 0000000000000000000000000000000000000000 M dir1/modified
841EOF
842test_expect_success 'status refreshes the index' '
843 touch dir2/added &&
844 git status &&
845 git diff-files >output &&
846 test_cmp expect output
847'
848
849test_expect_success 'setup status submodule summary' '
850 test_create_repo sm && (
851 cd sm &&
852 >foo &&
853 git add foo &&
854 git commit -m "Add foo"
855 ) &&
856 git add sm
857'
858
859test_expect_success 'status submodule summary is disabled by default' '
860 cat >expect <<EOF &&
861On branch master
862Your branch and '\''upstream'\'' have diverged,
863and have 1 and 2 different commits each, respectively.
864 (use "git pull" to merge the remote branch into yours)
865
866Changes to be committed:
867 (use "git restore --staged <file>..." to unstage)
868 new file: dir2/added
869 new file: sm
870
871Changes not staged for commit:
872 (use "git add <file>..." to update what will be committed)
873 (use "git restore <file>..." to discard changes in working directory)
874 modified: dir1/modified
875
876Untracked files:
877 (use "git add <file>..." to include in what will be committed)
878 dir1/untracked
879 dir2/modified
880 dir2/untracked
881 untracked
882
883EOF
884 git status >output &&
885 test_i18ncmp expect output
886'
887
888# we expect the same as the previous test
889test_expect_success 'status --untracked-files=all does not show submodule' '
890 git status --untracked-files=all >output &&
891 test_i18ncmp expect output
892'
893
894cat >expect <<EOF
895 M dir1/modified
896A dir2/added
897A sm
898?? dir1/untracked
899?? dir2/modified
900?? dir2/untracked
901?? untracked
902EOF
903test_expect_success 'status -s submodule summary is disabled by default' '
904 git status -s >output &&
905 test_cmp expect output
906'
907
908# we expect the same as the previous test
909test_expect_success 'status -s --untracked-files=all does not show submodule' '
910 git status -s --untracked-files=all >output &&
911 test_cmp expect output
912'
913
914head=$(cd sm && git rev-parse --short=7 --verify HEAD)
915
916test_expect_success 'status submodule summary' '
917 cat >expect <<EOF &&
918On branch master
919Your branch and '\''upstream'\'' have diverged,
920and have 1 and 2 different commits each, respectively.
921 (use "git pull" to merge the remote branch into yours)
922
923Changes to be committed:
924 (use "git restore --staged <file>..." to unstage)
925 new file: dir2/added
926 new file: sm
927
928Changes not staged for commit:
929 (use "git add <file>..." to update what will be committed)
930 (use "git restore <file>..." to discard changes in working directory)
931 modified: dir1/modified
932
933Submodule changes to be committed:
934
935* sm 0000000...$head (1):
936 > Add foo
937
938Untracked files:
939 (use "git add <file>..." to include in what will be committed)
940 dir1/untracked
941 dir2/modified
942 dir2/untracked
943 untracked
944
945EOF
946 git config status.submodulesummary 10 &&
947 git status >output &&
948 test_i18ncmp expect output
949'
950
951test_expect_success 'status submodule summary with status.displayCommentPrefix=false' '
952 strip_comments expect &&
953 git -c status.displayCommentPrefix=false status >output &&
954 test_i18ncmp expect output
955'
956
957test_expect_success 'commit with submodule summary ignores status.displayCommentPrefix' '
958 commit_template_commented
959'
960
961cat >expect <<EOF
962 M dir1/modified
963A dir2/added
964A sm
965?? dir1/untracked
966?? dir2/modified
967?? dir2/untracked
968?? untracked
969EOF
970test_expect_success 'status -s submodule summary' '
971 git status -s >output &&
972 test_cmp expect output
973'
974
975test_expect_success 'status submodule summary (clean submodule): commit' '
976 cat >expect <<EOF &&
977On branch master
978Your branch and '\''upstream'\'' have diverged,
979and have 2 and 2 different commits each, respectively.
980 (use "git pull" to merge the remote branch into yours)
981
982Changes not staged for commit:
983 (use "git add <file>..." to update what will be committed)
984 (use "git restore <file>..." to discard changes in working directory)
985 modified: dir1/modified
986
987Untracked files:
988 (use "git add <file>..." to include in what will be committed)
989 dir1/untracked
990 dir2/modified
991 dir2/untracked
992 untracked
993
994no changes added to commit (use "git add" and/or "git commit -a")
995EOF
996 git commit -m "commit submodule" &&
997 git config status.submodulesummary 10 &&
998 test_must_fail git commit --dry-run >output &&
999 test_i18ncmp expect output &&
1000 git status >output &&
1001 test_i18ncmp expect output
1002'
1003
1004cat >expect <<EOF
1005 M dir1/modified
1006?? dir1/untracked
1007?? dir2/modified
1008?? dir2/untracked
1009?? untracked
1010EOF
1011test_expect_success 'status -s submodule summary (clean submodule)' '
1012 git status -s >output &&
1013 test_cmp expect output
1014'
1015
1016test_expect_success 'status -z implies porcelain' '
1017 git status --porcelain |
1018 perl -pe "s/\012/\000/g" >expect &&
1019 git status -z >output &&
1020 test_cmp expect output
1021'
1022
1023test_expect_success 'commit --dry-run submodule summary (--amend)' '
1024 cat >expect <<EOF &&
1025On branch master
1026Your branch and '\''upstream'\'' have diverged,
1027and have 2 and 2 different commits each, respectively.
1028 (use "git pull" to merge the remote branch into yours)
1029
1030Changes to be committed:
1031 (use "git restore --source=HEAD^1 --staged <file>..." to unstage)
1032 new file: dir2/added
1033 new file: sm
1034
1035Changes not staged for commit:
1036 (use "git add <file>..." to update what will be committed)
1037 (use "git restore <file>..." to discard changes in working directory)
1038 modified: dir1/modified
1039
1040Submodule changes to be committed:
1041
1042* sm 0000000...$head (1):
1043 > Add foo
1044
1045Untracked files:
1046 (use "git add <file>..." to include in what will be committed)
1047 dir1/untracked
1048 dir2/modified
1049 dir2/untracked
1050 untracked
1051
1052EOF
1053 git config status.submodulesummary 10 &&
1054 git commit --dry-run --amend >output &&
1055 test_i18ncmp expect output
1056'
1057
1058test_expect_success POSIXPERM,SANITY 'status succeeds in a read-only repository' '
1059 test_when_finished "chmod 775 .git" &&
1060 (
1061 chmod a-w .git &&
1062 # make dir1/tracked stat-dirty
1063 >dir1/tracked1 && mv -f dir1/tracked1 dir1/tracked &&
1064 git status -s >output &&
1065 ! grep dir1/tracked output &&
1066 # make sure "status" succeeded without writing index out
1067 git diff-files | grep dir1/tracked
1068 )
1069'
1070
1071(cd sm && echo > bar && git add bar && git commit -q -m 'Add bar') && git add sm
1072new_head=$(cd sm && git rev-parse --short=7 --verify HEAD)
1073touch .gitmodules
1074
1075test_expect_success '--ignore-submodules=untracked suppresses submodules with untracked content' '
1076 cat > expect << EOF &&
1077On branch master
1078Your branch and '\''upstream'\'' have diverged,
1079and have 2 and 2 different commits each, respectively.
1080 (use "git pull" to merge the remote branch into yours)
1081
1082Changes to be committed:
1083 (use "git restore --staged <file>..." to unstage)
1084 modified: sm
1085
1086Changes not staged for commit:
1087 (use "git add <file>..." to update what will be committed)
1088 (use "git restore <file>..." to discard changes in working directory)
1089 modified: dir1/modified
1090
1091Submodule changes to be committed:
1092
1093* sm $head...$new_head (1):
1094 > Add bar
1095
1096Untracked files:
1097 (use "git add <file>..." to include in what will be committed)
1098 .gitmodules
1099 dir1/untracked
1100 dir2/modified
1101 dir2/untracked
1102 untracked
1103
1104EOF
1105 echo modified sm/untracked &&
1106 git status --ignore-submodules=untracked >output &&
1107 test_i18ncmp expect output
1108'
1109
1110test_expect_success '.gitmodules ignore=untracked suppresses submodules with untracked content' '
1111 test_config diff.ignoreSubmodules dirty &&
1112 git status >output &&
1113 test_i18ncmp expect output &&
1114 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1115 git config --add -f .gitmodules submodule.subname.path sm &&
1116 git status >output &&
1117 test_i18ncmp expect output &&
1118 git config -f .gitmodules --remove-section submodule.subname
1119'
1120
1121test_expect_success '.git/config ignore=untracked suppresses submodules with untracked content' '
1122 git config --add -f .gitmodules submodule.subname.ignore none &&
1123 git config --add -f .gitmodules submodule.subname.path sm &&
1124 git config --add submodule.subname.ignore untracked &&
1125 git config --add submodule.subname.path sm &&
1126 git status >output &&
1127 test_i18ncmp expect output &&
1128 git config --remove-section submodule.subname &&
1129 git config --remove-section -f .gitmodules submodule.subname
1130'
1131
1132test_expect_success '--ignore-submodules=dirty suppresses submodules with untracked content' '
1133 git status --ignore-submodules=dirty >output &&
1134 test_i18ncmp expect output
1135'
1136
1137test_expect_success '.gitmodules ignore=dirty suppresses submodules with untracked content' '
1138 test_config diff.ignoreSubmodules dirty &&
1139 git status >output &&
1140 ! test -s actual &&
1141 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1142 git config --add -f .gitmodules submodule.subname.path sm &&
1143 git status >output &&
1144 test_i18ncmp expect output &&
1145 git config -f .gitmodules --remove-section submodule.subname
1146'
1147
1148test_expect_success '.git/config ignore=dirty suppresses submodules with untracked content' '
1149 git config --add -f .gitmodules submodule.subname.ignore none &&
1150 git config --add -f .gitmodules submodule.subname.path sm &&
1151 git config --add submodule.subname.ignore dirty &&
1152 git config --add submodule.subname.path sm &&
1153 git status >output &&
1154 test_i18ncmp expect output &&
1155 git config --remove-section submodule.subname &&
1156 git config -f .gitmodules --remove-section submodule.subname
1157'
1158
1159test_expect_success '--ignore-submodules=dirty suppresses submodules with modified content' '
1160 echo modified >sm/foo &&
1161 git status --ignore-submodules=dirty >output &&
1162 test_i18ncmp expect output
1163'
1164
1165test_expect_success '.gitmodules ignore=dirty suppresses submodules with modified content' '
1166 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1167 git config --add -f .gitmodules submodule.subname.path sm &&
1168 git status >output &&
1169 test_i18ncmp expect output &&
1170 git config -f .gitmodules --remove-section submodule.subname
1171'
1172
1173test_expect_success '.git/config ignore=dirty suppresses submodules with modified content' '
1174 git config --add -f .gitmodules submodule.subname.ignore none &&
1175 git config --add -f .gitmodules submodule.subname.path sm &&
1176 git config --add submodule.subname.ignore dirty &&
1177 git config --add submodule.subname.path sm &&
1178 git status >output &&
1179 test_i18ncmp expect output &&
1180 git config --remove-section submodule.subname &&
1181 git config -f .gitmodules --remove-section submodule.subname
1182'
1183
1184test_expect_success "--ignore-submodules=untracked doesn't suppress submodules with modified content" '
1185 cat > expect << EOF &&
1186On branch master
1187Your branch and '\''upstream'\'' have diverged,
1188and have 2 and 2 different commits each, respectively.
1189 (use "git pull" to merge the remote branch into yours)
1190
1191Changes to be committed:
1192 (use "git restore --staged <file>..." to unstage)
1193 modified: sm
1194
1195Changes not staged for commit:
1196 (use "git add <file>..." to update what will be committed)
1197 (use "git restore <file>..." to discard changes in working directory)
1198 (commit or discard the untracked or modified content in submodules)
1199 modified: dir1/modified
1200 modified: sm (modified content)
1201
1202Submodule changes to be committed:
1203
1204* sm $head...$new_head (1):
1205 > Add bar
1206
1207Untracked files:
1208 (use "git add <file>..." to include in what will be committed)
1209 .gitmodules
1210 dir1/untracked
1211 dir2/modified
1212 dir2/untracked
1213 untracked
1214
1215EOF
1216 git status --ignore-submodules=untracked > output &&
1217 test_i18ncmp expect output
1218'
1219
1220test_expect_success ".gitmodules ignore=untracked doesn't suppress submodules with modified content" '
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
1226'
1227
1228test_expect_success ".git/config ignore=untracked doesn't suppress submodules with modified content" '
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
1237'
1238
1239head2=$(cd sm && git commit -q -m "2nd commit" foo && git rev-parse --short=7 --verify HEAD)
1240
1241test_expect_success "--ignore-submodules=untracked doesn't suppress submodule summary" '
1242 cat > expect << EOF &&
1243On branch master
1244Your branch and '\''upstream'\'' have diverged,
1245and have 2 and 2 different commits each, respectively.
1246 (use "git pull" to merge the remote branch into yours)
1247
1248Changes to be committed:
1249 (use "git restore --staged <file>..." to unstage)
1250 modified: sm
1251
1252Changes not staged for commit:
1253 (use "git add <file>..." to update what will be committed)
1254 (use "git restore <file>..." to discard changes in working directory)
1255 modified: dir1/modified
1256 modified: sm (new commits)
1257
1258Submodule changes to be committed:
1259
1260* sm $head...$new_head (1):
1261 > Add bar
1262
1263Submodules changed but not updated:
1264
1265* sm $new_head...$head2 (1):
1266 > 2nd commit
1267
1268Untracked files:
1269 (use "git add <file>..." to include in what will be committed)
1270 .gitmodules
1271 dir1/untracked
1272 dir2/modified
1273 dir2/untracked
1274 untracked
1275
1276EOF
1277 git status --ignore-submodules=untracked > output &&
1278 test_i18ncmp expect output
1279'
1280
1281test_expect_success ".gitmodules ignore=untracked doesn't suppress submodule summary" '
1282 git config --add -f .gitmodules submodule.subname.ignore untracked &&
1283 git config --add -f .gitmodules submodule.subname.path sm &&
1284 git status >output &&
1285 test_i18ncmp expect output &&
1286 git config -f .gitmodules --remove-section submodule.subname
1287'
1288
1289test_expect_success ".git/config ignore=untracked doesn't suppress submodule summary" '
1290 git config --add -f .gitmodules submodule.subname.ignore none &&
1291 git config --add -f .gitmodules submodule.subname.path sm &&
1292 git config --add submodule.subname.ignore untracked &&
1293 git config --add submodule.subname.path sm &&
1294 git status >output &&
1295 test_i18ncmp expect output &&
1296 git config --remove-section submodule.subname &&
1297 git config -f .gitmodules --remove-section submodule.subname
1298'
1299
1300test_expect_success "--ignore-submodules=dirty doesn't suppress submodule summary" '
1301 git status --ignore-submodules=dirty > output &&
1302 test_i18ncmp expect output
1303'
1304test_expect_success ".gitmodules ignore=dirty doesn't suppress submodule summary" '
1305 git config --add -f .gitmodules submodule.subname.ignore dirty &&
1306 git config --add -f .gitmodules submodule.subname.path sm &&
1307 git status >output &&
1308 test_i18ncmp expect output &&
1309 git config -f .gitmodules --remove-section submodule.subname
1310'
1311
1312test_expect_success ".git/config ignore=dirty doesn't suppress submodule summary" '
1313 git config --add -f .gitmodules submodule.subname.ignore none &&
1314 git config --add -f .gitmodules submodule.subname.path sm &&
1315 git config --add submodule.subname.ignore dirty &&
1316 git config --add submodule.subname.path sm &&
1317 git status >output &&
1318 test_i18ncmp expect output &&
1319 git config --remove-section submodule.subname &&
1320 git config -f .gitmodules --remove-section submodule.subname
1321'
1322
1323cat > expect << EOF
1324; On branch master
1325; Your branch and 'upstream' have diverged,
1326; and have 2 and 2 different commits each, respectively.
1327; (use "git pull" to merge the remote branch into yours)
1328;
1329; Changes to be committed:
1330; (use "git restore --staged <file>..." to unstage)
1331; modified: sm
1332;
1333; Changes not staged for commit:
1334; (use "git add <file>..." to update what will be committed)
1335; (use "git restore <file>..." to discard changes in working directory)
1336; modified: dir1/modified
1337; modified: sm (new commits)
1338;
1339; Submodule changes to be committed:
1340;
1341; * sm $head...$new_head (1):
1342; > Add bar
1343;
1344; Submodules changed but not updated:
1345;
1346; * sm $new_head...$head2 (1):
1347; > 2nd commit
1348;
1349; Untracked files:
1350; (use "git add <file>..." to include in what will be committed)
1351; .gitmodules
1352; dir1/untracked
1353; dir2/modified
1354; dir2/untracked
1355; untracked
1356;
1357EOF
1358
1359test_expect_success "status (core.commentchar with submodule summary)" '
1360 test_config core.commentchar ";" &&
1361 git -c status.displayCommentPrefix=true status >output &&
1362 test_i18ncmp expect output
1363'
1364
1365test_expect_success "status (core.commentchar with two chars with submodule summary)" '
1366 test_config core.commentchar ";;" &&
1367 test_must_fail git -c status.displayCommentPrefix=true status
1368'
1369
1370test_expect_success "--ignore-submodules=all suppresses submodule summary" '
1371 cat > expect << EOF &&
1372On branch master
1373Your branch and '\''upstream'\'' have diverged,
1374and have 2 and 2 different commits each, respectively.
1375 (use "git pull" to merge the remote branch into yours)
1376
1377Changes not staged for commit:
1378 (use "git add <file>..." to update what will be committed)
1379 (use "git restore <file>..." to discard changes in working directory)
1380 modified: dir1/modified
1381
1382Untracked files:
1383 (use "git add <file>..." to include in what will be committed)
1384 .gitmodules
1385 dir1/untracked
1386 dir2/modified
1387 dir2/untracked
1388 untracked
1389
1390no changes added to commit (use "git add" and/or "git commit -a")
1391EOF
1392 git status --ignore-submodules=all > output &&
1393 test_i18ncmp expect output
1394'
1395
1396test_expect_success '.gitmodules ignore=all suppresses unstaged submodule summary' '
1397 cat > expect << EOF &&
1398On branch master
1399Your branch and '\''upstream'\'' have diverged,
1400and have 2 and 2 different commits each, respectively.
1401 (use "git pull" to merge the remote branch into yours)
1402
1403Changes to be committed:
1404 (use "git restore --staged <file>..." to unstage)
1405 modified: sm
1406
1407Changes not staged for commit:
1408 (use "git add <file>..." to update what will be committed)
1409 (use "git restore <file>..." to discard changes in working directory)
1410 modified: dir1/modified
1411
1412Untracked files:
1413 (use "git add <file>..." to include in what will be committed)
1414 .gitmodules
1415 dir1/untracked
1416 dir2/modified
1417 dir2/untracked
1418 untracked
1419
1420EOF
1421 git config --add -f .gitmodules submodule.subname.ignore all &&
1422 git config --add -f .gitmodules submodule.subname.path sm &&
1423 git status > output &&
1424 test_i18ncmp expect output &&
1425 git config -f .gitmodules --remove-section submodule.subname
1426'
1427
1428test_expect_success '.git/config ignore=all suppresses unstaged submodule summary' '
1429 git config --add -f .gitmodules submodule.subname.ignore none &&
1430 git config --add -f .gitmodules submodule.subname.path sm &&
1431 git config --add submodule.subname.ignore all &&
1432 git config --add submodule.subname.path sm &&
1433 git status > output &&
1434 test_i18ncmp expect output &&
1435 git config --remove-section submodule.subname &&
1436 git config -f .gitmodules --remove-section submodule.subname
1437'
1438
1439test_expect_success 'setup of test environment' '
1440 git config status.showUntrackedFiles no &&
1441 git status -s >expected_short &&
1442 git status --no-short >expected_noshort
1443'
1444
1445test_expect_success '"status.short=true" same as "-s"' '
1446 git -c status.short=true status >actual &&
1447 test_cmp expected_short actual
1448'
1449
1450test_expect_success '"status.short=true" weaker than "--no-short"' '
1451 git -c status.short=true status --no-short >actual &&
1452 test_cmp expected_noshort actual
1453'
1454
1455test_expect_success '"status.short=false" same as "--no-short"' '
1456 git -c status.short=false status >actual &&
1457 test_cmp expected_noshort actual
1458'
1459
1460test_expect_success '"status.short=false" weaker than "-s"' '
1461 git -c status.short=false status -s >actual &&
1462 test_cmp expected_short actual
1463'
1464
1465test_expect_success '"status.branch=true" same as "-b"' '
1466 git status -sb >expected_branch &&
1467 git -c status.branch=true status -s >actual &&
1468 test_cmp expected_branch actual
1469'
1470
1471test_expect_success '"status.branch=true" different from "--no-branch"' '
1472 git status -s --no-branch >expected_nobranch &&
1473 git -c status.branch=true status -s >actual &&
1474 test_must_fail test_cmp expected_nobranch actual
1475'
1476
1477test_expect_success '"status.branch=true" weaker than "--no-branch"' '
1478 git -c status.branch=true status -s --no-branch >actual &&
1479 test_cmp expected_nobranch actual
1480'
1481
1482test_expect_success '"status.branch=true" weaker than "--porcelain"' '
1483 git -c status.branch=true status --porcelain >actual &&
1484 test_cmp expected_nobranch actual
1485'
1486
1487test_expect_success '"status.branch=false" same as "--no-branch"' '
1488 git -c status.branch=false status -s >actual &&
1489 test_cmp expected_nobranch actual
1490'
1491
1492test_expect_success '"status.branch=false" weaker than "-b"' '
1493 git -c status.branch=false status -sb >actual &&
1494 test_cmp expected_branch actual
1495'
1496
1497test_expect_success 'Restore default test environment' '
1498 git config --unset status.showUntrackedFiles
1499'
1500
1501test_expect_success 'git commit will commit a staged but ignored submodule' '
1502 git config --add -f .gitmodules submodule.subname.ignore all &&
1503 git config --add -f .gitmodules submodule.subname.path sm &&
1504 git config --add submodule.subname.ignore all &&
1505 git status -s --ignore-submodules=dirty >output &&
1506 test_i18ngrep "^M. sm" output &&
1507 GIT_EDITOR="echo hello >>\"\$1\"" &&
1508 export GIT_EDITOR &&
1509 git commit -uno &&
1510 git status -s --ignore-submodules=dirty >output &&
1511 test_i18ngrep ! "^M. sm" output
1512'
1513
1514test_expect_success 'git commit --dry-run will show a staged but ignored submodule' '
1515 git reset HEAD^ &&
1516 git add sm &&
1517 cat >expect << EOF &&
1518On branch master
1519Your branch and '\''upstream'\'' have diverged,
1520and have 2 and 2 different commits each, respectively.
1521 (use "git pull" to merge the remote branch into yours)
1522
1523Changes to be committed:
1524 (use "git restore --staged <file>..." to unstage)
1525 modified: sm
1526
1527Changes not staged for commit:
1528 (use "git add <file>..." to update what will be committed)
1529 (use "git restore <file>..." to discard changes in working directory)
1530 modified: dir1/modified
1531
1532Untracked files not listed (use -u option to show untracked files)
1533EOF
1534 git commit -uno --dry-run >output &&
1535 test_i18ncmp expect output &&
1536 git status -s --ignore-submodules=dirty >output &&
1537 test_i18ngrep "^M. sm" output
1538'
1539
1540test_expect_success 'git commit -m will commit a staged but ignored submodule' '
1541 git commit -uno -m message &&
1542 git status -s --ignore-submodules=dirty >output &&
1543 test_i18ngrep ! "^M. sm" output &&
1544 git config --remove-section submodule.subname &&
1545 git config -f .gitmodules --remove-section submodule.subname
1546'
1547
1548test_expect_success 'show stash info with "--show-stash"' '
1549 git reset --hard &&
1550 git stash clear &&
1551 echo 1 >file &&
1552 git add file &&
1553 git stash &&
1554 git status >expected_default &&
1555 git status --show-stash >expected_with_stash &&
1556 test_i18ngrep "^Your stash currently has 1 entry$" expected_with_stash
1557'
1558
1559test_expect_success 'no stash info with "--show-stash --no-show-stash"' '
1560 git status --show-stash --no-show-stash >expected_without_stash &&
1561 test_cmp expected_default expected_without_stash
1562'
1563
1564test_expect_success '"status.showStash=false" weaker than "--show-stash"' '
1565 git -c status.showStash=false status --show-stash >actual &&
1566 test_cmp expected_with_stash actual
1567'
1568
1569test_expect_success '"status.showStash=true" weaker than "--no-show-stash"' '
1570 git -c status.showStash=true status --no-show-stash >actual &&
1571 test_cmp expected_without_stash actual
1572'
1573
1574test_expect_success 'no additionnal info if no stash entries' '
1575 git stash clear &&
1576 git -c status.showStash=true status >actual &&
1577 test_cmp expected_without_stash actual
1578'
1579
1580test_expect_success '"No commits yet" should be noted in status output' '
1581 git checkout --orphan empty-branch-1 &&
1582 git status >output &&
1583 test_i18ngrep "No commits yet" output
1584'
1585
1586test_expect_success '"No commits yet" should not be noted in status output' '
1587 git checkout --orphan empty-branch-2 &&
1588 test_commit test-commit-1 &&
1589 git status >output &&
1590 test_i18ngrep ! "No commits yet" output
1591'
1592
1593test_expect_success '"Initial commit" should be noted in commit template' '
1594 git checkout --orphan empty-branch-3 &&
1595 touch to_be_committed_1 &&
1596 git add to_be_committed_1 &&
1597 git commit --dry-run >output &&
1598 test_i18ngrep "Initial commit" output
1599'
1600
1601test_expect_success '"Initial commit" should not be noted in commit template' '
1602 git checkout --orphan empty-branch-4 &&
1603 test_commit test-commit-2 &&
1604 touch to_be_committed_2 &&
1605 git add to_be_committed_2 &&
1606 git commit --dry-run >output &&
1607 test_i18ngrep ! "Initial commit" output
1608'
1609
1610test_expect_success '--no-optional-locks prevents index update' '
1611 test-tool chmtime =1234567890 .git/index &&
1612 git --no-optional-locks status &&
1613 test-tool chmtime --get .git/index >out &&
1614 grep ^1234567890 out &&
1615 git status &&
1616 test-tool chmtime --get .git/index >out &&
1617 ! grep ^1234567890 out
1618'
1619
1620test_done