#!/bin/sh

determineGitRevision()
{
	haikuTop=$1
	haikuBuildOutputDir=$2

	revision=`cat ${haikuBuildOutputDir}/haiku-revision 2>/dev/null`
	lastBuiltRevision=`cat ${haikuBuildOutputDir}/last-built-revision \
		2>/dev/null`
	localRev=`git rev-list -n1 HEAD`

	# only determine the haiku-revision if anything has changed from
	# last build
	if [ -z "$revision" -o "$lastBuiltRevision" != "$localRev" ]; then
		# the revision we use is the description of HEAD with respect to the
		# last reachable hrev-(haiku-revision-)tag
		revision=`git describe --dirty --tags --match=hrev*`
		if echo "$revision" | grep -- '-' >/dev/null; then
			# HEAD is not directly a changeset from Haiku's central repo, so we
			# add the current branch name as additional info
			branchName=`git branch | grep '*' | cut -b 3-`
			revision="$revision [$branchName]"
		fi
		echo $localRev >${haikuBuildOutputDir}/last-built-revision
	fi
}


determineHaikuRevision()
{
	haikuTop=$1
	haikuBuildOutputDir=$2

	case `uname` in
	Darwin)
		SED=gsed
		;;
	*)
		SED=sed
		;;
	esac
	export SED

	originalDir=`pwd`
	cd ${haikuTop}
	export LC_ALL=C
	if [ -d .svn ]; then
		revision=`svn info 2>/dev/null | grep Revision | awk '{printf $2}'`
	elif [ -d .git/svn ]; then
		revision=`git svn info 2>/dev/null | grep Revision | awk '{printf $2}'`
	elif [ -d .git ]; then
		determineGitRevision $haikuTop $haikuBuildOutputDir
	elif [ -d .hg ]; then
		# Try searching hg log for last svn commit
		# Extract from "(svn r12345) ..." line
		revision=`(cd ${haikuTop} &&
			hg log --no-merges --template "{desc|firstline}\n") 2> /dev/null |
			grep --max-count=1 "(svn r" |
			$SED -n -e 's,(svn r\(.*\)).*,\1,p'`
	fi
	if [ "$revision" = "" ]; then
		revision=0
	fi
	echo $revision >${haikuBuildOutputDir}/haiku-revision
	cd $originalDir
}
