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