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