#!/bin/sh
# Print additional version information for non-release trees.

usage() {
	echo "Usage: $0 [srctree]" >&2
	exit 1
}

cd "${1:-.}" || usage

# Check for git and a git repo.
if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
	# Do we have an untagged version?
	if git name-rev --tags HEAD | grep -E '^HEAD[[:space:]]+(.*~[0-9]*|undefined)$' > /dev/null; then
		if tag=`git describe 2>/dev/null`; then
			echo $tag | awk -F- '{printf("-%05d-%s", $(NF-1),$(NF))}'
		else
			printf '%s%s' -g $head
		fi
	fi

	# Is this git on svn?
	if git config --get svn-remote.svn.url >/dev/null; then
	        printf -- '-svn%s' "`git svn find-rev $head`"
	fi

	# Are there uncommitted changes?
	git update-index --refresh --unmerged > /dev/null
	if git diff-index --name-only HEAD | grep -v "^scripts/package" \
	    | read dummy; then
		printf '%s' -dirty
	fi

	# All done with git
	exit
fi

# Check for mercurial and a mercurial repo.
if hgid=`hg id 2>/dev/null`; then
	tag=`printf '%s' "$hgid" | cut -d' ' -f2`

	# Do we have an untagged version?
	if [ -z "$tag" -o "$tag" = tip ]; then
		id=`printf '%s' "$hgid" | sed 's/[+ ].*//'`
		printf '%s%s' -hg "$id"
	fi

	# Are there uncommitted changes?
	# These are represented by + after the changeset id.
	case "$hgid" in
		*+|*+\ *) printf '%s' -dirty ;;
	esac

	# All done with mercurial
	exit
fi

# Check for svn and a svn repo.
if rev=`LC_ALL=C svn info 2>/dev/null | grep '^Last Changed Rev'`; then
	rev=`echo $rev | awk '{print $NF}'`
	changes=`LC_ALL=C svn status 2>/dev/null | grep '^[AMD]' | wc -l`

	# Are there uncommitted changes?
	if [ $changes != 0 ]; then
		printf -- '-svn%s%s' "$rev" -dirty
	else
		printf -- '-svn%s' "$rev"
	fi

	# All done with svn
	exit
fi
