diff options
Diffstat (limited to 'contrib/remote-helpers/test-bzr.sh')
-rwxr-xr-x | contrib/remote-helpers/test-bzr.sh | 393 |
1 files changed, 393 insertions, 0 deletions
diff --git a/contrib/remote-helpers/test-bzr.sh b/contrib/remote-helpers/test-bzr.sh new file mode 100755 index 0000000000..5c50251783 --- /dev/null +++ b/contrib/remote-helpers/test-bzr.sh @@ -0,0 +1,393 @@ +#!/bin/sh +# +# Copyright (c) 2012 Felipe Contreras +# + +test_description='Test remote-bzr' + +. ./test-lib.sh + +if ! test_have_prereq PYTHON +then + skip_all='skipping remote-bzr tests; python not available' + test_done +fi + +if ! python -c 'import bzrlib' +then + skip_all='skipping remote-bzr tests; bzr not available' + test_done +fi + +check () { + echo $3 >expected && + git --git-dir=$1/.git log --format='%s' -1 $2 >actual + test_cmp expected actual +} + +bzr whoami "A U Thor <author@example.com>" + +test_expect_success 'cloning' ' + ( + bzr init bzrrepo && + cd bzrrepo && + echo one >content && + bzr add content && + bzr commit -m one + ) && + + git clone "bzr::bzrrepo" gitrepo && + check gitrepo HEAD one +' + +test_expect_success 'pulling' ' + ( + cd bzrrepo && + echo two >content && + bzr commit -m two + ) && + + (cd gitrepo && git pull) && + + check gitrepo HEAD two +' + +test_expect_success 'pushing' ' + ( + cd gitrepo && + echo three >content && + git commit -a -m three && + git push + ) && + + echo three >expected && + cat bzrrepo/content >actual && + test_cmp expected actual +' + +test_expect_success 'roundtrip' ' + ( + cd gitrepo && + git pull && + git log --format="%s" -1 origin/master >actual + ) && + echo three >expected && + test_cmp expected actual && + + (cd gitrepo && git push && git pull) && + + ( + cd bzrrepo && + echo four >content && + bzr commit -m four + ) && + + (cd gitrepo && git pull && git push) && + + check gitrepo HEAD four && + + ( + cd gitrepo && + echo five >content && + git commit -a -m five && + git push && git pull + ) && + + (cd bzrrepo && bzr revert) && + + echo five >expected && + cat bzrrepo/content >actual && + test_cmp expected actual +' + +cat >expected <<\EOF +100644 blob 54f9d6da5c91d556e6b54340b1327573073030af content +100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb executable +120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea link +EOF + +test_expect_success 'special modes' ' + ( + cd bzrrepo && + echo exec >executable + chmod +x executable && + bzr add executable + bzr commit -m exec && + ln -s content link + bzr add link + bzr commit -m link && + mkdir dir && + bzr add dir && + bzr commit -m dir + ) && + + ( + cd gitrepo && + git pull + git ls-tree HEAD >../actual + ) && + + test_cmp expected actual && + + ( + cd gitrepo && + git cat-file -p HEAD:link >../actual + ) && + + printf content >expected && + test_cmp expected actual +' + +cat >expected <<\EOF +100644 blob 54f9d6da5c91d556e6b54340b1327573073030af content +100755 blob 68769579c3eaadbe555379b9c3538e6628bae1eb executable +120000 blob 6b584e8ece562ebffc15d38808cd6b98fc3d97ea link +040000 tree 35c0caa46693cef62247ac89a680f0c5ce32b37b movedir-new +EOF + +test_expect_success 'moving directory' ' + ( + cd bzrrepo && + mkdir movedir && + echo one >movedir/one && + echo two >movedir/two && + bzr add movedir && + bzr commit -m movedir && + bzr mv movedir movedir-new && + bzr commit -m movedir-new + ) && + + ( + cd gitrepo && + git pull && + git ls-tree HEAD >../actual + ) && + + test_cmp expected actual +' + +test_expect_success 'different authors' ' + ( + cd bzrrepo && + echo john >>content && + bzr commit -m john \ + --author "Jane Rey <jrey@example.com>" \ + --author "John Doe <jdoe@example.com>" + ) && + + ( + cd gitrepo && + git pull && + git show --format="%an <%ae>, %cn <%ce>" --quiet >../actual + ) && + + echo "Jane Rey <jrey@example.com>, A U Thor <author@example.com>" >expected && + test_cmp expected actual +' + +# cleanup previous stuff +rm -rf bzrrepo gitrepo + +test_expect_success 'fetch utf-8 filenames' ' + test_when_finished "rm -rf bzrrepo gitrepo && LC_ALL=C" && + + LC_ALL=en_US.UTF-8 + export LC_ALL + + ( + bzr init bzrrepo && + cd bzrrepo && + + echo test >>"ærø" && + bzr add "ærø" && + echo test >>"ø~?" && + bzr add "ø~?" && + bzr commit -m add-utf-8 && + echo test >>"ærø" && + bzr commit -m test-utf-8 && + bzr rm "ø~?" && + bzr mv "ærø" "ø~?" && + bzr commit -m bzr-mv-utf-8 + ) && + + ( + git clone "bzr::bzrrepo" gitrepo && + cd gitrepo && + git -c core.quotepath=false ls-files >../actual + ) && + echo "ø~?" >expected && + test_cmp expected actual +' + +test_expect_success 'push utf-8 filenames' ' + test_when_finished "rm -rf bzrrepo gitrepo && LC_ALL=C" && + + mkdir -p tmp && cd tmp && + + LC_ALL=en_US.UTF-8 + export LC_ALL + + ( + bzr init bzrrepo && + cd bzrrepo && + + echo one >>content && + bzr add content && + bzr commit -m one + ) && + + ( + git clone "bzr::bzrrepo" gitrepo && + cd gitrepo && + + echo test >>"ærø" && + git add "ærø" && + git commit -m utf-8 && + + git push + ) && + + (cd bzrrepo && bzr ls >../actual) && + printf "content\nærø\n" >expected && + test_cmp expected actual +' + +test_expect_success 'pushing a merge' ' + test_when_finished "rm -rf bzrrepo gitrepo" && + + ( + bzr init bzrrepo && + cd bzrrepo && + echo one >content && + bzr add content && + bzr commit -m one + ) && + + git clone "bzr::bzrrepo" gitrepo && + + ( + cd bzrrepo && + echo two >content && + bzr commit -m two + ) && + + ( + cd gitrepo && + echo three >content && + git commit -a -m three && + git fetch && + git merge origin/master || true && + echo three >content && + git commit -a --no-edit && + git push + ) && + + echo three >expected && + cat bzrrepo/content >actual && + test_cmp expected actual +' + +cat >expected <<\EOF +origin/HEAD +origin/branch +origin/trunk +EOF + +test_expect_success 'proper bzr repo' ' + test_when_finished "rm -rf bzrrepo gitrepo" && + + bzr init-repo bzrrepo && + + ( + bzr init bzrrepo/trunk && + cd bzrrepo/trunk && + echo one >>content && + bzr add content && + bzr commit -m one + ) && + + ( + bzr branch bzrrepo/trunk bzrrepo/branch && + cd bzrrepo/branch && + echo two >>content && + bzr commit -m one + ) && + + ( + git clone "bzr::bzrrepo" gitrepo && + cd gitrepo && + git for-each-ref --format "%(refname:short)" refs/remotes/origin >../actual + ) && + + test_cmp expected actual +' + +test_expect_success 'strip' ' + test_when_finished "rm -rf bzrrepo gitrepo" && + + ( + bzr init bzrrepo && + cd bzrrepo && + + echo one >>content && + bzr add content && + bzr commit -m one && + + echo two >>content && + bzr commit -m two + ) && + + git clone "bzr::bzrrepo" gitrepo && + + ( + cd bzrrepo && + bzr uncommit --force && + + echo three >>content && + bzr commit -m three && + + echo four >>content && + bzr commit -m four && + bzr log --line | sed -e "s/^[0-9][0-9]*: //" >../expected + ) && + + ( + cd gitrepo && + git fetch && + git log --format="%an %ad %s" --date=short origin/master >../actual + ) && + + test_cmp expected actual +' + +test_expect_success 'export utf-8 authors' ' + test_when_finished "rm -rf bzrrepo gitrepo && LC_ALL=C && unset GIT_COMMITTER_NAME" && + + LC_ALL=en_US.UTF-8 + export LC_ALL + + GIT_COMMITTER_NAME="Grégoire" + export GIT_COMMITTER_NAME + + bzr init bzrrepo && + + ( + git init gitrepo && + cd gitrepo && + echo greg >>content && + git add content && + git commit -m one && + git remote add bzr "bzr::../bzrrepo" && + git push bzr + ) && + + ( + cd bzrrepo && + bzr log | grep "^committer: " >../actual + ) && + + echo "committer: Grégoire <committer@example.com>" >expected && + test_cmp expected actual +' + +test_done |