#!/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
