rockbox/tools/version.sh
Torne Wuff 3a9aa8e51b Fix up tools/version.sh for git transition.
Since we will be transitioning to git, stop considering svn the primary source.
If HEAD is a git-svn revision, return the svn revision number as before
(this means that if you check out old versions they keep their previously
canonical version numbers) but if it's not, then just print the short SHA1.


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31480 a1c6a512-1295-4272-9138-f99709370657
2011-12-31 16:32:21 +00:00

89 lines
2.6 KiB
Bash
Executable file

#!/bin/sh
# __________ __ ___.
# Open \______ \ ____ ____ | | _\_ |__ _______ ___
# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
# \/ \/ \/ \/ \/
# $Id$
#
# Usage: version.sh [source-root]
# Prints the revision of the repository.
#
# The format is rNNNNN[M]-YYMMDD
#
# The M indicates the revision isn't matched to a pure Subversion ID, usually
# because it's built from something like GIT.
svnversion_safe() {
# LANG=C forces svnversion to not localize "exported".
if OUTPUT=`LANG=C svnversion "$@"`; then
if [ "$OUTPUT" = "exported" ]; then
echo "unknown"
else
echo "r$OUTPUT"
fi
else
echo "unknown"
fi
}
# This logic is pulled from the Linux's scripts/setlocalversion (also GPL) and tweaked for
# rockbox. If the commit information for HEAD has a svn-id in it we report that instead of
# the git id
gitversion() {
export GIT_DIR="$1/.git"
# This verifies we are in a git directory
if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
# Get the svn revision of the most recent git-svn commit
version=`git log --pretty=format:'%b' --grep='git-svn-id: svn' -1 | tail -n 1 | perl -ne 'm/@(\d*)/; print "r" . $1;'`
mod=""
# Is this a git-svn commit?
if ! git log -1 --pretty=format:"%b" | grep -q "git-svn-id: svn" ; then
version="$head"
fi
# Are there uncommitted changes?
export GIT_WORK_TREE="$1"
if git diff --name-only HEAD | read dummy; then
mod="M"
elif git diff --name-only --cached HEAD | read dummy; then
mod="M"
fi
echo "${version}${mod}"
# All done with git
exit
fi
}
#
# First locate the top of the src tree (passed in usually)
#
if [ -n "$1" ]; then TOP=$1; else TOP=..; fi
# setting VERSION var on commandline has precedence
if [ -z $VERSION ]; then
# If the VERSIONFILE exisits we use that
VERSIONFILE=docs/VERSION
if [ -r $TOP/$VERSIONFILE ]; then VER=`cat $TOP/$VERSIONFILE`;
else
# Ok, we need to derive it from the Version Control system
if [ -d "$TOP/.git" ]; then
VER=`gitversion $TOP`
else
VER=`svnversion_safe $TOP`;
if [ "$VER" = "unknown" ]; then
# try getting it from a subdir to test if perhaps they are symlinked
# from the root
VER=`svnversion_safe $TOP/tools`;
fi
fi
fi
VERSION=$VER-`date -u +%y%m%d`
fi
echo $VERSION