]>
Commit | Line | Data |
---|---|---|
1 | #!/bin/sh | |
2 | ||
3 | test_description='diff whitespace error detection' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | test_expect_success setup ' | |
8 | ||
9 | git config diff.color.whitespace "blue reverse" && | |
10 | >F && | |
11 | git add F && | |
12 | echo " Eight SP indent" >>F && | |
13 | echo " HT and SP indent" >>F && | |
14 | echo "With trailing SP " >>F && | |
15 | echo "Carriage ReturnQ" | tr Q "\015" >>F && | |
16 | echo "No problem" >>F && | |
17 | echo >>F | |
18 | ||
19 | ' | |
20 | ||
21 | blue_grep='7;34m' ;# ESC [ 7 ; 3 4 m | |
22 | ||
23 | printf "\033[%s" "$blue_grep" >check-grep | |
24 | if (grep "$blue_grep" <check-grep | grep "$blue_grep") >/dev/null 2>&1 | |
25 | then | |
26 | grep_a=grep | |
27 | elif (grep -a "$blue_grep" <check-grep | grep -a "$blue_grep") >/dev/null 2>&1 | |
28 | then | |
29 | grep_a='grep -a' | |
30 | else | |
31 | grep_a=grep ;# expected to fail... | |
32 | fi | |
33 | rm -f check-grep | |
34 | ||
35 | prepare_output () { | |
36 | git diff --color >output | |
37 | $grep_a "$blue_grep" output >error | |
38 | $grep_a -v "$blue_grep" output >normal | |
39 | return 0 | |
40 | } | |
41 | ||
42 | test_expect_success default ' | |
43 | ||
44 | prepare_output && | |
45 | ||
46 | grep Eight normal >/dev/null && | |
47 | grep HT error >/dev/null && | |
48 | grep With error >/dev/null && | |
49 | grep Return error >/dev/null && | |
50 | grep No normal >/dev/null | |
51 | ||
52 | ' | |
53 | ||
54 | test_expect_success 'default (attribute)' ' | |
55 | ||
56 | test_might_fail git config --unset core.whitespace && | |
57 | echo "F whitespace" >.gitattributes && | |
58 | prepare_output && | |
59 | ||
60 | grep Eight error >/dev/null && | |
61 | grep HT error >/dev/null && | |
62 | grep With error >/dev/null && | |
63 | grep Return error >/dev/null && | |
64 | grep No normal >/dev/null | |
65 | ||
66 | ' | |
67 | ||
68 | test_expect_success 'default, tabwidth=10 (attribute)' ' | |
69 | ||
70 | git config core.whitespace "tabwidth=10" && | |
71 | echo "F whitespace" >.gitattributes && | |
72 | prepare_output && | |
73 | ||
74 | grep Eight normal >/dev/null && | |
75 | grep HT error >/dev/null && | |
76 | grep With error >/dev/null && | |
77 | grep Return error >/dev/null && | |
78 | grep No normal >/dev/null | |
79 | ||
80 | ' | |
81 | ||
82 | test_expect_success 'no check (attribute)' ' | |
83 | ||
84 | test_might_fail git config --unset core.whitespace && | |
85 | echo "F -whitespace" >.gitattributes && | |
86 | prepare_output && | |
87 | ||
88 | grep Eight normal >/dev/null && | |
89 | grep HT normal >/dev/null && | |
90 | grep With normal >/dev/null && | |
91 | grep Return normal >/dev/null && | |
92 | grep No normal >/dev/null | |
93 | ||
94 | ' | |
95 | ||
96 | test_expect_success 'no check, tabwidth=10 (attribute), must be irrelevant' ' | |
97 | ||
98 | git config core.whitespace "tabwidth=10" && | |
99 | echo "F -whitespace" >.gitattributes && | |
100 | prepare_output && | |
101 | ||
102 | grep Eight normal >/dev/null && | |
103 | grep HT normal >/dev/null && | |
104 | grep With normal >/dev/null && | |
105 | grep Return normal >/dev/null && | |
106 | grep No normal >/dev/null | |
107 | ||
108 | ' | |
109 | ||
110 | test_expect_success 'without -trail' ' | |
111 | ||
112 | rm -f .gitattributes && | |
113 | git config core.whitespace -trail && | |
114 | prepare_output && | |
115 | ||
116 | grep Eight normal >/dev/null && | |
117 | grep HT error >/dev/null && | |
118 | grep With normal >/dev/null && | |
119 | grep Return normal >/dev/null && | |
120 | grep No normal >/dev/null | |
121 | ||
122 | ' | |
123 | ||
124 | test_expect_success 'without -trail (attribute)' ' | |
125 | ||
126 | test_might_fail git config --unset core.whitespace && | |
127 | echo "F whitespace=-trail" >.gitattributes && | |
128 | prepare_output && | |
129 | ||
130 | grep Eight normal >/dev/null && | |
131 | grep HT error >/dev/null && | |
132 | grep With normal >/dev/null && | |
133 | grep Return normal >/dev/null && | |
134 | grep No normal >/dev/null | |
135 | ||
136 | ' | |
137 | ||
138 | test_expect_success 'without -space' ' | |
139 | ||
140 | rm -f .gitattributes && | |
141 | git config core.whitespace -space && | |
142 | prepare_output && | |
143 | ||
144 | grep Eight normal >/dev/null && | |
145 | grep HT normal >/dev/null && | |
146 | grep With error >/dev/null && | |
147 | grep Return error >/dev/null && | |
148 | grep No normal >/dev/null | |
149 | ||
150 | ' | |
151 | ||
152 | test_expect_success 'without -space (attribute)' ' | |
153 | ||
154 | test_might_fail git config --unset core.whitespace && | |
155 | echo "F whitespace=-space" >.gitattributes && | |
156 | prepare_output && | |
157 | ||
158 | grep Eight normal >/dev/null && | |
159 | grep HT normal >/dev/null && | |
160 | grep With error >/dev/null && | |
161 | grep Return error >/dev/null && | |
162 | grep No normal >/dev/null | |
163 | ||
164 | ' | |
165 | ||
166 | test_expect_success 'with indent-non-tab only' ' | |
167 | ||
168 | rm -f .gitattributes && | |
169 | git config core.whitespace indent,-trailing,-space && | |
170 | prepare_output && | |
171 | ||
172 | grep Eight error >/dev/null && | |
173 | grep HT normal >/dev/null && | |
174 | grep With normal >/dev/null && | |
175 | grep Return normal >/dev/null && | |
176 | grep No normal >/dev/null | |
177 | ||
178 | ' | |
179 | ||
180 | test_expect_success 'with indent-non-tab only (attribute)' ' | |
181 | ||
182 | test_might_fail git config --unset core.whitespace && | |
183 | echo "F whitespace=indent,-trailing,-space" >.gitattributes && | |
184 | prepare_output && | |
185 | ||
186 | grep Eight error >/dev/null && | |
187 | grep HT normal >/dev/null && | |
188 | grep With normal >/dev/null && | |
189 | grep Return normal >/dev/null && | |
190 | grep No normal >/dev/null | |
191 | ||
192 | ' | |
193 | ||
194 | test_expect_success 'with indent-non-tab only, tabwidth=10' ' | |
195 | ||
196 | rm -f .gitattributes && | |
197 | git config core.whitespace indent,tabwidth=10,-trailing,-space && | |
198 | prepare_output && | |
199 | ||
200 | grep Eight normal >/dev/null && | |
201 | grep HT normal >/dev/null && | |
202 | grep With normal >/dev/null && | |
203 | grep Return normal >/dev/null && | |
204 | grep No normal >/dev/null | |
205 | ||
206 | ' | |
207 | ||
208 | test_expect_success 'with indent-non-tab only, tabwidth=10 (attribute)' ' | |
209 | ||
210 | test_might_fail git config --unset core.whitespace && | |
211 | echo "F whitespace=indent,-trailing,-space,tabwidth=10" >.gitattributes && | |
212 | prepare_output && | |
213 | ||
214 | grep Eight normal >/dev/null && | |
215 | grep HT normal >/dev/null && | |
216 | grep With normal >/dev/null && | |
217 | grep Return normal >/dev/null && | |
218 | grep No normal >/dev/null | |
219 | ||
220 | ' | |
221 | ||
222 | test_expect_success 'with cr-at-eol' ' | |
223 | ||
224 | rm -f .gitattributes && | |
225 | git config core.whitespace cr-at-eol && | |
226 | prepare_output && | |
227 | ||
228 | grep Eight normal >/dev/null && | |
229 | grep HT error >/dev/null && | |
230 | grep With error >/dev/null && | |
231 | grep Return normal >/dev/null && | |
232 | grep No normal >/dev/null | |
233 | ||
234 | ' | |
235 | ||
236 | test_expect_success 'with cr-at-eol (attribute)' ' | |
237 | ||
238 | test_might_fail git config --unset core.whitespace && | |
239 | echo "F whitespace=trailing,cr-at-eol" >.gitattributes && | |
240 | prepare_output && | |
241 | ||
242 | grep Eight normal >/dev/null && | |
243 | grep HT error >/dev/null && | |
244 | grep With error >/dev/null && | |
245 | grep Return normal >/dev/null && | |
246 | grep No normal >/dev/null | |
247 | ||
248 | ' | |
249 | ||
250 | test_expect_success 'trailing empty lines (1)' ' | |
251 | ||
252 | rm -f .gitattributes && | |
253 | test_must_fail git diff --check >output && | |
254 | grep "new blank line at" output && | |
255 | grep "trailing whitespace" output | |
256 | ||
257 | ' | |
258 | ||
259 | test_expect_success 'trailing empty lines (2)' ' | |
260 | ||
261 | echo "F -whitespace" >.gitattributes && | |
262 | git diff --check >output && | |
263 | test_must_be_empty output | |
264 | ||
265 | ' | |
266 | ||
267 | test_expect_success 'checkdiff shows correct line number for trailing blank lines' ' | |
268 | ||
269 | printf "a\nb\n" > G && | |
270 | git add G && | |
271 | printf "x\nx\nx\na\nb\nc\n\n" > G && | |
272 | [ "$(git diff --check -- G)" = "G:7: new blank line at EOF." ] | |
273 | ||
274 | ' | |
275 | ||
276 | test_expect_success 'do not color trailing cr in context' ' | |
277 | test_might_fail git config --unset core.whitespace && | |
278 | rm -f .gitattributes && | |
279 | echo AAAQ | tr Q "\015" >G && | |
280 | git add G && | |
281 | echo BBBQ | tr Q "\015" >>G && | |
282 | git diff --color G | tr "\015" Q >output && | |
283 | grep "BBB.*${blue_grep}Q" output && | |
284 | grep "AAA.*\[mQ" output | |
285 | ||
286 | ' | |
287 | ||
288 | test_expect_success 'color new trailing blank lines' ' | |
289 | { echo a; echo b; echo; echo; } >x && | |
290 | git add x && | |
291 | { echo a; echo; echo; echo; echo c; echo; echo; echo; echo; } >x && | |
292 | git diff --color x >output && | |
293 | cnt=$($grep_a "${blue_grep}" output | wc -l) && | |
294 | test $cnt = 2 | |
295 | ' | |
296 | ||
297 | test_done |