]> git.ipfire.org Git - thirdparty/git.git/blame - t/t9401-git-cvsserver-crlf.sh
Merge branch 'js/doc-patch-text'
[thirdparty/git.git] / t / t9401-git-cvsserver-crlf.sh
CommitLineData
8a06a632
MO
1#!/bin/sh
2#
3# Copyright (c) 2008 Matthew Ogilvie
4# Parts adapted from other tests.
5#
6
7test_description='git-cvsserver -kb modes
8
9tests -kb mode for binary files when accessing a git
10repository using cvs CLI client via git-cvsserver server'
11
12. ./test-lib.sh
13
8a06a632
MO
14marked_as () {
15 foundEntry="$(grep "^/$2/" "$1/CVS/Entries")"
16 if [ x"$foundEntry" = x"" ] ; then
17 echo "NOT FOUND: $1 $2 1 $3" >> "${WORKDIR}/marked.log"
18 return 1
19 fi
20 test x"$(grep "^/$2/" "$1/CVS/Entries" | cut -d/ -f5)" = x"$3"
21 stat=$?
22 echo "$1 $2 $stat '$3'" >> "${WORKDIR}/marked.log"
23 return $stat
24}
25
26not_present() {
27 foundEntry="$(grep "^/$2/" "$1/CVS/Entries")"
28 if [ -r "$1/$2" ] ; then
29 echo "Error: File still exists: $1 $2" >> "${WORKDIR}/marked.log"
30 return 1;
31 fi
32 if [ x"$foundEntry" != x"" ] ; then
33 echo "Error: should not have found: $1 $2" >> "${WORKDIR}/marked.log"
34 return 1;
35 else
36 echo "Correctly not found: $1 $2" >> "${WORKDIR}/marked.log"
37 return 0;
38 fi
39}
40
abd66f22
MO
41check_status_options() {
42 (cd "$1" &&
43 GIT_CONFIG="$git_config" cvs -Q status "$2" > "${WORKDIR}/status.out" 2>&1
44 )
45 if [ x"$?" != x"0" ] ; then
46 echo "Error from cvs status: $1 $2" >> "${WORKDIR}/marked.log"
47 return 1;
48 fi
db7fde9c 49 got="$(sed -n -e 's/^[ ]*Sticky Options:[ ]*//p' "${WORKDIR}/status.out")"
abd66f22
MO
50 expect="$3"
51 if [ x"$expect" = x"" ] ; then
52 expect="(none)"
53 fi
54 test x"$got" = x"$expect"
55 stat=$?
56 echo "cvs status: $1 $2 $stat '$3' '$got'" >> "${WORKDIR}/marked.log"
57 return $stat
58}
59
8a06a632
MO
60cvs >/dev/null 2>&1
61if test $? -ne 1
62then
fadb5156 63 skip_all='skipping git-cvsserver tests, cvs not found'
8a06a632 64 test_done
8a06a632 65fi
1b19ccd2
JK
66if ! test_have_prereq PERL
67then
fadb5156 68 skip_all='skipping git-cvsserver tests, perl not available'
1b19ccd2
JK
69 test_done
70fi
94221d22 71perl -e 'use DBI; use DBD::SQLite' >/dev/null 2>&1 || {
fadb5156 72 skip_all='skipping git-cvsserver tests, Perl SQLite interface unavailable'
8a06a632 73 test_done
8a06a632
MO
74}
75
76unset GIT_DIR GIT_CONFIG
fd318a94
JS
77WORKDIR=$PWD
78SERVERDIR=$PWD/gitcvs.git
8a06a632
MO
79git_config="$SERVERDIR/config"
80CVSROOT=":fork:$SERVERDIR"
fd318a94 81CVSWORK="$PWD/cvswork"
8a06a632
MO
82CVS_SERVER=git-cvsserver
83export CVSROOT CVS_SERVER
84
85rm -rf "$CVSWORK" "$SERVERDIR"
86test_expect_success 'setup' '
e2a83b21 87 git config push.default matching &&
8a06a632
MO
88 echo "Simple text file" >textfile.c &&
89 echo "File with embedded NUL: Q <- there" | q_to_nul > binfile.bin &&
90 mkdir subdir &&
91 echo "Another text file" > subdir/file.h &&
92 echo "Another binary: Q (this time CR)" | q_to_cr > subdir/withCr.bin &&
a48fcd83 93 echo "Mixed up NUL, but marked text: Q <- there" | q_to_nul > mixedUp.c &&
8a06a632
MO
94 echo "Unspecified" > subdir/unspecified.other &&
95 echo "/*.bin -crlf" > .gitattributes &&
96 echo "/*.c crlf" >> .gitattributes &&
97 echo "subdir/*.bin -crlf" >> .gitattributes &&
98 echo "subdir/*.c crlf" >> .gitattributes &&
99 echo "subdir/file.h crlf" >> .gitattributes &&
100 git add .gitattributes textfile.c binfile.bin mixedUp.c subdir/* &&
101 git commit -q -m "First Commit" &&
7fd3ef1f 102 git clone -q --bare "$WORKDIR/.git" "$SERVERDIR" >/dev/null 2>&1 &&
8a06a632
MO
103 GIT_DIR="$SERVERDIR" git config --bool gitcvs.enabled true &&
104 GIT_DIR="$SERVERDIR" git config gitcvs.logfile "$SERVERDIR/gitcvs.log"
105'
106
107test_expect_success 'cvs co (default crlf)' '
108 GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&
109 test x"$(grep '/-k' cvswork/CVS/Entries cvswork/subdir/CVS/Entries)" = x""
110'
111
112rm -rf cvswork
113test_expect_success 'cvs co (allbinary)' '
114 GIT_DIR="$SERVERDIR" git config --bool gitcvs.allbinary true &&
115 GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&
116 marked_as cvswork textfile.c -kb &&
117 marked_as cvswork binfile.bin -kb &&
118 marked_as cvswork .gitattributes -kb &&
119 marked_as cvswork mixedUp.c -kb &&
120 marked_as cvswork/subdir withCr.bin -kb &&
121 marked_as cvswork/subdir file.h -kb &&
122 marked_as cvswork/subdir unspecified.other -kb
123'
124
125rm -rf cvswork cvs.log
126test_expect_success 'cvs co (use attributes/allbinary)' '
127 GIT_DIR="$SERVERDIR" git config --bool gitcvs.usecrlfattr true &&
128 GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&
129 marked_as cvswork textfile.c "" &&
130 marked_as cvswork binfile.bin -kb &&
131 marked_as cvswork .gitattributes -kb &&
132 marked_as cvswork mixedUp.c "" &&
133 marked_as cvswork/subdir withCr.bin -kb &&
134 marked_as cvswork/subdir file.h "" &&
135 marked_as cvswork/subdir unspecified.other -kb
136'
137
138rm -rf cvswork
139test_expect_success 'cvs co (use attributes)' '
140 GIT_DIR="$SERVERDIR" git config --bool gitcvs.allbinary false &&
141 GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&
142 marked_as cvswork textfile.c "" &&
143 marked_as cvswork binfile.bin -kb &&
144 marked_as cvswork .gitattributes "" &&
145 marked_as cvswork mixedUp.c "" &&
146 marked_as cvswork/subdir withCr.bin -kb &&
147 marked_as cvswork/subdir file.h "" &&
148 marked_as cvswork/subdir unspecified.other ""
149'
150
151test_expect_success 'adding files' '
fd4ec4f2
JL
152 (cd cvswork &&
153 (cd subdir &&
8a06a632
MO
154 echo "more text" > src.c &&
155 GIT_CONFIG="$git_config" cvs -Q add src.c >cvs.log 2>&1 &&
156 marked_as . src.c "" &&
2e3a16b2 157 echo "pseudo-binary" > temp.bin
fd4ec4f2 158 ) &&
8a06a632
MO
159 GIT_CONFIG="$git_config" cvs -Q add subdir/temp.bin >cvs.log 2>&1 &&
160 marked_as subdir temp.bin "-kb" &&
161 cd subdir &&
162 GIT_CONFIG="$git_config" cvs -Q ci -m "adding files" >cvs.log 2>&1 &&
163 marked_as . temp.bin "-kb" &&
164 marked_as . src.c ""
fd4ec4f2 165 )
8a06a632
MO
166'
167
8a06a632
MO
168test_expect_success 'updating' '
169 git pull gitcvs.git &&
170 echo 'hi' > subdir/newfile.bin &&
171 echo 'junk' > subdir/file.h &&
172 echo 'hi' > subdir/newfile.c &&
173 echo 'hello' >> binfile.bin &&
174 git add subdir/newfile.bin subdir/file.h subdir/newfile.c binfile.bin &&
175 git commit -q -m "Add and change some files" &&
176 git push gitcvs.git >/dev/null &&
fd4ec4f2
JL
177 (cd cvswork &&
178 GIT_CONFIG="$git_config" cvs -Q update
179 ) &&
8a06a632
MO
180 marked_as cvswork textfile.c "" &&
181 marked_as cvswork binfile.bin -kb &&
182 marked_as cvswork .gitattributes "" &&
183 marked_as cvswork mixedUp.c "" &&
184 marked_as cvswork/subdir withCr.bin -kb &&
185 marked_as cvswork/subdir file.h "" &&
186 marked_as cvswork/subdir unspecified.other "" &&
187 marked_as cvswork/subdir newfile.bin -kb &&
188 marked_as cvswork/subdir newfile.c "" &&
189 echo "File with embedded NUL: Q <- there" | q_to_nul > tmpExpect1 &&
190 echo "hello" >> tmpExpect1 &&
191 cmp cvswork/binfile.bin tmpExpect1
192'
193
90948a42
MO
194rm -rf cvswork
195test_expect_success 'cvs co (use attributes/guess)' '
196 GIT_DIR="$SERVERDIR" git config gitcvs.allbinary guess &&
197 GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&
198 marked_as cvswork textfile.c "" &&
199 marked_as cvswork binfile.bin -kb &&
200 marked_as cvswork .gitattributes "" &&
201 marked_as cvswork mixedUp.c "" &&
202 marked_as cvswork/subdir withCr.bin -kb &&
203 marked_as cvswork/subdir file.h "" &&
204 marked_as cvswork/subdir unspecified.other "" &&
205 marked_as cvswork/subdir newfile.bin -kb &&
206 marked_as cvswork/subdir newfile.c ""
207'
208
209test_expect_success 'setup multi-line files' '
210 ( echo "line 1" &&
211 echo "line 2" &&
212 echo "line 3" &&
213 echo "line 4 with NUL: Q <-" ) | q_to_nul > multiline.c &&
214 git add multiline.c &&
215 ( echo "line 1" &&
216 echo "line 2" &&
217 echo "line 3" &&
218 echo "line 4" ) | q_to_nul > multilineTxt.c &&
219 git add multilineTxt.c &&
220 git commit -q -m "multiline files" &&
221 git push gitcvs.git >/dev/null
222'
223
224rm -rf cvswork
225test_expect_success 'cvs co (guess)' '
226 GIT_DIR="$SERVERDIR" git config --bool gitcvs.usecrlfattr false &&
227 GIT_CONFIG="$git_config" cvs -Q co -d cvswork master >cvs.log 2>&1 &&
228 marked_as cvswork textfile.c "" &&
229 marked_as cvswork binfile.bin -kb &&
230 marked_as cvswork .gitattributes "" &&
231 marked_as cvswork mixedUp.c -kb &&
232 marked_as cvswork multiline.c -kb &&
233 marked_as cvswork multilineTxt.c "" &&
234 marked_as cvswork/subdir withCr.bin -kb &&
235 marked_as cvswork/subdir file.h "" &&
236 marked_as cvswork/subdir unspecified.other "" &&
237 marked_as cvswork/subdir newfile.bin "" &&
238 marked_as cvswork/subdir newfile.c ""
239'
240
241test_expect_success 'cvs co another copy (guess)' '
242 GIT_CONFIG="$git_config" cvs -Q co -d cvswork2 master >cvs.log 2>&1 &&
243 marked_as cvswork2 textfile.c "" &&
244 marked_as cvswork2 binfile.bin -kb &&
245 marked_as cvswork2 .gitattributes "" &&
246 marked_as cvswork2 mixedUp.c -kb &&
247 marked_as cvswork2 multiline.c -kb &&
248 marked_as cvswork2 multilineTxt.c "" &&
249 marked_as cvswork2/subdir withCr.bin -kb &&
250 marked_as cvswork2/subdir file.h "" &&
251 marked_as cvswork2/subdir unspecified.other "" &&
252 marked_as cvswork2/subdir newfile.bin "" &&
253 marked_as cvswork2/subdir newfile.c ""
254'
255
abd66f22
MO
256test_expect_success 'cvs status - sticky options' '
257 check_status_options cvswork2 textfile.c "" &&
258 check_status_options cvswork2 binfile.bin -kb &&
259 check_status_options cvswork2 .gitattributes "" &&
260 check_status_options cvswork2 mixedUp.c -kb &&
261 check_status_options cvswork2 multiline.c -kb &&
262 check_status_options cvswork2 multilineTxt.c "" &&
263 check_status_options cvswork2/subdir withCr.bin -kb &&
264 check_status_options cvswork2 subdir/withCr.bin -kb &&
265 check_status_options cvswork2/subdir file.h "" &&
266 check_status_options cvswork2 subdir/file.h "" &&
267 check_status_options cvswork2/subdir unspecified.other "" &&
268 check_status_options cvswork2/subdir newfile.bin "" &&
269 check_status_options cvswork2/subdir newfile.c ""
270'
271
90948a42 272test_expect_success 'add text (guess)' '
fd4ec4f2 273 (cd cvswork &&
90948a42 274 echo "simpleText" > simpleText.c &&
fd4ec4f2
JL
275 GIT_CONFIG="$git_config" cvs -Q add simpleText.c
276 ) &&
90948a42
MO
277 marked_as cvswork simpleText.c ""
278'
279
280test_expect_success 'add bin (guess)' '
fd4ec4f2 281 (cd cvswork &&
90948a42 282 echo "simpleBin: NUL: Q <- there" | q_to_nul > simpleBin.bin &&
fd4ec4f2
JL
283 GIT_CONFIG="$git_config" cvs -Q add simpleBin.bin
284 ) &&
90948a42
MO
285 marked_as cvswork simpleBin.bin -kb
286'
287
288test_expect_success 'remove files (guess)' '
fd4ec4f2 289 (cd cvswork &&
90948a42 290 GIT_CONFIG="$git_config" cvs -Q rm -f subdir/file.h &&
fd4ec4f2
JL
291 (cd subdir &&
292 GIT_CONFIG="$git_config" cvs -Q rm -f withCr.bin
293 )) &&
90948a42
MO
294 marked_as cvswork/subdir withCr.bin -kb &&
295 marked_as cvswork/subdir file.h ""
296'
297
298test_expect_success 'cvs ci (guess)' '
fd4ec4f2
JL
299 (cd cvswork &&
300 GIT_CONFIG="$git_config" cvs -Q ci -m "add/rm files" >cvs.log 2>&1
301 ) &&
90948a42
MO
302 marked_as cvswork textfile.c "" &&
303 marked_as cvswork binfile.bin -kb &&
304 marked_as cvswork .gitattributes "" &&
305 marked_as cvswork mixedUp.c -kb &&
306 marked_as cvswork multiline.c -kb &&
307 marked_as cvswork multilineTxt.c "" &&
308 not_present cvswork/subdir withCr.bin &&
309 not_present cvswork/subdir file.h &&
310 marked_as cvswork/subdir unspecified.other "" &&
311 marked_as cvswork/subdir newfile.bin "" &&
312 marked_as cvswork/subdir newfile.c "" &&
313 marked_as cvswork simpleBin.bin -kb &&
314 marked_as cvswork simpleText.c ""
315'
316
317test_expect_success 'update subdir of other copy (guess)' '
fd4ec4f2
JL
318 (cd cvswork2/subdir &&
319 GIT_CONFIG="$git_config" cvs -Q update
320 ) &&
90948a42
MO
321 marked_as cvswork2 textfile.c "" &&
322 marked_as cvswork2 binfile.bin -kb &&
323 marked_as cvswork2 .gitattributes "" &&
324 marked_as cvswork2 mixedUp.c -kb &&
325 marked_as cvswork2 multiline.c -kb &&
326 marked_as cvswork2 multilineTxt.c "" &&
327 not_present cvswork2/subdir withCr.bin &&
328 not_present cvswork2/subdir file.h &&
329 marked_as cvswork2/subdir unspecified.other "" &&
330 marked_as cvswork2/subdir newfile.bin "" &&
331 marked_as cvswork2/subdir newfile.c "" &&
332 not_present cvswork2 simpleBin.bin &&
333 not_present cvswork2 simpleText.c
334'
335
336echo "starting update/merge" >> "${WORKDIR}/marked.log"
337test_expect_success 'update/merge full other copy (guess)' '
338 git pull gitcvs.git master &&
339 sed "s/3/replaced_3/" < multilineTxt.c > ml.temp &&
340 mv ml.temp multilineTxt.c &&
341 git add multilineTxt.c &&
342 git commit -q -m "modify multiline file" >> "${WORKDIR}/marked.log" &&
343 git push gitcvs.git >/dev/null &&
fd4ec4f2 344 (cd cvswork2 &&
90948a42
MO
345 sed "s/1/replaced_1/" < multilineTxt.c > ml.temp &&
346 mv ml.temp multilineTxt.c &&
fd4ec4f2
JL
347 GIT_CONFIG="$git_config" cvs update > cvs.log 2>&1
348 ) &&
90948a42
MO
349 marked_as cvswork2 textfile.c "" &&
350 marked_as cvswork2 binfile.bin -kb &&
351 marked_as cvswork2 .gitattributes "" &&
352 marked_as cvswork2 mixedUp.c -kb &&
353 marked_as cvswork2 multiline.c -kb &&
354 marked_as cvswork2 multilineTxt.c "" &&
355 not_present cvswork2/subdir withCr.bin &&
356 not_present cvswork2/subdir file.h &&
357 marked_as cvswork2/subdir unspecified.other "" &&
358 marked_as cvswork2/subdir newfile.bin "" &&
359 marked_as cvswork2/subdir newfile.c "" &&
360 marked_as cvswork2 simpleBin.bin -kb &&
361 marked_as cvswork2 simpleText.c "" &&
362 echo "line replaced_1" > tmpExpect2 &&
363 echo "line 2" >> tmpExpect2 &&
364 echo "line replaced_3" >> tmpExpect2 &&
365 echo "line 4" | q_to_nul >> tmpExpect2 &&
366 cmp cvswork2/multilineTxt.c tmpExpect2
367'
368
8a06a632 369test_done