blob: 1e53ff9a584a302366dcbd647a2e27db3fd1b9fe [file] [log] [blame]
#!/bin/sh
#
# Copyright (c) 2012 Felipe Contreras
#
test_description='Test remote-bzr'
test -n "$TEST_DIRECTORY" || TEST_DIRECTORY=${0%/*}/../../t
. "$TEST_DIRECTORY"/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 master
) &&
(
cd bzrrepo &&
bzr log | grep "^committer: " >../actual
) &&
echo "committer: Grégoire <committer@example.com>" >expected &&
test_cmp expected actual
'
test_done