@@ -57,28 +57,35 @@ create_gitattributes () {
5757
5858check_warning () {
5959 case " $1 " in
60- LF_CRLF) grep " LF will be replaced by CRLF" $2 ;;
61- CRLF_LF) grep " CRLF will be replaced by LF" $2 ;;
62- ' ' )
63- > expect
64- grep " will be replaced by" $2 > actual
65- test_cmp expect actual
66- ;;
67- * ) false ;;
60+ LF_CRLF) echo " warning: LF will be replaced by CRLF" > " $2 " .expect ;;
61+ CRLF_LF) echo " warning: CRLF will be replaced by LF" > " $2 " .expect ;;
62+ ' ' ) > " $2 " .expect ;;
63+ * ) echo >&2 " Illegal 1" : " $1 " ; return false ;;
6864 esac
65+ grep " will be replaced by" " $2 " | sed -e " s/\(.*\) in [^ ]*$/\1/" > " $2 " .actual
66+ test_cmp " $2 " .expect " $2 " .actual
6967}
7068
71- create_file_in_repo () {
69+ commit_check_warn () {
7270 crlf=$1
7371 attr=$2
7472 lfname=$3
7573 crlfname=$4
76- lfmixcrlf =$5
77- lfmixcr =$6
78- crlfnul =$7
79- create_gitattributes " $attr " &&
74+ repoMIX =$5
75+ lfmixcrlf =$6
76+ lfmixcr =$7
77+ crlfnul= $8
8078 pfx=crlf_${crlf} _attr_${attr}
81- 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
8289 do
8390 fname=${pfx} _$f .txt &&
8491 cp $f $fname &&
@@ -109,7 +116,7 @@ check_files_in_repo () {
109116}
110117
111118
112- check_files_in_ws () {
119+ checkout_files () {
113120 eol=$1
114121 crlf=$2
115122 attr=$3
@@ -122,7 +129,7 @@ check_files_in_ws () {
122129 git config core.autocrlf $crlf &&
123130 pfx=eol_${eol} _crlf_${crlf} _attr_${attr} _ &&
124131 src=crlf_false_attr__ &&
125- 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
126133 do
127134 rm $src$f .txt &&
128135 if test -z " $eol " ; then
@@ -144,8 +151,8 @@ check_files_in_ws () {
144151 test_expect_success " checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_mix_CR" "
145152 compare_ws_file $pfx $lfmixcr ${src} LF_mix_CR.txt
146153 "
147- test_expect_success " checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_nul " "
148- 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
149156 "
150157}
151158
@@ -157,6 +164,7 @@ test_expect_success 'setup master' '
157164 git commit -m "add .gitattributes" "" &&
158165 printf "line1\nline2\nline3" >LF &&
159166 printf "line1\r\nline2\r\nline3" >CRLF &&
167+ printf "line1\r\nline2\nline3" >repoMIX &&
160168 printf "line1\r\nline2\nline3" >CRLF_mix_LF &&
161169 printf "line1\nline2\rline3" >LF_mix_CR &&
162170 printf "line1\r\nline2\rline3" >CRLF_mix_CR &&
@@ -169,40 +177,55 @@ test_expect_success 'setup master' '
169177warn_LF_CRLF=" LF will be replaced by CRLF"
170178warn_CRLF_LF=" CRLF will be replaced by LF"
171179
172- test_expect_success ' add files empty attr' '
173- create_file_in_repo false "" "" "" "" "" "" &&
174- create_file_in_repo true "" "LF_CRLF" "" "LF_CRLF" "" "" &&
175- create_file_in_repo input "" "" "CRLF_LF" "CRLF_LF" "" ""
180+ # WILC stands for "Warn if (this OS) converts LF into CRLF".
181+ # WICL: Warn if CRLF becomes LF
182+ # WAMIX: Mixed line endings: either CRLF->LF or LF->CRLF
183+ if test_have_prereq NATIVE_CRLF
184+ then
185+ WILC=LF_CRLF
186+ WICL=
187+ WAMIX=LF_CRLF
188+ else
189+ WILC=
190+ WICL=CRLF_LF
191+ WAMIX=CRLF_LF
192+ fi
193+
194+ # attr LF CRLF repoMIX CRLFmixLF LFmixCR CRLFNUL
195+ test_expect_success ' commit files empty attr' '
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" "" ""
176199'
177200
178- test_expect_success ' add files attr=auto' '
179- create_file_in_repo false "auto" "" "CRLF_LF" "CRLF_LF" "" "" &&
180- create_file_in_repo true "auto" "LF_CRLF" "" "LF_CRLF" "" "" &&
181- create_file_in_repo input "auto" "" "CRLF_LF" "CRLF_LF" "" ""
201+ test_expect_success ' commit files attr=auto' '
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" "" ""
182205'
183206
184- test_expect_success ' add files attr=text' '
185- create_file_in_repo false "text" "" "CRLF_LF" "CRLF_LF" " " "CRLF_LF" &&
186- create_file_in_repo true "text" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
187- create_file_in_repo input "text" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
207+ test_expect_success ' commit files attr=text' '
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"
188211'
189212
190- test_expect_success ' add files attr=-text' '
191- create_file_in_repo false "-text" "" "" "" "" "" &&
192- create_file_in_repo true "-text" "" "" "" "" "" &&
193- create_file_in_repo input "-text" "" "" "" "" ""
213+ test_expect_success ' commit files attr=-text' '
214+ commit_check_warn false "-text" "" "" "" "" "" "" &&
215+ commit_check_warn true "-text" "" "" "" "" "" "" &&
216+ commit_check_warn input "-text" "" "" "" "" "" ""
194217'
195218
196- test_expect_success ' add files attr=lf' '
197- create_file_in_repo false "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
198- create_file_in_repo true "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF" &&
199- create_file_in_repo input "lf" "" "CRLF_LF" "CRLF_LF" "" "CRLF_LF"
219+ test_expect_success ' commit files attr=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"
200223'
201224
202- test_expect_success ' add files attr=crlf' '
203- create_file_in_repo false "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
204- create_file_in_repo true "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" "" &&
205- create_file_in_repo input "crlf" "LF_CRLF" "" "LF_CRLF" "LF_CRLF" ""
225+ test_expect_success ' commit files attr=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" ""
206229'
207230
208231test_expect_success ' create files cleanup' '
@@ -237,7 +260,7 @@ test_expect_success 'commit -text' '
237260# ###############################################################################
238261# Check how files in the repo are changed when they are checked out
239262# How to read the table below:
240- # - check_files_in_ws will check multiple files with a combination of settings
263+ # - checkout_files will check multiple files with a combination of settings
241264# and attributes (core.autocrlf=input is forbidden with core.eol=crlf)
242265# - parameter $1 : core.eol lf | crlf
243266# - parameter $2 : core.autocrlf false | true | input
@@ -249,87 +272,89 @@ test_expect_success 'commit -text' '
249272# - parameter $8 : reference for a file with CRLF and a NUL (should be handled as binary when auto)
250273
251274# What we have in the repo:
252- # ----------------- EOL in repo ----------------
253- # LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
275+ # ----------------- EOL in repo ----------------
276+ # LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
254277# settings with checkout:
255278# core. core. .gitattr
256279# eol acrlf
257280# ----------------------------------------------
258281# What we want to have in the working tree:
259- if test_have_prereq MINGW
282+ if test_have_prereq NATIVE_CRLF
260283then
261284MIX_CRLF_LF=CRLF
262285MIX_LF_CR=CRLF_mix_CR
263286NL=CRLF
287+ LFNUL=CRLF_nul
264288else
265289MIX_CRLF_LF=CRLF_mix_LF
266290MIX_LF_CR=LF_mix_CR
267291NL=LF
292+ LFNUL=LF_nul
268293fi
269294export CRLF_MIX_LF_CR MIX NL
270295
271- check_files_in_ws lf false " " LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
272- check_files_in_ws lf true " " CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
273- check_files_in_ws lf input " " LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
274- check_files_in_ws lf false " auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
275- check_files_in_ws lf true " auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
276- check_files_in_ws lf input " auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
277- check_files_in_ws lf false " text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
278- check_files_in_ws lf true " text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
279- check_files_in_ws lf input " text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
280- check_files_in_ws lf false " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
281- check_files_in_ws lf true " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
282- check_files_in_ws lf input " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
283- check_files_in_ws lf false " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
284- check_files_in_ws lf true " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
285- check_files_in_ws lf input " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
286- check_files_in_ws lf false " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
287- check_files_in_ws lf true " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
288- check_files_in_ws lf input " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
289-
290- check_files_in_ws crlf false " " LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
291- check_files_in_ws crlf true " " CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
292- check_files_in_ws crlf false " auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
293- check_files_in_ws crlf true " auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
294- check_files_in_ws crlf false " text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
295- check_files_in_ws crlf true " text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
296- check_files_in_ws crlf false " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
297- check_files_in_ws crlf true " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
298- check_files_in_ws crlf false " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
299- check_files_in_ws crlf true " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
300- check_files_in_ws crlf false " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
301- check_files_in_ws crlf true " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
302-
303- check_files_in_ws " " false " " LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
304- check_files_in_ws " " true " " CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
305- check_files_in_ws " " input " " LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
306- check_files_in_ws " " false " auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
307- check_files_in_ws " " true " auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
308- check_files_in_ws " " input " auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
309- check_files_in_ws " " false " text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
310- check_files_in_ws " " true " text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
311- check_files_in_ws " " input " text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
312- check_files_in_ws " " false " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
313- check_files_in_ws " " true " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
314- check_files_in_ws " " input " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
315- check_files_in_ws " " false " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
316- check_files_in_ws " " true " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
317- check_files_in_ws " " input " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
318- check_files_in_ws " " false " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
319- check_files_in_ws " " true " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
320- check_files_in_ws " " input " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
321-
322- check_files_in_ws native false " " LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
323- check_files_in_ws native true " " CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
324- check_files_in_ws native false " auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
325- check_files_in_ws native true " auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
326- check_files_in_ws native false " text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
327- check_files_in_ws native true " text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
328- check_files_in_ws native false " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
329- check_files_in_ws native true " -text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
330- check_files_in_ws native false " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
331- check_files_in_ws native true " lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
332- check_files_in_ws native false " crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
333- check_files_in_ws native true " crlf" CRLF CRLF CRLF CRLF_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
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+
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
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+
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
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+
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
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
334359
335360test_done
0 commit comments