1218893Sdim#!/bin/sh
2193326Sed
3193326SeddetermineGitRevision()
4193326Sed{
5193326Sed	haikuTop=$1
6193326Sed	haikuBuildOutputDir=$2
7193326Sed
8193326Sed	revision=`cat ${haikuBuildOutputDir}/haiku-revision 2>/dev/null`
9193326Sed	lastBuiltRevision=`cat ${haikuBuildOutputDir}/last-built-revision \
10193326Sed		2>/dev/null`
11226633Sdim	localRev=`git rev-parse HEAD`
12193326Sed
13193326Sed	# only determine the haiku-revision if anything has changed from
14263508Sdim	# last build
15193326Sed	if [ -z "$revision" -o "$lastBuiltRevision" != "$localRev" ]; then
16193326Sed		# the revision we use is the description of HEAD with respect to the
17205219Srdivacky		# last reachable hrev-(haiku-revision-)tag
18205219Srdivacky		revision=`git describe --dirty --tags --match=hrev*`
19205219Srdivacky		if [ -z "$revision" ]; then
20205219Srdivacky			# failed to find any hrev tags, use short hash instead
21193326Sed			revision=`git rev-parse --short HEAD`
22193326Sed		elif echo "$revision" | grep -- '-' >/dev/null; then
23193326Sed			# HEAD is not directly a changeset from Haiku's central repo, so we
24193326Sed			# add the current branch name as additional info
25193326Sed			branchName=`git branch | grep '*' | cut -b 3-`
26193326Sed			revision="$revision [$branchName]"
27193326Sed		fi
28193326Sed		echo $localRev >${haikuBuildOutputDir}/last-built-revision
29193326Sed	fi
30234353Sdim}
31193326Sed
32193326Sed
33193326SeddetermineHaikuRevision()
34193326Sed{
35210299Sed	haikuTop=$1
36226633Sdim	haikuBuildOutputDir=$2
37193326Sed
38198092Srdivacky	case `uname` in
39226633Sdim	Darwin)
40193326Sed		SED=gsed
41193326Sed		;;
42234353Sdim	*)
43234353Sdim		SED=sed
44198092Srdivacky		;;
45193326Sed	esac
46193326Sed	export SED
47193326Sed
48234353Sdim	originalDir=`pwd`
49234353Sdim	cd ${haikuTop}
50198092Srdivacky	export LC_ALL=C
51193326Sed	if [ -d .svn ]; then
52193326Sed		revision=`svn info 2>/dev/null | grep Revision | awk '{printf $2}'`
53193326Sed	elif [ -d .git/svn ]; then
54234353Sdim		revision=`git svn info 2>/dev/null | grep Revision | awk '{printf $2}'`
55234353Sdim	elif [ -d .git ]; then
56193326Sed		determineGitRevision $haikuTop $haikuBuildOutputDir
57193326Sed	elif [ -d .hg ]; then
58193326Sed		# Try searching hg log for last svn commit
59193326Sed		# Extract from "(svn r12345) ..." line
60198092Srdivacky		revision=`(cd ${haikuTop} &&
61193326Sed			hg log --no-merges --template "{desc|firstline}\n") 2> /dev/null |
62193326Sed			grep --max-count=1 "(svn r" |
63193326Sed			$SED -n -e 's,(svn r\(.*\)).*,\1,p'`
64234353Sdim	fi
65234353Sdim	if [ -z "$revision" ]; then
66193326Sed		revision=0
67193326Sed	fi
68193326Sed	echo $revision >${haikuBuildOutputDir}/haiku-revision
69193326Sed	cd $originalDir
70234353Sdim}
71234353Sdim