t0027: Add repoMIX and LF_nul

"new safer autocrlf handling": - Check if eols in a file are converted at commit, when the file has CR (or CRLF) in the repo (technically speaking in the index). - Add a test-file repoMIX with mixed line-endings. - When converting LF->CRLF or CRLF->LF: check the warnings checkout_files(): - Checking out CRLF_nul and checking for eol coversion does not make much sense (CRLF will stay CRLF). - Use the file LF_nul instead: It is handled a binary in "auto" modes, and when declared as text the LF may be replaced with CRLF, depending on the configuration. Signed-off-by: Torsten Bögershausen <tboegi@web.de> Acked-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Torsten Bögershausen committed Apr 25, 2015 at 08:47 UTC 8eeab92f02f3d9382572f0a604535c2b134c6763
1 file changed +85 -72
t/t0027-auto-crlf.sh
+85 -72
@@ -71,12 +71,21 @@ commit_check_warn () {
71 attr=$2
72 lfname=$3
73 crlfname=$4
74 - lfmixcrlf=$5
75 - lfmixcr=$6
76 - crlfnul=$7
77 - create_gitattributes "$attr" &&
74 + repoMIX=$5
75 + lfmixcrlf=$6
76 + lfmixcr=$7
77 + crlfnul=$8
78 pfx=crlf_${crlf}_attr_${attr}
79 - for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
79 + # Special handling for repoMIX: It should already be in the repo
80 + # with CRLF
81 + f=repoMIX
82 + fname=${pfx}_$f.txt
83 + echo >.gitattributes &&
84 + cp $f $fname &&
85 + git -c core.autocrlf=false add $fname 2>"${pfx}_$f.err" &&
86 + git commit -m "repoMIX" &&
87 + create_gitattributes "$attr" &&
88 + for f in LF CRLF repoMIX LF_mix_CR CRLF_mix_LF LF_nul CRLF_nul
89 do
90 fname=${pfx}_$f.txt &&
91 cp $f $fname &&
@@ -120,7 +129,7 @@ checkout_files () {
129 git config core.autocrlf $crlf &&
130 pfx=eol_${eol}_crlf_${crlf}_attr_${attr}_ &&
131 src=crlf_false_attr__ &&
123 - for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
132 + for f in LF CRLF LF_mix_CR CRLF_mix_LF LF_nul
133 do
134 rm $src$f.txt &&
135 if test -z "$eol"; then
@@ -142,8 +151,8 @@ checkout_files () {
151 test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_mix_CR" "
152 compare_ws_file $pfx $lfmixcr ${src}LF_mix_CR.txt
153 "
145 - test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_nul" "
146 - compare_ws_file $pfx $crlfnul ${src}CRLF_nul.txt
154 + test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_nul" "
155 + compare_ws_file $pfx $crlfnul ${src}LF_nul.txt
156 "
157 }
158
@@ -155,6 +164,7 @@ test_expect_success 'setup master' '
164 git commit -m "add .gitattributes" "" &&
165 printf "line1\nline2\nline3" >LF &&
166 printf "line1\r\nline2\r\nline3" >CRLF &&
167 + printf "line1\r\nline2\nline3" >repoMIX &&
168 printf "line1\r\nline2\nline3" >CRLF_mix_LF &&
169 printf "line1\nline2\rline3" >LF_mix_CR &&
170 printf "line1\r\nline2\rline3" >CRLF_mix_CR &&
@@ -181,40 +191,41 @@ else
191 WAMIX=CRLF_LF
192 fi
193
194 +# attr LF CRLF repoMIX CRLFmixLF LFmixCR CRLFNUL
195 test_expect_success 'commit files empty attr' '
185 - commit_check_warn false "" "" "" "" "" "" &&
186 - commit_check_warn true "" "LF_CRLF" "" "LF_CRLF" "" "" &&
187 - commit_check_warn input "" "" "CRLF_LF" "CRLF_LF" "" ""
196 + commit_check_warn false "" "" "" "" "" "" "" &&
197 + commit_check_warn true "" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" "" &&
198 + commit_check_warn input "" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" ""
199 '
200
201 test_expect_success 'commit files attr=auto' '
191 - commit_check_warn false "auto" "$WILC" "$WICL" "$WAMIX" "" "" &&
192 - commit_check_warn true "auto" "LF_CRLF" "" "LF_CRLF" "" "" &&
193 - commit_check_warn input "auto" "" "CRLF_LF" "CRLF_LF" "" ""
202 + commit_check_warn false "auto" "$WILC" "$WICL" "$WAMIX" "$WAMIX" "" "" &&
203 + commit_check_warn true "auto" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" "" &&
204 + commit_check_warn input "auto" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" ""
205 '
206
207 test_expect_success 'commit files attr=text' '
197 - commit_check_warn false "text" "$WILC" "$WICL" "$WAMIX" "$WILC" "$WICL" &&
198 - commit_check_warn true "text" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
199 - commit_check_warn input "text" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
208 + commit_check_warn false "text" "$WILC" "$WICL" "$WAMIX" "$WAMIX" "$WILC" "$WICL" &&
209 + commit_check_warn true "text" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" "" &&
210 + commit_check_warn input "text" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
211 '
212
213 test_expect_success 'commit files attr=-text' '
203 - commit_check_warn false "-text" "" "" "" "" "" &&
204 - commit_check_warn true "-text" "" "" "" "" "" &&
205 - commit_check_warn input "-text" "" "" "" "" ""
214 + commit_check_warn false "-text" "" "" "" "" "" "" &&
215 + commit_check_warn true "-text" "" "" "" "" "" "" &&
216 + commit_check_warn input "-text" "" "" "" "" "" ""
217 '
218
219 test_expect_success 'commit files attr=lf' '
209 - commit_check_warn false "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
210 - commit_check_warn true "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
211 - commit_check_warn input "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
220 + commit_check_warn false "lf" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
221 + commit_check_warn true "lf" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
222 + commit_check_warn input "lf" "" "CRLF_LF" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
223 '
224
225 test_expect_success 'commit files attr=crlf' '
215 - commit_check_warn false "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
216 - commit_check_warn true "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
217 - commit_check_warn input "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
226 + commit_check_warn false "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" "" &&
227 + commit_check_warn true "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" "" &&
228 + commit_check_warn input "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "LF_CRLF" ""
229 '
230
231 test_expect_success 'create files cleanup' '
@@ -268,79 +279,81 @@ test_expect_success 'commit -text' '
279 # eol acrlf
280 # ----------------------------------------------
281 # What we want to have in the working tree:
271 -if test_have_prereq MINGW
282 +if test_have_prereq NATIVE_CRLF
283 then
284 MIX_CRLF_LF=CRLF
285 MIX_LF_CR=CRLF_mix_CR
286 NL=CRLF
287 +LFNUL=CRLF_nul
288 else
289 MIX_CRLF_LF=CRLF_mix_LF
290 MIX_LF_CR=LF_mix_CR
291 NL=LF
292 +LFNUL=LF_nul
293 fi
294 export CRLF_MIX_LF_CR MIX NL
295
283 -checkout_files lf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
284 -checkout_files lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
285 -checkout_files lf input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
286 -checkout_files lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
287 -checkout_files lf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
288 -checkout_files lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
289 -checkout_files lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
296 +checkout_files lf false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
297 +checkout_files lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
298 +checkout_files lf input "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
299 +checkout_files lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
300 +checkout_files lf true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
301 +checkout_files lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
302 +checkout_files lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
303 checkout_files lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
291 -checkout_files lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
292 -checkout_files lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
293 -checkout_files lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
294 -checkout_files lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
295 -checkout_files lf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
296 -checkout_files lf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
297 -checkout_files lf input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
304 +checkout_files lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
305 +checkout_files lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
306 +checkout_files lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
307 +checkout_files lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
308 +checkout_files lf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
309 +checkout_files lf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
310 +checkout_files lf input "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
311 checkout_files lf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
312 checkout_files lf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
313 checkout_files lf input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
314
302 -checkout_files crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
303 -checkout_files crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
304 -checkout_files crlf false "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
305 -checkout_files crlf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
315 +checkout_files crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
316 +checkout_files crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
317 +checkout_files crlf false "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
318 +checkout_files crlf true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
319 checkout_files crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
320 checkout_files crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
308 -checkout_files crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
309 -checkout_files crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
310 -checkout_files crlf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
311 -checkout_files crlf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
321 +checkout_files crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
322 +checkout_files crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
323 +checkout_files crlf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
324 +checkout_files crlf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
325 checkout_files crlf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
326 checkout_files crlf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
327
315 -checkout_files "" false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
316 -checkout_files "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
317 -checkout_files "" input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
318 -checkout_files "" false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
319 -checkout_files "" true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
320 -checkout_files "" input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
321 -checkout_files "" false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
328 +checkout_files "" false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
329 +checkout_files "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
330 +checkout_files "" input "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
331 +checkout_files "" false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR LF_nul
332 +checkout_files "" true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
333 +checkout_files "" input "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
334 +checkout_files "" false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR $LFNUL
335 checkout_files "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
323 -checkout_files "" input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
324 -checkout_files "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
325 -checkout_files "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
326 -checkout_files "" input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
327 -checkout_files "" false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
328 -checkout_files "" true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
329 -checkout_files "" input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
336 +checkout_files "" input "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
337 +checkout_files "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
338 +checkout_files "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
339 +checkout_files "" input "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
340 +checkout_files "" false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
341 +checkout_files "" true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
342 +checkout_files "" input "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
343 checkout_files "" false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
344 checkout_files "" true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
345 checkout_files "" input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
346
334 -checkout_files native false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
335 -checkout_files native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
336 -checkout_files native false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
337 -checkout_files native true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
338 -checkout_files native false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
347 +checkout_files native false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
348 +checkout_files native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
349 +checkout_files native false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR LF_nul
350 +checkout_files native true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
351 +checkout_files native false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR $LFNUL
352 checkout_files native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
340 -checkout_files native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
341 -checkout_files native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
342 -checkout_files native false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
343 -checkout_files native true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
353 +checkout_files native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
354 +checkout_files native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
355 +checkout_files native false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
356 +checkout_files native true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
357 checkout_files native false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
358 checkout_files native true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
359