Merge branch 'jk/filter-branch-come-back-to-original'
[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 cmd='
21 import bzrlib
22 bzrlib.initialize()
23 import bzrlib.plugin
24 bzrlib.plugin.load_plugins()
25 import bzrlib.plugins.fastimport
26 '
27
28 if ! "$PYTHON_PATH" -c "$cmd"; then
29         echo "consider setting BZR_PLUGIN_PATH=$HOME/.bazaar/plugins" 1>&2
30         skip_all='skipping remote-bzr tests; bzr-fastimport not available'
31         test_done
32 fi
33
34 check () {
35         (cd $1 &&
36         git log --format='%s' -1 &&
37         git symbolic-ref HEAD) > actual &&
38         (echo $2 &&
39         echo "refs/heads/$3") > expected &&
40         test_cmp expected actual
41 }
42
43 bzr whoami "A U Thor <author@example.com>"
44
45 test_expect_success 'cloning' '
46   (bzr init bzrrepo &&
47   cd bzrrepo &&
48   echo one > content &&
49   bzr add content &&
50   bzr commit -m one
51   ) &&
52
53   git clone "bzr::$PWD/bzrrepo" gitrepo &&
54   check gitrepo one master
55 '
56
57 test_expect_success 'pulling' '
58   (cd bzrrepo &&
59   echo two > content &&
60   bzr commit -m two
61   ) &&
62
63   (cd gitrepo && git pull) &&
64
65   check gitrepo two master
66 '
67
68 test_expect_success 'pushing' '
69   (cd gitrepo &&
70   echo three > content &&
71   git commit -a -m three &&
72   git push
73   ) &&
74
75   echo three > expected &&
76   cat bzrrepo/content > actual &&
77   test_cmp expected actual
78 '
79
80 test_expect_success 'roundtrip' '
81   (cd gitrepo &&
82   git pull &&
83   git log --format="%s" -1 origin/master > actual) &&
84   echo three > expected &&
85   test_cmp expected actual &&
86
87   (cd gitrepo && git push && git pull) &&
88
89   (cd bzrrepo &&
90   echo four > content &&
91   bzr commit -m four
92   ) &&
93
94   (cd gitrepo && git pull && git push) &&
95
96   check gitrepo four master &&
97
98   (cd gitrepo &&
99   echo five > content &&
100   git commit -a -m five &&
101   git push && git pull
102   ) &&
103
104   (cd bzrrepo && bzr revert) &&
105
106   echo five > expected &&
107   cat bzrrepo/content > actual &&
108   test_cmp expected actual
109 '
110
111 cat > expected <<EOF
112 100644 blob 54f9d6da5c91d556e6b54340b1327573073030af    content
113 100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb    executable
114 120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea    link
115 EOF
116
117 test_expect_success 'special modes' '
118   (cd bzrrepo &&
119   echo exec > executable
120   chmod +x executable &&
121   bzr add executable
122   bzr commit -m exec &&
123   ln -s content link
124   bzr add link
125   bzr commit -m link &&
126   mkdir dir &&
127   bzr add dir &&
128   bzr commit -m dir) &&
129
130   (cd gitrepo &&
131   git pull
132   git ls-tree HEAD > ../actual) &&
133
134   test_cmp expected actual &&
135
136   (cd gitrepo &&
137   git cat-file -p HEAD:link > ../actual) &&
138
139   echo -n content > expected &&
140   test_cmp expected actual
141 '
142
143 cat > expected <<EOF
144 100644 blob 54f9d6da5c91d556e6b54340b1327573073030af    content
145 100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb    executable
146 120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea    link
147 040000 tree 35c0caa46693cef62247ac89a680f0c5ce32b37b    movedir-new
148 EOF
149
150 test_expect_success 'moving directory' '
151   (cd bzrrepo &&
152   mkdir movedir &&
153   echo one > movedir/one &&
154   echo two > movedir/two &&
155   bzr add movedir &&
156   bzr commit -m movedir &&
157   bzr mv movedir movedir-new &&
158   bzr commit -m movedir-new) &&
159
160   (cd gitrepo &&
161   git pull &&
162   git ls-tree HEAD > ../actual) &&
163
164   test_cmp expected actual
165 '
166
167 test_expect_success 'different authors' '
168   (cd bzrrepo &&
169   echo john >> content &&
170   bzr commit -m john \
171     --author "Jane Rey <jrey@example.com>" \
172     --author "John Doe <jdoe@example.com>") &&
173
174   (cd gitrepo &&
175   git pull &&
176   git show --format="%an <%ae>, %cn <%ce>" --quiet > ../actual) &&
177
178   echo "Jane Rey <jrey@example.com>, A U Thor <author@example.com>" > expected &&
179   test_cmp expected actual
180 '
181
182 test_expect_success 'fetch utf-8 filenames' '
183   mkdir -p tmp && cd tmp &&
184   test_when_finished "cd .. && rm -rf tmp && LC_ALL=C" &&
185
186   export LC_ALL=en_US.UTF-8
187
188   (
189   bzr init bzrrepo &&
190   cd bzrrepo &&
191
192   echo test >> "áéíóú" &&
193   bzr add "áéíóú" &&
194   bzr commit -m utf-8
195   ) &&
196
197   (
198   git clone "bzr::$PWD/bzrrepo" gitrepo &&
199   cd gitrepo &&
200   git ls-files > ../actual
201   ) &&
202
203   echo "\"\\303\\241\\303\\251\\303\\255\\303\\263\\303\\272\"" > expected &&
204   test_cmp expected actual
205 '
206
207 test_expect_success 'push utf-8 filenames' '
208   mkdir -p tmp && cd tmp &&
209   test_when_finished "cd .. && rm -rf tmp && LC_ALL=C" &&
210
211   export LC_ALL=en_US.UTF-8
212
213   (
214   bzr init bzrrepo &&
215   cd bzrrepo &&
216
217   echo one >> content &&
218   bzr add content &&
219   bzr commit -m one
220   ) &&
221
222   (
223   git clone "bzr::$PWD/bzrrepo" gitrepo &&
224   cd gitrepo &&
225
226   echo test >> "áéíóú" &&
227   git add "áéíóú" &&
228   git commit -m utf-8 &&
229
230   git push
231   ) &&
232
233   (cd bzrrepo && bzr ls > ../actual) &&
234   echo -e "content\náéíóú" > expected &&
235   test_cmp expected actual
236 '
237
238 test_done