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