#!/bin/sh
#
# Copyright (c) 2008 Eric Wong

test_description='git svn honors i18n.commitEncoding in config'

. ./lib-git-svn.sh

compare_git_head_with () {
	nr=`wc -l < "$1"`
	a=7
	b=$(($a + $nr - 1))
	git cat-file commit HEAD | sed -ne "$a,${b}p" >current &&
	test_cmp current "$1"
}

a_utf8_locale=$(locale -a | sed -n '/\.[uU][tT][fF]-*8$/{
	p
	q
}')

if test -n "$a_utf8_locale"
then
	test_set_prereq UTF8
else
	say "UTF-8 locale not available, some tests are skipped"
fi

compare_svn_head_with () {
	# extract just the log message and strip out committer info.
	# don't use --limit here since svn 1.1.x doesn't have it,
	LC_ALL="$a_utf8_locale" svn log `git svn info --url` | perl -w -e '
		use bytes;
		$/ = ("-"x72) . "\n";
		my @x = <STDIN>;
		@x = split(/\n/, $x[1]);
		splice(@x, 0, 2);
		$x[-1] = "";
		print join("\n", @x);
	' > current &&
	test_cmp current "$1"
}

for H in ISO8859-1 eucJP ISO-2022-JP
do
	test_expect_success "$H setup" '
		mkdir $H &&
		svn_cmd import -m "$H test" $H "$svnrepo"/$H &&
		git svn clone "$svnrepo"/$H $H
	'
done

for H in ISO8859-1 eucJP ISO-2022-JP
do
	test_expect_success "$H commit on git side" '
	(
		cd $H &&
		git config i18n.commitencoding $H &&
		git checkout -b t refs/remotes/git-svn &&
		echo $H >F &&
		git add F &&
		git commit -a -F "$TEST_DIRECTORY"/t3900/$H.txt &&
		E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
		test "z$E" = "z$H"
		compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
	)
	'
done

for H in ISO8859-1 eucJP ISO-2022-JP
do
	test_expect_success "$H dcommit to svn" '
	(
		cd $H &&
		git svn dcommit &&
		git cat-file commit HEAD | grep git-svn-id: &&
		E=$(git cat-file commit HEAD | sed -ne "s/^encoding //p") &&
		test "z$E" = "z$H" &&
		compare_git_head_with "$TEST_DIRECTORY"/t3900/$H.txt
	)
	'
done

test_expect_success UTF8 'ISO-8859-1 should match UTF-8 in svn' '
	(
		cd ISO8859-1 &&
		compare_svn_head_with "$TEST_DIRECTORY"/t3900/1-UTF-8.txt
	)
'

for H in eucJP ISO-2022-JP
do
	test_expect_success UTF8 "$H should match UTF-8 in svn" '
		(
			cd $H &&
			compare_svn_head_with "$TEST_DIRECTORY"/t3900/2-UTF-8.txt
		)
	'
done

test_done
