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