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