/contrib/remote-helpers/test-hg-hg-git.sh
Shell | 542 lines | 499 code | 30 blank | 13 comment | 10 complexity | b995c44f1fa46477e37395f2a329aa75 MD5 | raw file
- #!/bin/sh
- #
- # Copyright (c) 2012 Felipe Contreras
- #
- # Base commands from hg-git tests:
- # https://bitbucket.org/durin42/hg-git/src
- #
- test_description='Test remote-hg output compared to hg-git'
- test -n "$TEST_DIRECTORY" || TEST_DIRECTORY=${0%/*}/../../t
- . "$TEST_DIRECTORY"/test-lib.sh
- if ! test_have_prereq PYTHON
- then
- skip_all='skipping remote-hg tests; python not available'
- test_done
- fi
- if ! python -c 'import mercurial'
- then
- skip_all='skipping remote-hg tests; mercurial not available'
- test_done
- fi
- if ! python -c 'import hggit'
- then
- skip_all='skipping remote-hg tests; hg-git not available'
- test_done
- fi
- # clone to a git repo with git
- git_clone_git () {
- git clone -q "hg::$1" $2 &&
- (cd $2 && git checkout master && git branch -D default)
- }
- # clone to an hg repo with git
- hg_clone_git () {
- (
- hg init $2 &&
- hg -R $2 bookmark -i master &&
- cd $1 &&
- git push -q "hg::../$2" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*'
- ) &&
- (cd $2 && hg -q update)
- }
- # clone to a git repo with hg
- git_clone_hg () {
- (
- git init -q $2 &&
- cd $1 &&
- hg bookmark -i -f -r tip master &&
- hg -q push -r master ../$2 || true
- )
- }
- # clone to an hg repo with hg
- hg_clone_hg () {
- hg -q clone $1 $2
- }
- # push an hg repo with git
- hg_push_git () {
- (
- cd $2
- git checkout -q -b tmp &&
- git fetch -q "hg::../$1" 'refs/tags/*:refs/tags/*' 'refs/heads/*:refs/heads/*' &&
- git branch -D default &&
- git checkout -q @{-1} &&
- git branch -q -D tmp 2>/dev/null || true
- )
- }
- # push an hg git repo with hg
- hg_push_hg () {
- (
- cd $1 &&
- hg -q push ../$2 || true
- )
- }
- hg_log () {
- hg -R $1 log --graph --debug >log &&
- grep -v 'tag: *default/' log
- }
- git_log () {
- git --git-dir=$1/.git fast-export --branches
- }
- setup () {
- (
- echo "[ui]"
- echo "username = A U Thor <author@example.com>"
- echo "[defaults]"
- echo "backout = -d \"0 0\""
- echo "commit = -d \"0 0\""
- echo "debugrawcommit = -d \"0 0\""
- echo "tag = -d \"0 0\""
- echo "[extensions]"
- echo "hgext.bookmarks ="
- echo "hggit ="
- echo "graphlog ="
- ) >>"$HOME"/.hgrc &&
- git config --global receive.denycurrentbranch warn
- git config --global remote-hg.hg-git-compat true
- git config --global remote-hg.track-branches false
- HGEDITOR=true
- HGMERGE=true
- GIT_AUTHOR_DATE="2007-01-01 00:00:00 +0230"
- GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"
- export HGEDITOR HGMERGE GIT_AUTHOR_DATE GIT_COMMITTER_DATE
- }
- setup
- test_expect_success 'executable bit' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- git init -q gitrepo &&
- cd gitrepo &&
- echo alpha >alpha &&
- chmod 0644 alpha &&
- git add alpha &&
- git commit -m "add alpha" &&
- chmod 0755 alpha &&
- git add alpha &&
- git commit -m "set executable bit" &&
- chmod 0644 alpha &&
- git add alpha &&
- git commit -m "clear executable bit"
- ) &&
- for x in hg git
- do
- (
- hg_clone_$x gitrepo hgrepo-$x &&
- cd hgrepo-$x &&
- hg_log . &&
- hg manifest -r 1 -v &&
- hg manifest -v
- ) >"output-$x" &&
- git_clone_$x hgrepo-$x gitrepo2-$x &&
- git_log gitrepo2-$x >"log-$x"
- done &&
- test_cmp output-hg output-git &&
- test_cmp log-hg log-git
- '
- test_expect_success 'symlink' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- git init -q gitrepo &&
- cd gitrepo &&
- echo alpha >alpha &&
- git add alpha &&
- git commit -m "add alpha" &&
- ln -s alpha beta &&
- git add beta &&
- git commit -m "add beta"
- ) &&
- for x in hg git
- do
- (
- hg_clone_$x gitrepo hgrepo-$x &&
- cd hgrepo-$x &&
- hg_log . &&
- hg manifest -v
- ) >"output-$x" &&
- git_clone_$x hgrepo-$x gitrepo2-$x &&
- git_log gitrepo2-$x >"log-$x"
- done &&
- test_cmp output-hg output-git &&
- test_cmp log-hg log-git
- '
- test_expect_success 'merge conflict 1' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- hg init hgrepo1 &&
- cd hgrepo1 &&
- echo A >afile &&
- hg add afile &&
- hg ci -m "origin" &&
- echo B >afile &&
- hg ci -m "A->B" &&
- hg up -r0 &&
- echo C >afile &&
- hg ci -m "A->C" &&
- hg merge -r1 &&
- echo C >afile &&
- hg resolve -m afile &&
- hg ci -m "merge to C"
- ) &&
- for x in hg git
- do
- git_clone_$x hgrepo1 gitrepo-$x &&
- hg_clone_$x gitrepo-$x hgrepo2-$x &&
- hg_log hgrepo2-$x >"hg-log-$x" &&
- git_log gitrepo-$x >"git-log-$x"
- done &&
- test_cmp hg-log-hg hg-log-git &&
- test_cmp git-log-hg git-log-git
- '
- test_expect_success 'merge conflict 2' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- hg init hgrepo1 &&
- cd hgrepo1 &&
- echo A >afile &&
- hg add afile &&
- hg ci -m "origin" &&
- echo B >afile &&
- hg ci -m "A->B" &&
- hg up -r0 &&
- echo C >afile &&
- hg ci -m "A->C" &&
- hg merge -r1 || true &&
- echo B >afile &&
- hg resolve -m afile &&
- hg ci -m "merge to B"
- ) &&
- for x in hg git
- do
- git_clone_$x hgrepo1 gitrepo-$x &&
- hg_clone_$x gitrepo-$x hgrepo2-$x &&
- hg_log hgrepo2-$x >"hg-log-$x" &&
- git_log gitrepo-$x >"git-log-$x"
- done &&
- test_cmp hg-log-hg hg-log-git &&
- test_cmp git-log-hg git-log-git
- '
- test_expect_success 'converged merge' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- hg init hgrepo1 &&
- cd hgrepo1 &&
- echo A >afile &&
- hg add afile &&
- hg ci -m "origin" &&
- echo B >afile &&
- hg ci -m "A->B" &&
- echo C >afile &&
- hg ci -m "B->C" &&
- hg up -r0 &&
- echo C >afile &&
- hg ci -m "A->C" &&
- hg merge -r2 || true &&
- hg ci -m "merge"
- ) &&
- for x in hg git
- do
- git_clone_$x hgrepo1 gitrepo-$x &&
- hg_clone_$x gitrepo-$x hgrepo2-$x &&
- hg_log hgrepo2-$x >"hg-log-$x" &&
- git_log gitrepo-$x >"git-log-$x"
- done &&
- test_cmp hg-log-hg hg-log-git &&
- test_cmp git-log-hg git-log-git
- '
- test_expect_success 'encoding' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- git init -q gitrepo &&
- cd gitrepo &&
- echo alpha >alpha &&
- git add alpha &&
- git commit -m "add älphà" &&
- GIT_AUTHOR_NAME="tést èncödîng" &&
- export GIT_AUTHOR_NAME &&
- echo beta >beta &&
- git add beta &&
- git commit -m "add beta" &&
- echo gamma >gamma &&
- git add gamma &&
- git commit -m "add gämmâ" &&
- : TODO git config i18n.commitencoding latin-1 &&
- echo delta >delta &&
- git add delta &&
- git commit -m "add déltà"
- ) &&
- for x in hg git
- do
- hg_clone_$x gitrepo hgrepo-$x &&
- git_clone_$x hgrepo-$x gitrepo2-$x &&
- HGENCODING=utf-8 hg_log hgrepo-$x >"hg-log-$x" &&
- git_log gitrepo2-$x >"git-log-$x"
- done &&
- test_cmp hg-log-hg hg-log-git &&
- test_cmp git-log-hg git-log-git
- '
- test_expect_success 'file removal' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- git init -q gitrepo &&
- cd gitrepo &&
- echo alpha >alpha &&
- git add alpha &&
- git commit -m "add alpha" &&
- echo beta >beta &&
- git add beta &&
- git commit -m "add beta"
- mkdir foo &&
- echo blah >foo/bar &&
- git add foo &&
- git commit -m "add foo" &&
- git rm alpha &&
- git commit -m "remove alpha" &&
- git rm foo/bar &&
- git commit -m "remove foo/bar"
- ) &&
- for x in hg git
- do
- (
- hg_clone_$x gitrepo hgrepo-$x &&
- cd hgrepo-$x &&
- hg_log . &&
- hg manifest -r 3 &&
- hg manifest
- ) >"output-$x" &&
- git_clone_$x hgrepo-$x gitrepo2-$x &&
- git_log gitrepo2-$x >"log-$x"
- done &&
- test_cmp output-hg output-git &&
- test_cmp log-hg log-git
- '
- test_expect_success 'git tags' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- (
- git init -q gitrepo &&
- cd gitrepo &&
- git config receive.denyCurrentBranch ignore &&
- echo alpha >alpha &&
- git add alpha &&
- git commit -m "add alpha" &&
- git tag alpha &&
- echo beta >beta &&
- git add beta &&
- git commit -m "add beta" &&
- git tag -a -m "added tag beta" beta
- ) &&
- for x in hg git
- do
- hg_clone_$x gitrepo hgrepo-$x &&
- hg_log hgrepo-$x >"log-$x"
- done &&
- test_cmp log-hg log-git
- '
- test_expect_success 'hg author' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- for x in hg git
- do
- (
- git init -q gitrepo-$x &&
- cd gitrepo-$x &&
- echo alpha >alpha &&
- git add alpha &&
- git commit -m "add alpha" &&
- git checkout -q -b not-master
- ) &&
- (
- hg_clone_$x gitrepo-$x hgrepo-$x &&
- cd hgrepo-$x &&
- hg co master &&
- echo beta >beta &&
- hg add beta &&
- hg commit -u "test" -m "add beta" &&
- echo gamma >>beta &&
- hg commit -u "test <test@example.com> (comment)" -m "modify beta" &&
- echo gamma >gamma &&
- hg add gamma &&
- hg commit -u "<test@example.com>" -m "add gamma" &&
- echo delta >delta &&
- hg add delta &&
- hg commit -u "name<test@example.com>" -m "add delta" &&
- echo epsilon >epsilon &&
- hg add epsilon &&
- hg commit -u "name <test@example.com" -m "add epsilon" &&
- echo zeta >zeta &&
- hg add zeta &&
- hg commit -u " test " -m "add zeta" &&
- echo eta >eta &&
- hg add eta &&
- hg commit -u "test < test@example.com >" -m "add eta" &&
- echo theta >theta &&
- hg add theta &&
- hg commit -u "test >test@example.com>" -m "add theta" &&
- echo iota >iota &&
- hg add iota &&
- hg commit -u "test <test <at> example <dot> com>" -m "add iota"
- ) &&
- hg_push_$x hgrepo-$x gitrepo-$x &&
- hg_clone_$x gitrepo-$x hgrepo2-$x &&
- hg_log hgrepo2-$x >"hg-log-$x" &&
- git_log gitrepo-$x >"git-log-$x"
- done &&
- test_cmp hg-log-hg hg-log-git &&
- test_cmp git-log-hg git-log-git
- '
- test_expect_success 'hg branch' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- for x in hg git
- do
- (
- git init -q gitrepo-$x &&
- cd gitrepo-$x &&
- echo alpha >alpha &&
- git add alpha &&
- git commit -q -m "add alpha" &&
- git checkout -q -b not-master
- ) &&
- (
- hg_clone_$x gitrepo-$x hgrepo-$x &&
- cd hgrepo-$x &&
- hg -q co master &&
- hg mv alpha beta &&
- hg -q commit -m "rename alpha to beta" &&
- hg branch gamma | grep -v "permanent and global" &&
- hg -q commit -m "started branch gamma"
- ) &&
- hg_push_$x hgrepo-$x gitrepo-$x &&
- hg_clone_$x gitrepo-$x hgrepo2-$x &&
- hg_log hgrepo2-$x >"hg-log-$x" &&
- git_log gitrepo-$x >"git-log-$x"
- done &&
- test_cmp hg-log-hg hg-log-git &&
- test_cmp git-log-hg git-log-git
- '
- test_expect_success 'hg tags' '
- test_when_finished "rm -rf gitrepo* hgrepo*" &&
- for x in hg git
- do
- (
- git init -q gitrepo-$x &&
- cd gitrepo-$x &&
- echo alpha >alpha &&
- git add alpha &&
- git commit -m "add alpha" &&
- git checkout -q -b not-master
- ) &&
- (
- hg_clone_$x gitrepo-$x hgrepo-$x &&
- cd hgrepo-$x &&
- hg co master &&
- hg tag alpha
- ) &&
- hg_push_$x hgrepo-$x gitrepo-$x &&
- hg_clone_$x gitrepo-$x hgrepo2-$x &&
- (
- git --git-dir=gitrepo-$x/.git tag -l &&
- hg_log hgrepo2-$x &&
- cat hgrepo2-$x/.hgtags
- ) >"output-$x"
- done &&
- test_cmp output-hg output-git
- '
- test_done