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