prompt: fix show upstream with svn and zsh
[git.git] / contrib / remote-helpers / test-hg-hg-git.sh
blob9aaf0436695c940ff8c1aa51118d66f9a661efd9
1 #!/bin/sh
3 # Copyright (c) 2012 Felipe Contreras
5 # Base commands from hg-git tests:
6 # https://bitbucket.org/durin42/hg-git/src
9 test_description='Test remote-hg output compared to hg-git'
11 . ./test-lib.sh
13 if ! test_have_prereq PYTHON; then
14 skip_all='skipping remote-hg tests; python not available'
15 test_done
18 if ! "$PYTHON_PATH" -c 'import mercurial'; then
19 skip_all='skipping remote-hg tests; mercurial not available'
20 test_done
23 if ! "$PYTHON_PATH" -c 'import hggit'; then
24 skip_all='skipping remote-hg tests; hg-git not available'
25 test_done
28 # clone to a git repo with git
29 git_clone_git () {
30 hg -R $1 bookmark -f -r tip master &&
31 git clone -q "hg::$PWD/$1" $2
34 # clone to an hg repo with git
35 hg_clone_git () {
37 hg init $2 &&
38 cd $1 &&
39 git push -q "hg::$PWD/../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*'
40 ) &&
42 (cd $2 && hg -q update)
45 # clone to a git repo with hg
46 git_clone_hg () {
48 git init -q $2 &&
49 cd $1 &&
50 hg bookmark -f -r tip master &&
51 hg -q push -r master ../$2 || true
55 # clone to an hg repo with hg
56 hg_clone_hg () {
57 hg -q clone $1 $2
60 # push an hg repo with git
61 hg_push_git () {
63 cd $2
64 old=$(git symbolic-ref --short HEAD)
65 git checkout -q -b tmp &&
66 git fetch -q "hg::$PWD/../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' &&
67 git checkout -q $old &&
68 git branch -q -D tmp 2> /dev/null || true
72 # push an hg git repo with hg
73 hg_push_hg () {
75 cd $1 &&
76 hg -q push ../$2 || true
80 hg_log () {
81 hg -R $1 log --graph --debug | grep -v 'tag: *default/'
84 git_log () {
85 git --git-dir=$1/.git fast-export --branches
88 setup () {
90 echo "[ui]"
91 echo "username = A U Thor <author@example.com>"
92 echo "[defaults]"
93 echo "backout = -d \"0 0\""
94 echo "commit = -d \"0 0\""
95 echo "debugrawcommit = -d \"0 0\""
96 echo "tag = -d \"0 0\""
97 echo "[extensions]"
98 echo "hgext.bookmarks ="
99 echo "hggit ="
100 ) >> "$HOME"/.hgrc &&
101 git config --global receive.denycurrentbranch warn
102 git config --global remote-hg.hg-git-compat true
104 HGEDITOR=/usr/bin/true
106 GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230"
107 GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
108 export HGEDITOR GIT_AUTHOR_DATE GIT_COMMITTER_DATE
111 setup
113 test_expect_success 'executable bit' '
114 mkdir -p tmp && cd tmp &&
115 test_when_finished "cd .. && rm -rf tmp" &&
118 git init -q gitrepo &&
119 cd gitrepo &&
120 echo alpha > alpha &&
121 chmod 0644 alpha &&
122 git add alpha &&
123 git commit -m "add alpha" &&
124 chmod 0755 alpha &&
125 git add alpha &&
126 git commit -m "set executable bit" &&
127 chmod 0644 alpha &&
128 git add alpha &&
129 git commit -m "clear executable bit"
130 ) &&
132 for x in hg git; do
134 hg_clone_$x gitrepo hgrepo-$x &&
135 cd hgrepo-$x &&
136 hg_log . &&
137 hg manifest -r 1 -v &&
138 hg manifest -v
139 ) > output-$x &&
141 git_clone_$x hgrepo-$x gitrepo2-$x &&
142 git_log gitrepo2-$x > log-$x
143 done &&
144 cp -r log-* output-* /tmp/foo/ &&
146 test_cmp output-hg output-git &&
147 test_cmp log-hg log-git
150 test_expect_success 'symlink' '
151 mkdir -p tmp && cd tmp &&
152 test_when_finished "cd .. && rm -rf tmp" &&
155 git init -q gitrepo &&
156 cd gitrepo &&
157 echo alpha > alpha &&
158 git add alpha &&
159 git commit -m "add alpha" &&
160 ln -s alpha beta &&
161 git add beta &&
162 git commit -m "add beta"
163 ) &&
165 for x in hg git; do
167 hg_clone_$x gitrepo hgrepo-$x &&
168 cd hgrepo-$x &&
169 hg_log . &&
170 hg manifest -v
171 ) > output-$x &&
173 git_clone_$x hgrepo-$x gitrepo2-$x &&
174 git_log gitrepo2-$x > log-$x
175 done &&
177 test_cmp output-hg output-git &&
178 test_cmp log-hg log-git
181 test_expect_success 'merge conflict 1' '
182 mkdir -p tmp && cd tmp &&
183 test_when_finished "cd .. && rm -rf tmp" &&
186 hg init hgrepo1 &&
187 cd hgrepo1 &&
188 echo A > afile &&
189 hg add afile &&
190 hg ci -m "origin" &&
192 echo B > afile &&
193 hg ci -m "A->B" &&
195 hg up -r0 &&
196 echo C > afile &&
197 hg ci -m "A->C" &&
199 hg merge -r1 || true &&
200 echo C > afile &&
201 hg resolve -m afile &&
202 hg ci -m "merge to C"
203 ) &&
205 for x in hg git; do
206 git_clone_$x hgrepo1 gitrepo-$x &&
207 hg_clone_$x gitrepo-$x hgrepo2-$x &&
208 hg_log hgrepo2-$x > hg-log-$x &&
209 git_log gitrepo-$x > git-log-$x
210 done &&
212 test_cmp hg-log-hg hg-log-git &&
213 test_cmp git-log-hg git-log-git
216 test_expect_success 'merge conflict 2' '
217 mkdir -p tmp && cd tmp &&
218 test_when_finished "cd .. && rm -rf tmp" &&
221 hg init hgrepo1 &&
222 cd hgrepo1 &&
223 echo A > afile &&
224 hg add afile &&
225 hg ci -m "origin" &&
227 echo B > afile &&
228 hg ci -m "A->B" &&
230 hg up -r0 &&
231 echo C > afile &&
232 hg ci -m "A->C" &&
234 hg merge -r1 || true &&
235 echo B > afile &&
236 hg resolve -m afile &&
237 hg ci -m "merge to B"
238 ) &&
240 for x in hg git; do
241 git_clone_$x hgrepo1 gitrepo-$x &&
242 hg_clone_$x gitrepo-$x hgrepo2-$x &&
243 hg_log hgrepo2-$x > hg-log-$x &&
244 git_log gitrepo-$x > git-log-$x
245 done &&
247 test_cmp hg-log-hg hg-log-git &&
248 test_cmp git-log-hg git-log-git
251 test_expect_success 'converged merge' '
252 mkdir -p tmp && cd tmp &&
253 test_when_finished "cd .. && rm -rf tmp" &&
256 hg init hgrepo1 &&
257 cd hgrepo1 &&
258 echo A > afile &&
259 hg add afile &&
260 hg ci -m "origin" &&
262 echo B > afile &&
263 hg ci -m "A->B" &&
265 echo C > afile &&
266 hg ci -m "B->C" &&
268 hg up -r0 &&
269 echo C > afile &&
270 hg ci -m "A->C" &&
272 hg merge -r2 || true &&
273 hg ci -m "merge"
274 ) &&
276 for x in hg git; do
277 git_clone_$x hgrepo1 gitrepo-$x &&
278 hg_clone_$x gitrepo-$x hgrepo2-$x &&
279 hg_log hgrepo2-$x > hg-log-$x &&
280 git_log gitrepo-$x > git-log-$x
281 done &&
283 test_cmp hg-log-hg hg-log-git &&
284 test_cmp git-log-hg git-log-git
287 test_expect_success 'encoding' '
288 mkdir -p tmp && cd tmp &&
289 test_when_finished "cd .. && rm -rf tmp" &&
292 git init -q gitrepo &&
293 cd gitrepo &&
295 echo alpha > alpha &&
296 git add alpha &&
297 git commit -m "add älphà" &&
299 GIT_AUTHOR_NAME="tést èncödîng" &&
300 export GIT_AUTHOR_NAME &&
301 echo beta > beta &&
302 git add beta &&
303 git commit -m "add beta" &&
305 echo gamma > gamma &&
306 git add gamma &&
307 git commit -m "add gämmâ" &&
309 : TODO git config i18n.commitencoding latin-1 &&
310 echo delta > delta &&
311 git add delta &&
312 git commit -m "add déltà"
313 ) &&
315 for x in hg git; do
316 hg_clone_$x gitrepo hgrepo-$x &&
317 git_clone_$x hgrepo-$x gitrepo2-$x &&
319 HGENCODING=utf-8 hg_log hgrepo-$x > hg-log-$x &&
320 git_log gitrepo2-$x > git-log-$x
321 done &&
323 test_cmp hg-log-hg hg-log-git &&
324 test_cmp git-log-hg git-log-git
327 test_expect_success 'file removal' '
328 mkdir -p tmp && cd tmp &&
329 test_when_finished "cd .. && rm -rf tmp" &&
332 git init -q gitrepo &&
333 cd gitrepo &&
334 echo alpha > alpha &&
335 git add alpha &&
336 git commit -m "add alpha" &&
337 echo beta > beta &&
338 git add beta &&
339 git commit -m "add beta"
340 mkdir foo &&
341 echo blah > foo/bar &&
342 git add foo &&
343 git commit -m "add foo" &&
344 git rm alpha &&
345 git commit -m "remove alpha" &&
346 git rm foo/bar &&
347 git commit -m "remove foo/bar"
348 ) &&
350 for x in hg git; do
352 hg_clone_$x gitrepo hgrepo-$x &&
353 cd hgrepo-$x &&
354 hg_log . &&
355 hg manifest -r 3 &&
356 hg manifest
357 ) > output-$x &&
359 git_clone_$x hgrepo-$x gitrepo2-$x &&
360 git_log gitrepo2-$x > log-$x
361 done &&
363 test_cmp output-hg output-git &&
364 test_cmp log-hg log-git
367 test_expect_success 'git tags' '
368 mkdir -p tmp && cd tmp &&
369 test_when_finished "cd .. && rm -rf tmp" &&
372 git init -q gitrepo &&
373 cd gitrepo &&
374 git config receive.denyCurrentBranch ignore &&
375 echo alpha > alpha &&
376 git add alpha &&
377 git commit -m "add alpha" &&
378 git tag alpha &&
380 echo beta > beta &&
381 git add beta &&
382 git commit -m "add beta" &&
383 git tag -a -m "added tag beta" beta
384 ) &&
386 for x in hg git; do
387 hg_clone_$x gitrepo hgrepo-$x &&
388 hg_log hgrepo-$x > log-$x
389 done &&
391 test_cmp log-hg log-git
394 test_expect_success 'hg author' '
395 mkdir -p tmp && cd tmp &&
396 test_when_finished "cd .. && rm -rf tmp" &&
398 for x in hg git; do
400 git init -q gitrepo-$x &&
401 cd gitrepo-$x &&
403 echo alpha > alpha &&
404 git add alpha &&
405 git commit -m "add alpha" &&
406 git checkout -q -b not-master
407 ) &&
410 hg_clone_$x gitrepo-$x hgrepo-$x &&
411 cd hgrepo-$x &&
413 hg co master &&
414 echo beta > beta &&
415 hg add beta &&
416 hg commit -u "test" -m "add beta" &&
418 echo gamma >> beta &&
419 hg commit -u "test <test@example.com> (comment)" -m "modify beta" &&
421 echo gamma > gamma &&
422 hg add gamma &&
423 hg commit -u "<test@example.com>" -m "add gamma" &&
425 echo delta > delta &&
426 hg add delta &&
427 hg commit -u "name<test@example.com>" -m "add delta" &&
429 echo epsilon > epsilon &&
430 hg add epsilon &&
431 hg commit -u "name <test@example.com" -m "add epsilon" &&
433 echo zeta > zeta &&
434 hg add zeta &&
435 hg commit -u " test " -m "add zeta" &&
437 echo eta > eta &&
438 hg add eta &&
439 hg commit -u "test < test@example.com >" -m "add eta" &&
441 echo theta > theta &&
442 hg add theta &&
443 hg commit -u "test >test@example.com>" -m "add theta" &&
445 echo iota > iota &&
446 hg add iota &&
447 hg commit -u "test <test <at> example <dot> com>" -m "add iota"
448 ) &&
450 hg_push_$x hgrepo-$x gitrepo-$x &&
451 hg_clone_$x gitrepo-$x hgrepo2-$x &&
453 hg_log hgrepo2-$x > hg-log-$x &&
454 git_log gitrepo-$x > git-log-$x
455 done &&
457 test_cmp git-log-hg git-log-git &&
459 test_cmp hg-log-hg hg-log-git &&
460 test_cmp git-log-hg git-log-git
463 test_expect_success 'hg branch' '
464 mkdir -p tmp && cd tmp &&
465 test_when_finished "cd .. && rm -rf tmp" &&
467 for x in hg git; do
469 git init -q gitrepo-$x &&
470 cd gitrepo-$x &&
472 echo alpha > alpha &&
473 git add alpha &&
474 git commit -q -m "add alpha" &&
475 git checkout -q -b not-master
476 ) &&
479 hg_clone_$x gitrepo-$x hgrepo-$x &&
481 cd hgrepo-$x &&
482 hg -q co master &&
483 hg mv alpha beta &&
484 hg -q commit -m "rename alpha to beta" &&
485 hg branch gamma | grep -v "permanent and global" &&
486 hg -q commit -m "started branch gamma"
487 ) &&
489 hg_push_$x hgrepo-$x gitrepo-$x &&
490 hg_clone_$x gitrepo-$x hgrepo2-$x &&
492 hg_log hgrepo2-$x > hg-log-$x &&
493 git_log gitrepo-$x > git-log-$x
494 done &&
496 test_cmp hg-log-hg hg-log-git &&
497 test_cmp git-log-hg git-log-git
500 test_expect_success 'hg tags' '
501 mkdir -p tmp && cd tmp &&
502 test_when_finished "cd .. && rm -rf tmp" &&
504 for x in hg git; do
506 git init -q gitrepo-$x &&
507 cd gitrepo-$x &&
509 echo alpha > alpha &&
510 git add alpha &&
511 git commit -m "add alpha" &&
512 git checkout -q -b not-master
513 ) &&
516 hg_clone_$x gitrepo-$x hgrepo-$x &&
518 cd hgrepo-$x &&
519 hg co master &&
520 hg tag alpha
521 ) &&
523 hg_push_$x hgrepo-$x gitrepo-$x &&
524 hg_clone_$x gitrepo-$x hgrepo2-$x &&
527 git --git-dir=gitrepo-$x/.git tag -l &&
528 hg_log hgrepo2-$x &&
529 cat hgrepo2-$x/.hgtags
530 ) > output-$x
531 done &&
533 test_cmp output-hg output-git
536 test_done