#!/bin/sh

. ./test-lib.sh

unset CVS_SERVER
# for clean cvsps cache
HOME=$(pwd)
export HOME

if ! type cvs >/dev/null 2>&1
then
	say 'skipping cvsimport tests, cvs not found'
	test_done
fi

CVS="cvs -f"
export CVS

cvsps_version=`cvsps -h 2>&1 | sed -ne 's/cvsps version //p'`
case "$cvsps_version" in
2.1 | 2.2*)
	;;
'')
	say 'skipping cvsimport tests, cvsps not found'
	test_done
	;;
*)
	say 'skipping cvsimport tests, unsupported cvsps version'
	test_done
	;;
esac

test_cvs_co () {
	# Usage: test_cvs_co BRANCH_NAME
	rm -rf module-cvs-"$1"
	if [ "$1" = "master" ]
	then
		$CVS co -P -d module-cvs-"$1" -A module
	else
		$CVS co -P -d module-cvs-"$1" -r "$1" module
	fi
}

test_git_co () {
	# Usage: test_git_co BRANCH_NAME
	(cd module-git && git checkout "$1")
}

test_cmp_branch_file () {
	# Usage: test_cmp_branch_file BRANCH_NAME PATH
	# The branch must already be checked out of CVS and git.
	test_cmp module-cvs-"$1"/"$2" module-git/"$2"
}

test_cmp_branch_tree () {
	# Usage: test_cmp_branch_tree BRANCH_NAME
	# Check BRANCH_NAME out of CVS and git and make sure that all
	# of the files and directories are identical.

	test_cvs_co "$1" &&
	test_git_co "$1" &&
	(
		cd module-cvs-"$1"
		find . -type d -name CVS -prune -o -type f -print
	) | sort >module-cvs-"$1".list &&
	(
		cd module-git
		find . -type d -name .git -prune -o -type f -print
	) | sort >module-git-"$1".list &&
	test_cmp module-cvs-"$1".list module-git-"$1".list &&
	cat module-cvs-"$1".list | while read f
	do
		test_cmp_branch_file "$1" "$f" || return 1
	done
}