blob: 485c7d2d124ade54d00f8752399be91f43eefbc8 [file] [log] [blame]
Junio C Hamanod5a41642007-11-23 20:14:20 -08001#!/bin/sh
2
Nanako Shiraishi3604e7c2008-09-03 17:59:29 +09003test_description='core.whitespace rules and git apply'
Junio C Hamanod5a41642007-11-23 20:14:20 -08004
5. ./test-lib.sh
6
7prepare_test_file () {
8
9 # A line that has character X is touched iff RULE is in effect:
10 # X RULE
11 # ! trailing-space
12 # @ space-before-tab
Johannes Sixtf4b05a42010-11-30 09:29:11 +010013 # # indent-with-non-tab (default tab width 8)
14 # = indent-with-non-tab,tabwidth=16
Chris Webba347b172010-04-03 00:37:37 +010015 # % tab-in-indent
Junio C Hamanod5a41642007-11-23 20:14:20 -080016 sed -e "s/_/ /g" -e "s/>/ /" <<-\EOF
17 An_SP in an ordinary line>and a HT.
Chris Webba347b172010-04-03 00:37:37 +010018 >A HT (%).
19 _>A SP and a HT (@%).
20 _>_A SP, a HT and a SP (@%).
Junio C Hamanod5a41642007-11-23 20:14:20 -080021 _______Seven SP.
22 ________Eight SP (#).
Chris Webba347b172010-04-03 00:37:37 +010023 _______>Seven SP and a HT (@%).
24 ________>Eight SP and a HT (@#%).
25 _______>_Seven SP, a HT and a SP (@%).
26 ________>_Eight SP, a HT and a SP (@#%).
Junio C Hamanod5a41642007-11-23 20:14:20 -080027 _______________Fifteen SP (#).
Chris Webba347b172010-04-03 00:37:37 +010028 _______________>Fifteen SP and a HT (@#%).
Johannes Sixtf4b05a42010-11-30 09:29:11 +010029 ________________Sixteen SP (#=).
30 ________________>Sixteen SP and a HT (@#%=).
Junio C Hamanod5a41642007-11-23 20:14:20 -080031 _____a__Five SP, a non WS, two SP.
32 A line with a (!) trailing SP_
33 A line with a (!) trailing HT>
34 EOF
35}
36
37apply_patch () {
Denton Liu37a63fa2020-01-06 23:53:13 -050038 cmd_prefix= &&
39 if test "x$1" = 'x!'
40 then
41 cmd_prefix=test_must_fail &&
42 shift
43 fi &&
Junio C Hamanod5a41642007-11-23 20:14:20 -080044 >target &&
45 sed -e "s|\([ab]\)/file|\1/target|" <patch |
Denton Liu37a63fa2020-01-06 23:53:13 -050046 $cmd_prefix git apply "$@"
Junio C Hamanod5a41642007-11-23 20:14:20 -080047}
48
49test_fix () {
Junio C Hamanod5a41642007-11-23 20:14:20 -080050 # fix should not barf
51 apply_patch --whitespace=fix || return 1
52
53 # find touched lines
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +000054 $DIFF file target | sed -n -e "s/^> //p" >fixed
Đoàn Trần Công Danhf73533a2020-03-26 11:37:37 +070055 # busybox's diff(1) doesn't output normal format
56 if ! test -s fixed
57 then
58 $DIFF -u file target |
59 grep -v '^+++ target' |
60 sed -ne "/^+/s/+//p" >fixed
61 fi
Junio C Hamanod5a41642007-11-23 20:14:20 -080062
Stefano Lattarini41ccfdd2013-04-12 00:36:10 +020063 # the changed lines are all expected to change
Junio C Hamanod5a41642007-11-23 20:14:20 -080064 fixed_cnt=$(wc -l <fixed)
65 case "$1" in
66 '') expect_cnt=$fixed_cnt ;;
67 ?*) expect_cnt=$(grep "[$1]" <fixed | wc -l) ;;
68 esac
69 test $fixed_cnt -eq $expect_cnt || return 1
70
71 # and we are not missing anything
72 case "$1" in
73 '') expect_cnt=0 ;;
74 ?*) expect_cnt=$(grep "[$1]" <file | wc -l) ;;
75 esac
76 test $fixed_cnt -eq $expect_cnt || return 1
77
78 # Get the patch actually applied
79 git diff-files -p target >fixed-patch
80 test -s fixed-patch && return 0
81
82 # Make sure it is complaint-free
83 >target
84 git apply --whitespace=error-all <fixed-patch
85
86}
87
88test_expect_success setup '
89
90 >file &&
91 git add file &&
92 prepare_test_file >file &&
93 git diff-files -p >patch &&
94 >target &&
95 git add target
96
97'
98
99test_expect_success 'whitespace=nowarn, default rule' '
100
101 apply_patch --whitespace=nowarn &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +0000102 test_cmp file target
Junio C Hamanod5a41642007-11-23 20:14:20 -0800103
104'
105
106test_expect_success 'whitespace=warn, default rule' '
107
108 apply_patch --whitespace=warn &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +0000109 test_cmp file target
Junio C Hamanod5a41642007-11-23 20:14:20 -0800110
111'
112
113test_expect_success 'whitespace=error-all, default rule' '
114
Denton Liu37a63fa2020-01-06 23:53:13 -0500115 apply_patch ! --whitespace=error-all &&
SZEDER Gáborec10b012018-08-19 23:57:22 +0200116 test_must_be_empty target
Junio C Hamanod5a41642007-11-23 20:14:20 -0800117
118'
119
120test_expect_success 'whitespace=error-all, no rule' '
121
122 git config core.whitespace -trailing,-space-before,-indent &&
123 apply_patch --whitespace=error-all &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +0000124 test_cmp file target
Junio C Hamanod5a41642007-11-23 20:14:20 -0800125
126'
127
Junio C Hamanocf1b7862007-12-06 00:14:14 -0800128test_expect_success 'whitespace=error-all, no rule (attribute)' '
129
130 git config --unset core.whitespace &&
131 echo "target -whitespace" >.gitattributes &&
132 apply_patch --whitespace=error-all &&
Gary V. Vaughan4fdf71b2010-05-14 09:31:37 +0000133 test_cmp file target
Junio C Hamanocf1b7862007-12-06 00:14:14 -0800134
135'
136
Johannes Sixtd35711a2010-11-30 09:22:04 +0100137test_expect_success 'spaces inserted by tab-in-indent' '
138
139 git config core.whitespace -trailing,-space,-indent,tab &&
140 rm -f .gitattributes &&
141 test_fix % &&
142 sed -e "s/_/ /g" -e "s/>/ /" <<-\EOF >expect &&
143 An_SP in an ordinary line>and a HT.
144 ________A HT (%).
145 ________A SP and a HT (@%).
146 _________A SP, a HT and a SP (@%).
147 _______Seven SP.
148 ________Eight SP (#).
149 ________Seven SP and a HT (@%).
150 ________________Eight SP and a HT (@#%).
151 _________Seven SP, a HT and a SP (@%).
152 _________________Eight SP, a HT and a SP (@#%).
153 _______________Fifteen SP (#).
154 ________________Fifteen SP and a HT (@#%).
Johannes Sixtf4b05a42010-11-30 09:29:11 +0100155 ________________Sixteen SP (#=).
156 ________________________Sixteen SP and a HT (@#%=).
Johannes Sixtd35711a2010-11-30 09:22:04 +0100157 _____a__Five SP, a non WS, two SP.
158 A line with a (!) trailing SP_
159 A line with a (!) trailing HT>
160 EOF
161 test_cmp expect target
162
163'
164
Junio C Hamanod5a41642007-11-23 20:14:20 -0800165for t in - ''
166do
167 case "$t" in '') tt='!' ;; *) tt= ;; esac
168 for s in - ''
169 do
170 case "$s" in '') ts='@' ;; *) ts= ;; esac
171 for i in - ''
172 do
Johannes Sixtf4b05a42010-11-30 09:29:11 +0100173 case "$i" in '') ti='#' ti16='=';; *) ti= ti16= ;; esac
Chris Webba347b172010-04-03 00:37:37 +0100174 for h in - ''
175 do
176 [ -z "$h$i" ] && continue
177 case "$h" in '') th='%' ;; *) th= ;; esac
178 rule=${t}trailing,${s}space,${i}indent,${h}tab
Junio C Hamanocf1b7862007-12-06 00:14:14 -0800179
Chris Webba347b172010-04-03 00:37:37 +0100180 rm -f .gitattributes
181 test_expect_success "rule=$rule" '
182 git config core.whitespace "$rule" &&
183 test_fix "$tt$ts$ti$th"
184 '
Junio C Hamanocf1b7862007-12-06 00:14:14 -0800185
Johannes Sixtf4b05a42010-11-30 09:29:11 +0100186 test_expect_success "rule=$rule,tabwidth=16" '
187 git config core.whitespace "$rule,tabwidth=16" &&
188 test_fix "$tt$ts$ti16$th"
189 '
190
Chris Webba347b172010-04-03 00:37:37 +0100191 test_expect_success "rule=$rule (attributes)" '
192 git config --unset core.whitespace &&
193 echo "target whitespace=$rule" >.gitattributes &&
194 test_fix "$tt$ts$ti$th"
195 '
Junio C Hamanocf1b7862007-12-06 00:14:14 -0800196
Johannes Sixtf4b05a42010-11-30 09:29:11 +0100197 test_expect_success "rule=$rule,tabwidth=16 (attributes)" '
198 echo "target whitespace=$rule,tabwidth=16" >.gitattributes &&
199 test_fix "$tt$ts$ti16$th"
200 '
201
Chris Webba347b172010-04-03 00:37:37 +0100202 done
Junio C Hamanod5a41642007-11-23 20:14:20 -0800203 done
204 done
205done
206
SZEDER Gábor735c6742009-07-22 19:24:38 -0500207create_patch () {
208 sed -e "s/_/ /" <<-\EOF
209 diff --git a/target b/target
210 index e69de29..8bd6648 100644
211 --- a/target
212 +++ b/target
Junio C Hamano422a82f2009-07-25 01:29:20 -0700213 @@ -0,0 +1,3 @@
214 +An empty line follows
215 +
SZEDER Gábor735c6742009-07-22 19:24:38 -0500216 +A line with trailing whitespace and no newline_
217 \ No newline at end of file
218 EOF
219}
220
221test_expect_success 'trailing whitespace & no newline at the end of file' '
222 >target &&
Junio C Hamano422a82f2009-07-25 01:29:20 -0700223 create_patch >patch-file &&
224 git apply --whitespace=fix patch-file &&
225 grep "newline$" target &&
226 grep "^$" target
SZEDER Gábor735c6742009-07-22 19:24:38 -0500227'
228
Junio C Hamanoef2035c2009-09-04 01:41:47 -0700229test_expect_success 'blank at EOF with --whitespace=fix (1)' '
Jonathan Nieder33fc5212010-10-31 02:41:08 -0500230 test_might_fail git config --unset core.whitespace &&
231 rm -f .gitattributes &&
Junio C Hamanoef2035c2009-09-04 01:41:47 -0700232
Eric Sunshine08495412021-12-09 00:11:05 -0500233 test_write_lines a b c >one &&
Junio C Hamanoef2035c2009-09-04 01:41:47 -0700234 git add one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500235 test_write_lines a b c >expect &&
Eric Sunshine7abcbcb2021-12-09 00:11:08 -0500236 { cat expect && echo; } >one &&
Junio C Hamanoef2035c2009-09-04 01:41:47 -0700237 git diff -- one >patch &&
238
239 git checkout one &&
240 git apply --whitespace=fix patch &&
241 test_cmp expect one
242'
243
244test_expect_success 'blank at EOF with --whitespace=fix (2)' '
Eric Sunshine08495412021-12-09 00:11:05 -0500245 test_write_lines a b c >one &&
Junio C Hamanoef2035c2009-09-04 01:41:47 -0700246 git add one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500247 test_write_lines a b >expect &&
248 { cat expect && test_write_lines "" ""; } >one &&
Junio C Hamanoef2035c2009-09-04 01:41:47 -0700249 git diff -- one >patch &&
250
251 git checkout one &&
252 git apply --whitespace=fix patch &&
253 test_cmp expect one
254'
255
Junio C Hamanoefa57442009-09-03 14:08:20 -0700256test_expect_success 'blank at EOF with --whitespace=fix (3)' '
Eric Sunshine08495412021-12-09 00:11:05 -0500257 test_write_lines a b "" >one &&
Junio C Hamanoefa57442009-09-03 14:08:20 -0700258 git add one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500259 test_write_lines a c "" >expect &&
260 { cat expect && test_write_lines "" ""; } >one &&
Junio C Hamanoefa57442009-09-03 14:08:20 -0700261 git diff -- one >patch &&
262
263 git checkout one &&
264 git apply --whitespace=fix patch &&
265 test_cmp expect one
266'
267
268test_expect_success 'blank at end of hunk, not at EOF with --whitespace=fix' '
Eric Sunshine08495412021-12-09 00:11:05 -0500269 test_write_lines a b "" "" "" "" "" d >one &&
Junio C Hamanoefa57442009-09-03 14:08:20 -0700270 git add one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500271 test_write_lines a b "" "" "" "" "" "" d >expect &&
Junio C Hamanoefa57442009-09-03 14:08:20 -0700272 cp expect one &&
273 git diff -- one >patch &&
274
275 git checkout one &&
276 git apply --whitespace=fix patch &&
277 test_cmp expect one
278'
279
Junio C Hamano77b15bb2009-09-03 16:02:32 -0700280test_expect_success 'blank at EOF with --whitespace=warn' '
Eric Sunshine08495412021-12-09 00:11:05 -0500281 test_write_lines a b c >one &&
Junio C Hamano77b15bb2009-09-03 16:02:32 -0700282 git add one &&
283 echo >>one &&
284 cat one >expect &&
285 git diff -- one >patch &&
286
287 git checkout one &&
288 git apply --whitespace=warn patch 2>error &&
289 test_cmp expect one &&
290 grep "new blank line at EOF" error
291'
292
293test_expect_success 'blank at EOF with --whitespace=error' '
Eric Sunshine08495412021-12-09 00:11:05 -0500294 test_write_lines a b c >one &&
Junio C Hamano77b15bb2009-09-03 16:02:32 -0700295 git add one &&
296 cat one >expect &&
297 echo >>one &&
298 git diff -- one >patch &&
299
300 git checkout one &&
301 test_must_fail git apply --whitespace=error patch 2>error &&
302 test_cmp expect one &&
303 grep "new blank line at EOF" error
304'
305
Junio C Hamano94ea0262009-09-04 02:25:57 -0700306test_expect_success 'blank but not empty at EOF' '
Eric Sunshine08495412021-12-09 00:11:05 -0500307 test_write_lines a b c >one &&
Junio C Hamano94ea0262009-09-04 02:25:57 -0700308 git add one &&
309 echo " " >>one &&
310 cat one >expect &&
311 git diff -- one >patch &&
312
313 git checkout one &&
314 git apply --whitespace=warn patch 2>error &&
315 test_cmp expect one &&
316 grep "new blank line at EOF" error
317'
318
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100319test_expect_success 'applying beyond EOF requires one non-blank context line' '
Eric Sunshine08495412021-12-09 00:11:05 -0500320 test_write_lines "" "" "" "" >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100321 git add one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500322 echo b >>one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100323 git diff -- one >patch &&
324
325 git checkout one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500326 test_write_lines a "" >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100327 cp one expect &&
328 test_must_fail git apply --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700329 test_cmp expect one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100330 test_must_fail git apply --ignore-space-change --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700331 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100332'
333
334test_expect_success 'tons of blanks at EOF should not apply' '
335 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
Eric Sunshinecbe1d9d2021-12-09 00:11:13 -0500336 test_write_lines "" "" "" "" || return 1
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100337 done >one &&
338 git add one &&
339 echo a >>one &&
340 git diff -- one >patch &&
341
342 >one &&
343 test_must_fail git apply --whitespace=fix patch &&
344 test_must_fail git apply --ignore-space-change --whitespace=fix patch
345'
346
347test_expect_success 'missing blank line at end with --whitespace=fix' '
348 echo a >one &&
349 echo >>one &&
350 git add one &&
351 echo b >>one &&
352 cp one expect &&
353 git diff -- one >patch &&
354 echo a >one &&
355 cp one saved-one &&
356 test_must_fail git apply patch &&
357 git apply --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700358 test_cmp expect one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100359 mv saved-one one &&
360 git apply --ignore-space-change --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700361 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100362'
363
364test_expect_success 'two missing blank lines at end with --whitespace=fix' '
Eric Sunshine08495412021-12-09 00:11:05 -0500365 test_write_lines a "" b c >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100366 cp one no-blank-lines &&
Eric Sunshine08495412021-12-09 00:11:05 -0500367 test_write_lines "" "" >>one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100368 git add one &&
369 echo d >>one &&
370 cp one expect &&
371 echo >>one &&
372 git diff -- one >patch &&
373 cp no-blank-lines one &&
374 test_must_fail git apply patch &&
375 git apply --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700376 test_cmp expect one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100377 mv no-blank-lines one &&
378 test_must_fail git apply patch &&
379 git apply --ignore-space-change --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700380 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100381'
382
Björn Gustavsson0c3ef982010-04-08 06:14:31 +0200383test_expect_success 'missing blank line at end, insert before end, --whitespace=fix' '
Eric Sunshine08495412021-12-09 00:11:05 -0500384 test_write_lines a "" >one &&
Björn Gustavsson0c3ef982010-04-08 06:14:31 +0200385 git add one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500386 test_write_lines b a "" >one &&
Björn Gustavsson0c3ef982010-04-08 06:14:31 +0200387 cp one expect &&
388 git diff -- one >patch &&
389 echo a >one &&
390 test_must_fail git apply patch &&
391 git apply --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700392 test_cmp expect one
Björn Gustavsson0c3ef982010-04-08 06:14:31 +0200393'
394
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100395test_expect_success 'shrink file with tons of missing blanks at end of file' '
Eric Sunshine08495412021-12-09 00:11:05 -0500396 test_write_lines a b c >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100397 cp one no-blank-lines &&
398 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
Eric Sunshinecbe1d9d2021-12-09 00:11:13 -0500399 test_write_lines "" "" "" "" || return 1
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100400 done >>one &&
401 git add one &&
402 echo a >one &&
403 cp one expect &&
404 git diff -- one >patch &&
405 cp no-blank-lines one &&
406 test_must_fail git apply patch &&
407 git apply --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700408 test_cmp expect one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100409 mv no-blank-lines one &&
410 git apply --ignore-space-change --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700411 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100412'
413
414test_expect_success 'missing blanks at EOF must only match blank lines' '
Eric Sunshine08495412021-12-09 00:11:05 -0500415 test_write_lines a b >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100416 git add one &&
Eric Sunshine08495412021-12-09 00:11:05 -0500417 test_write_lines c d >>one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100418 git diff -- one >patch &&
419
420 echo a >one &&
Jonathan Nieder2dec68c2010-10-31 02:30:58 -0500421 test_must_fail git apply patch &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100422 test_must_fail git apply --whitespace=fix patch &&
423 test_must_fail git apply --ignore-space-change --whitespace=fix patch
424'
425
426sed -e's/Z//' >one <<EOF
427a
428b
429c
430 Z
431EOF
432
433test_expect_success 'missing blank line should match context line with spaces' '
434 git add one &&
435 echo d >>one &&
436 git diff -- one >patch &&
Eric Sunshine08495412021-12-09 00:11:05 -0500437 test_write_lines a b c >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100438 cp one expect &&
Eric Sunshine08495412021-12-09 00:11:05 -0500439 test_write_lines "" d >>expect &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100440 git add one &&
441
442 git apply --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700443 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100444'
445
446sed -e's/Z//' >one <<EOF
447a
448b
449c
450 Z
451EOF
452
453test_expect_success 'same, but with the --ignore-space-option' '
454 git add one &&
455 echo d >>one &&
456 cp one expect &&
457 git diff -- one >patch &&
Eric Sunshine08495412021-12-09 00:11:05 -0500458 test_write_lines a b c >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100459 git add one &&
460
461 git checkout-index -f one &&
462 git apply --ignore-space-change --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700463 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100464'
465
466test_expect_success 'same, but with CR-LF line endings && cr-at-eol set' '
467 git config core.whitespace cr-at-eol &&
468 printf "a\r\n" >one &&
469 printf "b\r\n" >>one &&
470 printf "c\r\n" >>one &&
471 cp one save-one &&
Jonathan Nieder2dec68c2010-10-31 02:30:58 -0500472 printf " \r\n" >>one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100473 git add one &&
474 printf "d\r\n" >>one &&
475 cp one expect &&
476 git diff -- one >patch &&
477 mv save-one one &&
478
479 git apply --ignore-space-change --whitespace=fix patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700480 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100481'
482
Torsten Bögershausenc24f3ab2017-08-19 13:28:01 +0200483test_expect_success 'CR-LF line endings && add line && text=auto' '
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100484 git config --unset core.whitespace &&
485 printf "a\r\n" >one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100486 cp one save-one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100487 git add one &&
Torsten Bögershausenc24f3ab2017-08-19 13:28:01 +0200488 printf "b\r\n" >>one &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100489 cp one expect &&
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100490 git diff -- one >patch &&
491 mv save-one one &&
Torsten Bögershausenc24f3ab2017-08-19 13:28:01 +0200492 echo "one text=auto" >.gitattributes &&
493 git apply patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700494 test_cmp expect one
Torsten Bögershausenc24f3ab2017-08-19 13:28:01 +0200495'
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100496
Torsten Bögershausenc24f3ab2017-08-19 13:28:01 +0200497test_expect_success 'CR-LF line endings && change line && text=auto' '
498 printf "a\r\n" >one &&
499 cp one save-one &&
500 git add one &&
501 printf "b\r\n" >one &&
502 cp one expect &&
503 git diff -- one >patch &&
504 mv save-one one &&
505 echo "one text=auto" >.gitattributes &&
506 git apply patch &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700507 test_cmp expect one
Torsten Bögershausenc24f3ab2017-08-19 13:28:01 +0200508'
509
510test_expect_success 'LF in repo, CRLF in worktree && change line && text=auto' '
511 printf "a\n" >one &&
512 git add one &&
513 printf "b\r\n" >one &&
514 git diff -- one >patch &&
515 printf "a\r\n" >one &&
516 echo "one text=auto" >.gitattributes &&
517 git -c core.eol=CRLF apply patch &&
518 printf "b\r\n" >expect &&
Matthew DeVoredcbaa0b2018-10-05 14:54:04 -0700519 test_cmp expect one
Björn Gustavssonc1376c12010-03-06 15:31:04 +0100520'
521
Junio C Hamano250b3c62013-03-22 11:10:03 -0700522test_expect_success 'whitespace=fix to expand' '
523 qz_to_tab_space >preimage <<-\EOF &&
524 QQa
525 QQb
526 QQc
527 ZZZZZZZZZZZZZZZZd
528 QQe
529 QQf
530 QQg
531 EOF
532 qz_to_tab_space >patch <<-\EOF &&
533 diff --git a/preimage b/preimage
534 --- a/preimage
535 +++ b/preimage
536 @@ -1,7 +1,6 @@
537 QQa
538 QQb
539 QQc
540 -QQd
541 QQe
542 QQf
543 QQg
544 EOF
545 git -c core.whitespace=tab-in-indent apply --whitespace=fix patch
546'
547
Junio C Hamano477a08a2014-08-06 13:09:05 -0700548test_expect_success 'whitespace check skipped for excluded paths' '
549 git config core.whitespace blank-at-eol &&
550 >used &&
551 >unused &&
552 git add used unused &&
553 echo "used" >used &&
554 echo "unused " >unused &&
555 git diff-files -p used unused >patch &&
556 git apply --include=used --stat --whitespace=error <patch
557'
558
Junio C Hamanod5a41642007-11-23 20:14:20 -0800559test_done