t0027: Tests for core.eol=native, eol=lf, eol=crlf

Add test cases for core.eol "native" and "" (unset). (MINGW uses CRLF, all other systems LF as native line endings) Add test cases for the attributes "eol=lf" and "eol=crlf" Other minor changes: - Use the more portable 'tr' instead of 'od -c' to convert '\n' into 'Q' and '\0' into 'N' - Style fixes for shell functions according to the coding guide lines - Replace "txtbin" with "attr" Signed-off-by: Torsten Bögershausen <tboegi@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Torsten Bögershausen committed Aug 16, 2014 at 22:16 UTC f6975a6b119128de1c5a89e6cd64f75ed1de2177
1 file changed +120 -100
t/t0027-auto-crlf.sh
+120 -100
@@ -10,30 +10,26 @@ then
10 test_done
11 fi
12
13 -
14 -compare_files()
15 -{
16 - od -c <"$1" >"$1".expect &&
17 - od -c <"$2" >"$2".actual &&
13 +compare_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
22 -compare_ws_file()
23 -{
20 +compare_ws_file () {
21 pfx=$1
22 exp=$2.expect
23 act=$pfx.actual.$3
27 - od -c <"$2" >"$exp" &&
28 - od -c <"$3" >"$act" &&
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
33 -create_gitattributes()
34 -{
35 - txtbin=$1
36 - case "$txtbin" in
30 +create_gitattributes () {
31 + attr=$1
32 + case "$attr" in
33 auto)
34 echo "*.txt text=auto" >.gitattributes
35 ;;
@@ -43,35 +39,43 @@ create_gitattributes()
39 -text)
40 echo "*.txt -text" >.gitattributes
41 ;;
46 - *)
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
52 -create_file_in_repo()
53 -{
58 +create_file_in_repo () {
59 crlf=$1
55 - txtbin=$2
56 - create_gitattributes "$txtbin" &&
60 + attr=$2
61 + create_gitattributes "$attr" &&
62 for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
63 do
59 - pfx=crlf_${crlf}_attr_${txtbin}_$f.txt &&
64 + pfx=crlf_${crlf}_attr_${attr}_$f.txt &&
65 cp $f $pfx && git -c core.autocrlf=$crlf add $pfx
66 done &&
67 git commit -m "core.autocrlf $crlf"
68 }
69
65 -check_files_in_repo()
66 -{
70 +check_files_in_repo () {
71 crlf=$1
68 - txtbin=$2
72 + attr=$2
73 lfname=$3
74 crlfname=$4
75 lfmixcrlf=$5
76 lfmixcr=$6
77 crlfnul=$7
74 - pfx=crlf_${crlf}_attr_${txtbin}_ &&
78 + pfx=crlf_${crlf}_attr_${attr}_ &&
79 compare_files $lfname ${pfx}LF.txt &&
80 compare_files $crlfname ${pfx}CRLF.txt &&
81 compare_files $lfmixcrlf ${pfx}CRLF_mix_LF.txt &&
@@ -80,19 +84,18 @@ check_files_in_repo()
84 }
85
86
83 -check_files_in_ws()
84 -{
87 +check_files_in_ws () {
88 eol=$1
89 crlf=$2
87 - txtbin=$3
90 + attr=$3
91 lfname=$4
92 crlfname=$5
93 lfmixcrlf=$6
94 lfmixcr=$7
95 crlfnul=$8
93 - create_gitattributes $txtbin &&
96 + create_gitattributes $attr &&
97 git config core.autocrlf $crlf &&
95 - pfx=eol_${eol}_crlf_${crlf}_attr_${txtbin}_ &&
98 + pfx=eol_${eol}_crlf_${crlf}_attr_${attr}_ &&
99 src=crlf_false_attr__ &&
100 for f in LF CRLF LF_mix_CR CRLF_mix_LF CRLF_nul
101 do
@@ -104,42 +107,24 @@ check_files_in_ws()
107 fi
108 done
109
107 -
108 - test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=LF" "
110 + test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF" "
111 compare_ws_file $pfx $lfname ${src}LF.txt
112 "
111 - test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=CRLF" "
113 + test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF" "
114 compare_ws_file $pfx $crlfname ${src}CRLF.txt
115 "
114 - test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=CRLF_mix_LF" "
116 + test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_mix_LF" "
117 compare_ws_file $pfx $lfmixcrlf ${src}CRLF_mix_LF.txt
118 "
117 - test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=LF_mix_CR" "
119 + test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=LF_mix_CR" "
120 compare_ws_file $pfx $lfmixcr ${src}LF_mix_CR.txt
121 "
120 - test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$txtbin file=CRLF_nul" "
122 + test_expect_success "checkout core.eol=$eol core.autocrlf=$crlf gitattributes=$attr file=CRLF_nul" "
123 compare_ws_file $pfx $crlfnul ${src}CRLF_nul.txt
124 "
125 }
126
127 #######
126 -(
127 - type od >/dev/null &&
128 - printf "line1Q\r\nline2\r\nline3" | q_to_nul >CRLF_nul &&
129 - cat >expect <<-EOF &&
130 - 0000000 l i n e 1 \0 \r \n l i n e 2 \r \n l
131 - 0000020 i n e 3
132 - 0000024
133 -EOF
134 - od -c CRLF_nul | sed -e "s/[ ][ ]*/ /g" -e "s/ *$//" >actual
135 - test_cmp expect actual &&
136 - rm expect actual
137 -) || {
138 - skip_all="od not found or od -c not usable"
139 - exit 0
140 - test_done
141 -}
142 -
128 test_expect_success 'setup master' '
129 echo >.gitattributes &&
130 git checkout -b master &&
@@ -150,9 +135,10 @@ test_expect_success 'setup master' '
135 printf "line1\r\nline2\nline3" >CRLF_mix_LF &&
136 printf "line1\nline2\rline3" >LF_mix_CR &&
137 printf "line1\r\nline2\rline3" >CRLF_mix_CR &&
138 + printf "line1Q\r\nline2\r\nline3" | q_to_nul >CRLF_nul &&
139 printf "line1Q\nline2\nline3" | q_to_nul >LF_nul
140 '
155 -# CRLF_nul had been created above
141 +
142
143 test_expect_success 'create files' '
144 create_file_in_repo false "" &&
@@ -201,7 +187,8 @@ test_expect_success 'commit -text' '
187 ################################################################################
188 # Check how files in the repo are changed when they are checked out
189 # How to read the table below:
204 -# - check_files_in_ws will check multiple files, see below
190 +# - check_files_in_ws will check multiple files with a combination of settings
191 +# and attributes (core.autocrlf=input is forbidden with core.eol=crlf)
192 # - parameter $1 : core.eol lf | crlf
193 # - parameter $2 : core.autocrlf false | true | input
194 # - parameter $3 : text in .gitattributs "" (empty) | auto | text | -text
@@ -211,55 +198,88 @@ test_expect_success 'commit -text' '
198 # - parameter $7 : reference for a file with LF and CR in the repo (does somebody uses this ?)
199 # - parameter $8 : reference for a file with CRLF and a NUL (should be handled as binary when auto)
200
214 -check_files_in_ws lf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
215 -check_files_in_ws lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
216 -check_files_in_ws lf input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
217 -
218 -check_files_in_ws lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
219 -check_files_in_ws lf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
220 -check_files_in_ws lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
221 -
222 -check_files_in_ws lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
223 -check_files_in_ws lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
224 -check_files_in_ws lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
225 -
226 -check_files_in_ws lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
227 -check_files_in_ws lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
228 -check_files_in_ws lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
229 -
230 -###########
231 -#core.autocrlf=input is forbidden with core.eol=crlf
232 -check_files_in_ws crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
233 -check_files_in_ws crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
234 -
235 -check_files_in_ws crlf false "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
236 -check_files_in_ws crlf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
237 -
238 -check_files_in_ws crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
239 -check_files_in_ws crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
240 -
241 -check_files_in_ws crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
242 -check_files_in_ws crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
243 -
201 +# What we have in the repo:
202 +# ----------------- EOL in repo ----------------
203 +# LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
204 +# settings with checkout:
205 +# core. core. .gitattr
206 +# eol acrlf
207 +# ----------------------------------------------
208 +# What we want to have in the working tree:
209 if test_have_prereq MINGW
210 then
246 -check_files_in_ws "" false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
247 -check_files_in_ws "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
248 -check_files_in_ws "" false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
249 -check_files_in_ws "" true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
250 -check_files_in_ws "" false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
251 -check_files_in_ws "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
252 -check_files_in_ws "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
253 -check_files_in_ws "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
254 -
255 -check_files_in_ws native false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
256 -check_files_in_ws native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
257 -check_files_in_ws native false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
258 -check_files_in_ws native true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
259 -check_files_in_ws native false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
260 -check_files_in_ws native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
261 -check_files_in_ws native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
262 -check_files_in_ws native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
211 +MIX_CRLF_LF=CRLF
212 +MIX_LF_CR=CRLF_mix_CR
213 +NL=CRLF
214 +else
215 +MIX_CRLF_LF=CRLF_mix_LF
216 +MIX_LF_CR=LF_mix_CR
217 +NL=LF
218 fi
219 +export CRLF_MIX_LF_CR MIX NL
220 +
221 +check_files_in_ws lf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
222 +check_files_in_ws lf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
223 +check_files_in_ws lf input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
224 +check_files_in_ws lf false "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
225 +check_files_in_ws lf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
226 +check_files_in_ws lf input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
227 +check_files_in_ws lf false "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
228 +check_files_in_ws lf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
229 +check_files_in_ws lf input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
230 +check_files_in_ws lf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
231 +check_files_in_ws lf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
232 +check_files_in_ws lf input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
233 +check_files_in_ws lf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
234 +check_files_in_ws lf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
235 +check_files_in_ws lf input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
236 +check_files_in_ws lf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
237 +check_files_in_ws lf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
238 +check_files_in_ws lf input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
239 +
240 +check_files_in_ws crlf false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
241 +check_files_in_ws crlf true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
242 +check_files_in_ws crlf false "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
243 +check_files_in_ws crlf true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
244 +check_files_in_ws crlf false "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
245 +check_files_in_ws crlf true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
246 +check_files_in_ws crlf false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
247 +check_files_in_ws crlf true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
248 +check_files_in_ws crlf false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
249 +check_files_in_ws crlf true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
250 +check_files_in_ws crlf false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
251 +check_files_in_ws crlf true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
252 +
253 +check_files_in_ws "" false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
254 +check_files_in_ws "" true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
255 +check_files_in_ws "" input "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
256 +check_files_in_ws "" false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
257 +check_files_in_ws "" true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
258 +check_files_in_ws "" input "auto" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
259 +check_files_in_ws "" false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
260 +check_files_in_ws "" true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
261 +check_files_in_ws "" input "text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
262 +check_files_in_ws "" false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
263 +check_files_in_ws "" true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
264 +check_files_in_ws "" input "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
265 +check_files_in_ws "" false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
266 +check_files_in_ws "" true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
267 +check_files_in_ws "" input "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
268 +check_files_in_ws "" false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
269 +check_files_in_ws "" true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
270 +check_files_in_ws "" input "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
271 +
272 +check_files_in_ws native false "" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
273 +check_files_in_ws native true "" CRLF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
274 +check_files_in_ws native false "auto" $NL CRLF $MIX_CRLF_LF LF_mix_CR CRLF_nul
275 +check_files_in_ws native true "auto" CRLF CRLF CRLF LF_mix_CR CRLF_nul
276 +check_files_in_ws native false "text" $NL CRLF $MIX_CRLF_LF $MIX_LF_CR CRLF_nul
277 +check_files_in_ws native true "text" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
278 +check_files_in_ws native false "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
279 +check_files_in_ws native true "-text" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
280 +check_files_in_ws native false "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
281 +check_files_in_ws native true "lf" LF CRLF CRLF_mix_LF LF_mix_CR CRLF_nul
282 +check_files_in_ws native false "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
283 +check_files_in_ws native true "crlf" CRLF CRLF CRLF CRLF_mix_CR CRLF_nul
284
285 test_done