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