4ab73ec4e558df528f89f7263fb9c4c7e5fda025
1#!/bin/sh
2#
3# Copyright (c) 2012 Felipe Contreras
4#
5
6test_description='Test remote-bzr'
7
8. ./test-lib.sh
9
10if ! test_have_prereq PYTHON; then
11 skip_all='skipping remote-bzr tests; python not available'
12 test_done
13fi
14
15if ! python -c 'import bzrlib'; then
16 skip_all='skipping remote-bzr tests; bzr not available'
17 test_done
18fi
19
20check () {
21 (
22 cd $1 &&
23 git log --format='%s' -1 &&
24 git symbolic-ref HEAD
25 ) > actual &&
26 (
27 echo $2 &&
28 echo "refs/heads/$3"
29 ) > expected &&
30 test_cmp expected actual
31}
32
33bzr whoami "A U Thor <author@example.com>"
34
35test_expect_success 'cloning' '
36 (
37 bzr init bzrrepo &&
38 cd bzrrepo &&
39 echo one > content &&
40 bzr add content &&
41 bzr commit -m one
42 ) &&
43
44 git clone "bzr::$PWD/bzrrepo" gitrepo &&
45 check gitrepo one master
46'
47
48test_expect_success 'pulling' '
49 (
50 cd bzrrepo &&
51 echo two > content &&
52 bzr commit -m two
53 ) &&
54
55 (cd gitrepo && git pull) &&
56
57 check gitrepo two master
58'
59
60test_expect_success 'pushing' '
61 (
62 cd gitrepo &&
63 echo three > content &&
64 git commit -a -m three &&
65 git push
66 ) &&
67
68 echo three > expected &&
69 cat bzrrepo/content > actual &&
70 test_cmp expected actual
71'
72
73test_expect_success 'roundtrip' '
74 (
75 cd gitrepo &&
76 git pull &&
77 git log --format="%s" -1 origin/master > actual
78 ) &&
79 echo three > expected &&
80 test_cmp expected actual &&
81
82 (cd gitrepo && git push && git pull) &&
83
84 (
85 cd bzrrepo &&
86 echo four > content &&
87 bzr commit -m four
88 ) &&
89
90 (cd gitrepo && git pull && git push) &&
91
92 check gitrepo four master &&
93
94 (
95 cd gitrepo &&
96 echo five > content &&
97 git commit -a -m five &&
98 git push && git pull
99 ) &&
100
101 (cd bzrrepo && bzr revert) &&
102
103 echo five > expected &&
104 cat bzrrepo/content > actual &&
105 test_cmp expected actual
106'
107
108cat > expected <<EOF
109100644 blob 54f9d6da5c91d556e6b54340b1327573073030af content
110100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb executable
111120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea link
112EOF
113
114test_expect_success 'special modes' '
115 (
116 cd bzrrepo &&
117 echo exec > executable
118 chmod +x executable &&
119 bzr add executable
120 bzr commit -m exec &&
121 ln -s content link
122 bzr add link
123 bzr commit -m link &&
124 mkdir dir &&
125 bzr add dir &&
126 bzr commit -m dir
127 ) &&
128
129 (
130 cd gitrepo &&
131 git pull
132 git ls-tree HEAD > ../actual
133 ) &&
134
135 test_cmp expected actual &&
136
137 (
138 cd gitrepo &&
139 git cat-file -p HEAD:link > ../actual
140 ) &&
141
142 printf content > expected &&
143 test_cmp expected actual
144'
145
146cat > expected <<EOF
147100644 blob 54f9d6da5c91d556e6b54340b1327573073030af content
148100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb executable
149120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea link
150040000 tree 35c0caa46693cef62247ac89a680f0c5ce32b37b movedir-new
151EOF
152
153test_expect_success 'moving directory' '
154 (
155 cd bzrrepo &&
156 mkdir movedir &&
157 echo one > movedir/one &&
158 echo two > movedir/two &&
159 bzr add movedir &&
160 bzr commit -m movedir &&
161 bzr mv movedir movedir-new &&
162 bzr commit -m movedir-new
163 ) &&
164
165 (
166 cd gitrepo &&
167 git pull &&
168 git ls-tree HEAD > ../actual
169 ) &&
170
171 test_cmp expected actual
172'
173
174test_expect_success 'different authors' '
175 (
176 cd bzrrepo &&
177 echo john >> content &&
178 bzr commit -m john \
179 --author "Jane Rey <jrey@example.com>" \
180 --author "John Doe <jdoe@example.com>"
181 ) &&
182
183 (
184 cd gitrepo &&
185 git pull &&
186 git show --format="%an <%ae>, %cn <%ce>" --quiet > ../actual
187 ) &&
188
189 echo "Jane Rey <jrey@example.com>, A U Thor <author@example.com>" > expected &&
190 test_cmp expected actual
191'
192
193test_expect_success 'fetch utf-8 filenames' '
194 mkdir -p tmp && cd tmp &&
195 test_when_finished "cd .. && rm -rf tmp && LC_ALL=C" &&
196
197 LC_ALL=en_US.UTF-8
198 export LC_ALL
199
200 (
201 bzr init bzrrepo &&
202 cd bzrrepo &&
203
204 echo test >> "ærø" &&
205 bzr add "ærø" &&
206 echo test >> "ø~?" &&
207 bzr add "ø~?" &&
208 bzr commit -m add-utf-8 &&
209 echo test >> "ærø" &&
210 bzr commit -m test-utf-8 &&
211 bzr rm "ø~?" &&
212 bzr mv "ærø" "ø~?" &&
213 bzr commit -m bzr-mv-utf-8
214 ) &&
215
216 (
217 git clone "bzr::$PWD/bzrrepo" gitrepo &&
218 cd gitrepo &&
219 git -c core.quotepath=false ls-files > ../actual
220 ) &&
221 echo "ø~?" > expected &&
222 test_cmp expected actual
223'
224
225test_expect_success 'push utf-8 filenames' '
226 mkdir -p tmp && cd tmp &&
227 test_when_finished "cd .. && rm -rf tmp && LC_ALL=C" &&
228
229 LC_ALL=en_US.UTF-8
230 export LC_ALL
231
232 (
233 bzr init bzrrepo &&
234 cd bzrrepo &&
235
236 echo one >> content &&
237 bzr add content &&
238 bzr commit -m one
239 ) &&
240
241 (
242 git clone "bzr::$PWD/bzrrepo" gitrepo &&
243 cd gitrepo &&
244
245 echo test >> "ærø" &&
246 git add "ærø" &&
247 git commit -m utf-8 &&
248
249 git push
250 ) &&
251
252 (cd bzrrepo && bzr ls > ../actual) &&
253 printf "content\nærø\n" > expected &&
254 test_cmp expected actual
255'
256
257test_expect_success 'pushing a merge' '
258 mkdir -p tmp && cd tmp &&
259 test_when_finished "cd .. && rm -rf tmp" &&
260
261 (
262 bzr init bzrrepo &&
263 cd bzrrepo &&
264 echo one > content &&
265 bzr add content &&
266 bzr commit -m one
267 ) &&
268
269 git clone "bzr::$PWD/bzrrepo" gitrepo &&
270
271 (
272 cd bzrrepo &&
273 echo two > content &&
274 bzr commit -m two
275 ) &&
276
277 (
278 cd gitrepo &&
279 echo three > content &&
280 git commit -a -m three &&
281 git fetch &&
282 git merge origin/master || true &&
283 echo three > content &&
284 git commit -a --no-edit &&
285 git push
286 ) &&
287
288 echo three > expected &&
289 cat bzrrepo/content > actual &&
290 test_cmp expected actual
291'
292
293cat > expected <<EOF
294origin/HEAD
295origin/branch
296origin/trunk
297EOF
298
299test_expect_success 'proper bzr repo' '
300 mkdir -p tmp && cd tmp &&
301 test_when_finished "cd .. && rm -rf tmp" &&
302
303 bzr init-repo bzrrepo &&
304
305 (
306 bzr init bzrrepo/trunk &&
307 cd bzrrepo/trunk &&
308 echo one >> content &&
309 bzr add content &&
310 bzr commit -m one
311 ) &&
312
313 (
314 bzr branch bzrrepo/trunk bzrrepo/branch &&
315 cd bzrrepo/branch &&
316 echo two >> content &&
317 bzr commit -m one
318 ) &&
319
320 (
321 git clone "bzr::$PWD/bzrrepo" gitrepo &&
322 cd gitrepo &&
323 git for-each-ref --format "%(refname:short)" refs/remotes/origin > ../actual
324 ) &&
325
326 test_cmp ../expected actual
327'
328
329test_expect_success 'strip' '
330 # Do not imitate this style; always chdir inside a subshell instead
331 mkdir -p tmp && cd tmp &&
332 test_when_finished "cd .. && rm -rf tmp" &&
333
334 (
335 bzr init bzrrepo &&
336 cd bzrrepo &&
337
338 echo one >> content &&
339 bzr add content &&
340 bzr commit -m one &&
341
342 echo two >> content &&
343 bzr commit -m two
344 ) &&
345
346 git clone "bzr::$PWD/bzrrepo" gitrepo &&
347
348 (
349 cd bzrrepo &&
350 bzr uncommit --force &&
351
352 echo three >> content &&
353 bzr commit -m three &&
354
355 echo four >> content &&
356 bzr commit -m four &&
357 bzr log --line | sed -e "s/^[0-9][0-9]*: //" > ../expected
358 ) &&
359
360 (
361 cd gitrepo &&
362 git fetch &&
363 git log --format="%an %ad %s" --date=short origin/master > ../actual
364 ) &&
365
366 test_cmp expected actual
367'
368
369test_done