1#!/bin/sh
2
3test_description='CRLF conversion all combinations'
4
5. ./test-lib.sh
6
7if ! test_have_prereq EXPENSIVE
8then
9 skip_all="EXPENSIVE not set"
10 test_done
11fi
12
13compare_files () {
14 tr '\015\000' QN <"$1" >"$1".expect &&
15 tr '\015\000' QN <"$2" >"$2".actual &&
16 test_cmp "$1".expect "$2".actual &&
17 rm "$1".expect "$2".actual
18}
19
20compare_ws_file () {
21 pfx=$1
22 exp=$2.expect
23 act=$pfx.actual.$3
24 tr '\015\000' QN <"$2" >"$exp" &&
25 tr '\015\000' QN <"$3" >"$act" &&
26 test_cmp $exp $act &&
27 rm $exp $act
28}
29
30create_gitattributes () {
31 attr=$1
32 case "$attr" in
33 auto)
34 echo "*.txt text=auto" >.gitattributes
35 ;;
36 text)
37 echo "*.txt text" >.gitattributes
38 ;;
39 -text)
40 echo "*.txt -text" >.gitattributes
41 ;;
42 crlf)
43 echo "*.txt eol=crlf" >.gitattributes
44 ;;
45 lf)
46 echo "*.txt eol=lf" >.gitattributes
47 ;;
48 "")
49 echo >.gitattributes
50 ;;
51 *)
52 echo >&2 invalid attribute: $attr
53 exit 1
54 ;;
55 esac
56}
57
58create_NNO_files () {
59 lfname=$1
60 crlfname=$2
61 lfmixcrlf=$3
62 lfmixcr=$4
63 crlfnul=$5
64 for crlf in false true input
65 do
66 for attr in "" auto text -text lf crlf
67 do
68 pfx=NNO_${crlf}_attr_${attr} &&
69 cp $lfname ${pfx}_LF.txt &&
70 cp $crlfname ${pfx}_CRLF.txt &&
71 cp $lfmixcrlf ${pfx}_CRLF_mix_LF.txt &&
72 cp $lfmixcr ${pfx}_LF_mix_CR.txt &&
73 cp $crlfnul ${pfx}_CRLF_nul.txt
74 done
75 done
76}
77
78check_warning () {
79 case "$1" in
80 LF_CRLF) echo "warning: LF will be replaced by CRLF" >"$2".expect ;;
81 CRLF_LF) echo "warning: CRLF will be replaced by LF" >"$2".expect ;;
82 '') >"$2".expect ;;
83 *) echo >&2 "Illegal 1": "$1" ; return false ;;
84 esac
85 grep "will be replaced by" "$2" | sed -e "s/\(.*\) in [^ ]*$/\1/" | uniq >"$2".actual
86 test_cmp "$2".expect "$2".actual
87}
88
89commit_check_warn () {
90 crlf=$1
91 attr=$2
92 lfname=$3
93 crlfname=$4
94 lfmixcrlf=$5
95 lfmixcr=$6
96 crlfnul=$7
97 pfx=crlf_${crlf}_attr_${attr}
98 create_gitattributes "$attr" &&
99 for f in LF CRLF repoMIX LF_mix_CR CRLF_mix_LF LF_nul CRLF_nul
100 do
101 fname=${pfx}_$f.txt &&
102 cp $f $fname &&
103 git -c core.autocrlf=$crlf add $fname 2>"${pfx}_$f.err"
104 done &&
105 git commit -m "core.autocrlf $crlf" &&
106 check_warning "$lfname" ${pfx}_LF.err &&
107 check_warning "$crlfname" ${pfx}_CRLF.err &&
108 check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err &&
109 check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err &&
110 check_warning "$crlfnul" ${pfx}_CRLF_nul.err
111}
112
113commit_chk_wrnNNO () {
114 crlf=$1
115 attr=$2
116 lfwarn=$3
117 crlfwarn=$4
118 lfmixcrlf=$5
119 lfmixcr=$6
120 crlfnul=$7
121 pfx=NNO_${crlf}_attr_${attr}
122 #Commit files on top of existing file
123 create_gitattributes "$attr" &&
124 for f in LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
125 do
126 fname=${pfx}_$f.txt &&
127 cp $f $fname &&
128 git -c core.autocrlf=$crlf add $fname 2>/dev/null &&
129 git -c core.autocrlf=$crlf commit -m "commit_$fname" $fname >"${pfx}_$f.err" 2>&1
130 done
131
132 test_expect_success "commit NNO files crlf=$crlf attr=$attr LF" '
133 check_warning "$lfwarn" ${pfx}_LF.err
134 '
135 test_expect_success "commit NNO files crlf=$crlf attr=$attr CRLF" '
136 check_warning "$crlfwarn" ${pfx}_CRLF.err
137 '
138
139 test_expect_success "commit NNO files crlf=$crlf attr=$attr CRLF_mix_LF" '
140 check_warning "$lfmixcrlf" ${pfx}_CRLF_mix_LF.err
141 '
142
143 test_expect_success "commit NNO files crlf=$crlf attr=$attr LF_mix_cr" '
144 check_warning "$lfmixcr" ${pfx}_LF_mix_CR.err
145 '
146
147 test_expect_success "commit NNO files crlf=$crlf attr=$attr CRLF_nul" '
148 check_warning "$crlfnul" ${pfx}_CRLF_nul.err
149 '
150}
151
152check_files_in_repo () {
153 crlf=$1
154 attr=$2
155 lfname=$3
156 crlfname=$4
157 lfmixcrlf=$5
158 lfmixcr=$6
159 crlfnul=$7
160 pfx=crlf_${crlf}_attr_${attr}_ &&
161 compare_files $lfname ${pfx}LF.txt &&
162 compare_files $crlfname ${pfx}CRLF.txt &&
163 compare_files $lfmixcrlf ${pfx}CRLF_mix_LF.txt &&
164 compare_files $lfmixcr ${pfx}LF_mix_CR.txt &&
165 compare_files $crlfnul ${pfx}CRLF_nul.txt
166}
167
168check_in_repo_NNO () {
169 crlf=$1
170 attr=$2
171 lfname=$3
172 crlfname=$4
173 lfmixcrlf=$5
174 lfmixcr=$6
175 crlfnul=$7
176 pfx=NNO_${crlf}_attr_${attr}_
177 test_expect_success "compare_files $lfname ${pfx}LF.txt" '
178 compare_files $lfname ${pfx}LF.txt
179 '
180 test_expect_success "compare_files $crlfname ${pfx}CRLF.txt" '
181 compare_files $crlfname ${pfx}CRLF.txt
182 '
183 test_expect_success "compare_files $lfmixcrlf ${pfx}CRLF_mix_LF.txt" '
184 compare_files $lfmixcrlf ${pfx}CRLF_mix_LF.txt
185 '
186 test_expect_success "compare_files $lfmixcr ${pfx}LF_mix_CR.txt" '
187 compare_files $lfmixcr ${pfx}LF_mix_CR.txt
188 '
189 test_expect_success "compare_files $crlfnul ${pfx}CRLF_nul.txt" '
190 compare_files $crlfnul ${pfx}CRLF_nul.txt
191 '
192}
193
194checkout_files () {
195 eol=$1
196 crlf=$2
197 attr=$3
198 lfname=$4
199 crlfname=$5
200 lfmixcrlf=$6
201 lfmixcr=$7
202 crlfnul=$8
203 create_gitattributes $attr &&
204 git config core.autocrlf $crlf &&
205 pfx=eol_${eol}_crlf_${crlf}_attr_${attr}_ &&
206 src=crlf_false_attr__ &&
207 for f in LF CRLF LF_mix_CR CRLF_mix_LF LF_nul
208 do
209 rm $src$f.txt &&
210 if test -z "$eol"; then
211 git checkout $src$f.txt
212 else
213 git -c core.eol=$eol checkout $src$f.txt
214 fi
215 done
216
217 test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF" "
218 compare_ws_file $pfx $lfname ${src}LF.txt
219 "
220 test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF" "
221 compare_ws_file $pfx $crlfname ${src}CRLF.txt
222 "
223 test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_mix_LF" "
224 compare_ws_file $pfx $lfmixcrlf ${src}CRLF_mix_LF.txt
225 "
226 test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_mix_CR" "
227 compare_ws_file $pfx $lfmixcr ${src}LF_mix_CR.txt
228 "
229 test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_nul" "
230 compare_ws_file $pfx $crlfnul ${src}LF_nul.txt
231 "
232}
233
234#######
235test_expect_success 'setup master' '
236 echo >.gitattributes &&
237 git checkout -b master &&
238 git add .gitattributes &&
239 git commit -m "add .gitattributes" "" &&
240 printf "line1\nline2\nline3" >LF &&
241 printf "line1\r\nline2\r\nline3" >CRLF &&
242 printf "line1\r\nline2\nline3" >repoMIX &&
243 printf "line1\r\nline2\nline3" >CRLF_mix_LF &&
244 printf "line1\nline2\rline3" >LF_mix_CR &&
245 printf "line1\r\nline2\rline3" >CRLF_mix_CR &&
246 printf "line1Q\r\nline2\r\nline3" | q_to_nul >CRLF_nul &&
247 printf "line1Q\nline2\nline3" | q_to_nul >LF_nul &&
248 create_NNO_files CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF CRLF_mix_LF &&
249 git -c core.autocrlf=false add NNO_*.txt &&
250 git commit -m "mixed line endings" &&
251 test_tick
252'
253
254
255
256warn_LF_CRLF="LF will be replaced by CRLF"
257warn_CRLF_LF="CRLF will be replaced by LF"
258
259# WILC stands for "Warn if (this OS) converts LF into CRLF".
260# WICL: Warn if CRLF becomes LF
261# WAMIX: Mixed line endings: either CRLF->LF or LF->CRLF
262if test_have_prereq NATIVE_CRLF
263then
264 WILC=LF_CRLF
265 WICL=
266 WAMIX=LF_CRLF
267else
268 WILC=
269 WICL=CRLF_LF
270 WAMIX=CRLF_LF
271fi
272
273# attr LF CRLF CRLFmixLF LFmixCR CRLFNUL
274test_expect_success 'commit files empty attr' '
275 commit_check_warn false "" "" "" "" "" "" &&
276 commit_check_warn true "" "LF_CRLF" "" "LF_CRLF" "" "" &&
277 commit_check_warn input "" "" "CRLF_LF" "CRLF_LF" "" ""
278'
279
280test_expect_success 'commit files attr=auto' '
281 commit_check_warn false "auto" "$WILC" "$WICL" "$WAMIX" "" "" &&
282 commit_check_warn true "auto" "LF_CRLF" "" "LF_CRLF" "" "" &&
283 commit_check_warn input "auto" "" "CRLF_LF" "CRLF_LF" "" ""
284'
285
286test_expect_success 'commit files attr=text' '
287 commit_check_warn false "text" "$WILC" "$WICL" "$WAMIX" "$WILC" "$WICL" &&
288 commit_check_warn true "text" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
289 commit_check_warn input "text" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
290'
291
292test_expect_success 'commit files attr=-text' '
293 commit_check_warn false "-text" "" "" "" "" "" &&
294 commit_check_warn true "-text" "" "" "" "" "" &&
295 commit_check_warn input "-text" "" "" "" "" ""
296'
297
298test_expect_success 'commit files attr=lf' '
299 commit_check_warn false "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
300 commit_check_warn true "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
301 commit_check_warn input "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
302'
303
304test_expect_success 'commit files attr=crlf' '
305 commit_check_warn false "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
306 commit_check_warn true "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
307 commit_check_warn input "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
308'
309
310# attr LF CRLF CRLFmixLF LF_mix_CR CRLFNUL
311commit_chk_wrnNNO false "" "" "" "" "" ""
312commit_chk_wrnNNO true "" "LF_CRLF" "" "" "" ""
313commit_chk_wrnNNO input "" "" "" "" "" ""
314
315
316commit_chk_wrnNNO false "auto" "$WILC" "$WICL" "$WAMIX" "" ""
317commit_chk_wrnNNO true "auto" "LF_CRLF" "" "LF_CRLF" "" ""
318commit_chk_wrnNNO input "auto" "" "CRLF_LF" "CRLF_LF" "" ""
319
320commit_chk_wrnNNO false "text" "$WILC" "$WICL" "$WAMIX" "$WILC" "$WICL"
321commit_chk_wrnNNO true "text" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
322commit_chk_wrnNNO input "text" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
323
324commit_chk_wrnNNO false "-text" "" "" "" "" ""
325commit_chk_wrnNNO true "-text" "" "" "" "" ""
326commit_chk_wrnNNO input "-text" "" "" "" "" ""
327
328commit_chk_wrnNNO false "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
329commit_chk_wrnNNO true "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
330commit_chk_wrnNNO input "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
331
332commit_chk_wrnNNO false "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
333commit_chk_wrnNNO true "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
334commit_chk_wrnNNO input "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
335
336test_expect_success 'create files cleanup' '
337 rm -f *.txt &&
338 git -c core.autocrlf=false reset --hard
339'
340
341test_expect_success 'commit empty gitattribues' '
342 check_files_in_repo false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&
343 check_files_in_repo true "" LF LF LF LF_mix_CR CRLF_nul &&
344 check_files_in_repo input "" LF LF LF LF_mix_CR CRLF_nul
345'
346
347test_expect_success 'commit text=auto' '
348 check_files_in_repo false "auto" LF LF LF LF_mix_CR CRLF_nul &&
349 check_files_in_repo true "auto" LF LF LF LF_mix_CR CRLF_nul &&
350 check_files_in_repo input "auto" LF LF LF LF_mix_CR CRLF_nul
351'
352
353test_expect_success 'commit text' '
354 check_files_in_repo false "text" LF LF LF LF_mix_CR LF_nul &&
355 check_files_in_repo true "text" LF LF LF LF_mix_CR LF_nul &&
356 check_files_in_repo input "text" LF LF LF LF_mix_CR LF_nul
357'
358
359test_expect_success 'commit -text' '
360 check_files_in_repo false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&
361 check_files_in_repo true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul &&
362 check_files_in_repo input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
363'
364
365# attr LF CRLF CRLF_mix_LF LF_mix_CR CRLFNUL
366check_in_repo_NNO false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
367check_in_repo_NNO true "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
368check_in_repo_NNO input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
369
370check_in_repo_NNO false "auto" LF LF LF LF_mix_CR CRLF_nul
371check_in_repo_NNO true "auto" LF LF LF LF_mix_CR CRLF_nul
372check_in_repo_NNO input "auto" LF LF LF LF_mix_CR CRLF_nul
373
374check_in_repo_NNO false "text" LF LF LF LF_mix_CR LF_nul
375check_in_repo_NNO true "text" LF LF LF LF_mix_CR LF_nul
376check_in_repo_NNO input "text" LF LF LF LF_mix_CR LF_nul
377
378check_in_repo_NNO false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
379check_in_repo_NNO true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
380check_in_repo_NNO input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
381
382
383################################################################################
384# Check how files in the repo are changed when they are checked out
385# How to read the table below:
386# - checkout_files will check multiple files with a combination of settings
387# and attributes (core.autocrlf=input is forbidden with core.eol=crlf)
388# - parameter $1 : core.eol lf | crlf
389# - parameter $2 : core.autocrlf false | true | input
390# - parameter $3 : text in .gitattributs "" (empty) | auto | text | -text
391# - parameter $4 : reference for a file with only LF in the repo
392# - parameter $5 : reference for a file with only CRLF in the repo
393# - parameter $6 : reference for a file with mixed LF and CRLF in the repo
394# - parameter $7 : reference for a file with LF and CR in the repo (does somebody uses this ?)
395# - parameter $8 : reference for a file with CRLF and a NUL (should be handled as binary when auto)
396
397# What we have in the repo:
398# ----------------- EOL in repo ----------------
399# LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
400# settings with checkout:
401# core. core. .gitattr
402# eol acrlf
403# ----------------------------------------------
404# What we want to have in the working tree:
405if test_have_prereq NATIVE_CRLF
406then
407MIX_CRLF_LF=CRLF
408MIX_LF_CR=CRLF_mix_CR
409NL=CRLF
410LFNUL=CRLF_nul
411else
412MIX_CRLF_LF=CRLF_mix_LF
413MIX_LF_CR=LF_mix_CR
414NL=LF
415LFNUL=LF_nul
416fi
417export CRLF_MIX_LF_CR MIX NL
418
419checkout_files lf false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
420checkout_files lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
421checkout_files lf input "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
422checkout_files lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
423checkout_files lf true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
424checkout_files lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
425checkout_files lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
426checkout_files lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
427checkout_files lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
428checkout_files lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
429checkout_files lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
430checkout_files lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
431checkout_files lf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
432checkout_files lf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
433checkout_files lf input "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
434checkout_files lf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
435checkout_files lf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
436checkout_files lf input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
437
438checkout_files crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
439checkout_files crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
440checkout_files crlf false "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
441checkout_files crlf true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
442checkout_files crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
443checkout_files crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
444checkout_files crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
445checkout_files crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
446checkout_files crlf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
447checkout_files crlf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
448checkout_files crlf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
449checkout_files crlf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
450
451checkout_files "" false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
452checkout_files "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
453checkout_files "" input "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
454checkout_files "" false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR LF_nul
455checkout_files "" true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
456checkout_files "" input "auto" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
457checkout_files "" false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR $LFNUL
458checkout_files "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
459checkout_files "" input "text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
460checkout_files "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
461checkout_files "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
462checkout_files "" input "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
463checkout_files "" false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
464checkout_files "" true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
465checkout_files "" input "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
466checkout_files "" false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
467checkout_files "" true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
468checkout_files "" input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
469
470checkout_files native false "" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
471checkout_files native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR LF_nul
472checkout_files native false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR LF_nul
473checkout_files native true "auto" CRLF CRLF CRLF LF_mix_CR LF_nul
474checkout_files native false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR $LFNUL
475checkout_files native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
476checkout_files native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
477checkout_files native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
478checkout_files native false "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
479checkout_files native true "lf" LF CRLF CRLF_mix_LF LF_mix_CR LF_nul
480checkout_files native false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
481checkout_files native true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
482
483test_done