status: test ignored modes

Add tests around status reporting ignord files that match an exclude pattern for both --untracked-files=normal and --untracked-files=all. Signed-off-by: Jameson Miller <jamill@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Jameson Miller committed Oct 30, 2017 at 13:21 UTC 371c80c74673fd5f8fb1fb446c281e6e5be251c0
1 file changed +233
t/t7521-ignored-mode.sh new
+233
@@ -0,0 +1,233 @@
1 +#!/bin/sh
2 +
3 +test_description='git status ignored modes'
4 +
5 +. ./test-lib.sh
6 +
7 +test_expect_success 'setup initial commit and ignore file' '
8 + cat >.gitignore <<-\EOF &&
9 + *.ign
10 + ignored_dir/
11 + !*.unignore
12 + EOF
13 + git add . &&
14 + git commit -m "Initial commit"
15 +'
16 +
17 +test_expect_success 'Verify behavior of status on directories with ignored files' '
18 + test_when_finished "git clean -fdx" &&
19 + cat >expect <<-\EOF &&
20 + ? expect
21 + ? output
22 + ! dir/ignored/ignored_1.ign
23 + ! dir/ignored/ignored_2.ign
24 + ! ignored/ignored_1.ign
25 + ! ignored/ignored_2.ign
26 + EOF
27 +
28 + mkdir -p ignored dir/ignored &&
29 + touch ignored/ignored_1.ign ignored/ignored_2.ign \
30 + dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
31 +
32 + git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
33 + test_i18ncmp expect output
34 +'
35 +
36 +test_expect_success 'Verify status behavior on directory with tracked & ignored files' '
37 + test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
38 + cat >expect <<-\EOF &&
39 + ? expect
40 + ? output
41 + ! dir/tracked_ignored/ignored_1.ign
42 + ! dir/tracked_ignored/ignored_2.ign
43 + ! tracked_ignored/ignored_1.ign
44 + ! tracked_ignored/ignored_2.ign
45 + EOF
46 +
47 + mkdir -p tracked_ignored dir/tracked_ignored &&
48 + touch tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
49 + tracked_ignored/ignored_1.ign tracked_ignored/ignored_2.ign \
50 + dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 \
51 + dir/tracked_ignored/ignored_1.ign dir/tracked_ignored/ignored_2.ign &&
52 +
53 + git add tracked_ignored/tracked_1 tracked_ignored/tracked_2 \
54 + dir/tracked_ignored/tracked_1 dir/tracked_ignored/tracked_2 &&
55 + git commit -m "commit tracked files" &&
56 +
57 + git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
58 + test_i18ncmp expect output
59 +'
60 +
61 +test_expect_success 'Verify status behavior on directory with untracked and ignored files' '
62 + test_when_finished "git clean -fdx" &&
63 + cat >expect <<-\EOF &&
64 + ? dir/untracked_ignored/untracked_1
65 + ? dir/untracked_ignored/untracked_2
66 + ? expect
67 + ? output
68 + ? untracked_ignored/untracked_1
69 + ? untracked_ignored/untracked_2
70 + ! dir/untracked_ignored/ignored_1.ign
71 + ! dir/untracked_ignored/ignored_2.ign
72 + ! untracked_ignored/ignored_1.ign
73 + ! untracked_ignored/ignored_2.ign
74 + EOF
75 +
76 + mkdir -p untracked_ignored dir/untracked_ignored &&
77 + touch untracked_ignored/untracked_1 untracked_ignored/untracked_2 \
78 + untracked_ignored/ignored_1.ign untracked_ignored/ignored_2.ign \
79 + dir/untracked_ignored/untracked_1 dir/untracked_ignored/untracked_2 \
80 + dir/untracked_ignored/ignored_1.ign dir/untracked_ignored/ignored_2.ign &&
81 +
82 + git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
83 + test_i18ncmp expect output
84 +'
85 +
86 +test_expect_success 'Verify status matching ignored files on ignored directory' '
87 + test_when_finished "git clean -fdx" &&
88 + cat >expect <<-\EOF &&
89 + ? expect
90 + ? output
91 + ! ignored_dir/
92 + EOF
93 +
94 + mkdir ignored_dir &&
95 + touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
96 + ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign &&
97 +
98 + git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
99 + test_i18ncmp expect output
100 +'
101 +
102 +test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
103 + test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
104 + cat >expect <<-\EOF &&
105 + ? expect
106 + ? output
107 + ! ignored_dir/ignored_1
108 + ! ignored_dir/ignored_1.ign
109 + ! ignored_dir/ignored_2
110 + ! ignored_dir/ignored_2.ign
111 + EOF
112 +
113 + mkdir ignored_dir &&
114 + touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
115 + ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
116 + ignored_dir/tracked &&
117 + git add -f ignored_dir/tracked &&
118 + git commit -m "Force add file in ignored directory" &&
119 + git status --porcelain=v2 --ignored=matching --untracked-files=all >output &&
120 + test_i18ncmp expect output
121 +'
122 +
123 +test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
124 + test_when_finished "git clean -fdx" &&
125 + cat >expect <<-\EOF &&
126 + ? expect
127 + ? output
128 + ? untracked_dir/
129 + ! ignored_dir/
130 + ! ignored_files/ignored_1.ign
131 + ! ignored_files/ignored_2.ign
132 + EOF
133 +
134 + mkdir ignored_dir ignored_files untracked_dir &&
135 + touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
136 + ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
137 + untracked_dir/untracked &&
138 + git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
139 + test_i18ncmp expect output
140 +'
141 +
142 +test_expect_success 'Verify matching ignored files with --untracked-files=normal' '
143 + test_when_finished "git clean -fdx" &&
144 + cat >expect <<-\EOF &&
145 + ? expect
146 + ? output
147 + ? untracked_dir/
148 + ! ignored_dir/
149 + ! ignored_files/ignored_1.ign
150 + ! ignored_files/ignored_2.ign
151 + EOF
152 +
153 + mkdir ignored_dir ignored_files untracked_dir &&
154 + touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
155 + ignored_files/ignored_1.ign ignored_files/ignored_2.ign \
156 + untracked_dir/untracked &&
157 + git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
158 + test_i18ncmp expect output
159 +'
160 +
161 +test_expect_success 'Verify status behavior on ignored directory containing tracked file' '
162 + test_when_finished "git clean -fdx && git reset HEAD~1 --hard" &&
163 + cat >expect <<-\EOF &&
164 + ? expect
165 + ? output
166 + ! ignored_dir/ignored_1
167 + ! ignored_dir/ignored_1.ign
168 + ! ignored_dir/ignored_2
169 + ! ignored_dir/ignored_2.ign
170 + EOF
171 +
172 + mkdir ignored_dir &&
173 + touch ignored_dir/ignored_1 ignored_dir/ignored_2 \
174 + ignored_dir/ignored_1.ign ignored_dir/ignored_2.ign \
175 + ignored_dir/tracked &&
176 + git add -f ignored_dir/tracked &&
177 + git commit -m "Force add file in ignored directory" &&
178 + git status --porcelain=v2 --ignored=matching --untracked-files=normal >output &&
179 + test_i18ncmp expect output
180 +'
181 +
182 +test_expect_success 'Verify behavior of status with --ignored=no' '
183 + test_when_finished "git clean -fdx" &&
184 + cat >expect <<-\EOF &&
185 + ? expect
186 + ? output
187 + EOF
188 +
189 + mkdir -p ignored dir/ignored &&
190 + touch ignored/ignored_1.ign ignored/ignored_2.ign \
191 + dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
192 +
193 + git status --porcelain=v2 --ignored=no --untracked-files=all >output &&
194 + test_i18ncmp expect output
195 +'
196 +
197 +test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=all' '
198 + test_when_finished "git clean -fdx" &&
199 + cat >expect <<-\EOF &&
200 + ? expect
201 + ? output
202 + ! dir/ignored/ignored_1.ign
203 + ! dir/ignored/ignored_2.ign
204 + ! ignored/ignored_1.ign
205 + ! ignored/ignored_2.ign
206 + EOF
207 +
208 + mkdir -p ignored dir/ignored &&
209 + touch ignored/ignored_1.ign ignored/ignored_2.ign \
210 + dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
211 +
212 + git status --porcelain=v2 --ignored=traditional --untracked-files=all >output &&
213 + test_i18ncmp expect output
214 +'
215 +
216 +test_expect_success 'Verify behavior of status with --ignored=traditional and --untracked-files=normal' '
217 + test_when_finished "git clean -fdx" &&
218 + cat >expect <<-\EOF &&
219 + ? expect
220 + ? output
221 + ! dir/
222 + ! ignored/
223 + EOF
224 +
225 + mkdir -p ignored dir/ignored &&
226 + touch ignored/ignored_1.ign ignored/ignored_2.ign \
227 + dir/ignored/ignored_1.ign dir/ignored/ignored_2.ign &&
228 +
229 + git status --porcelain=v2 --ignored=traditional --untracked-files=normal >output &&
230 + test_i18ncmp expect output
231 +'
232 +
233 +test_done