From 76042cb389d18726c60103a5d0d84ad756a56143 Mon Sep 17 00:00:00 2001 From: Andrew Mahone Date: Mon, 19 Jan 2009 16:18:30 +0000 Subject: [PATCH] new version.sh that works exactly like svnversion.sh, but functions correctly with pure git repositories git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19799 a1c6a512-1295-4272-9138-f99709370657 --- tools/configure | 2 +- tools/svnversion.sh | 59 ------------------------------- tools/version.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 60 deletions(-) delete mode 100755 tools/svnversion.sh create mode 100755 tools/version.sh diff --git a/tools/configure b/tools/configure index fc12c312c1..7653aa7149 100755 --- a/tools/configure +++ b/tools/configure @@ -2484,7 +2484,7 @@ export BUILDDIR=@PWD@ export LANGUAGE=@LANGUAGE@ export VOICELANGUAGE=@VOICELANGUAGE@ export MEMORYSIZE=@MEMORY@ -export VERSION:=\$(shell \$(ROOTDIR)/tools/svnversion.sh \$(ROOTDIR)) +export VERSION:=\$(shell \$(ROOTDIR)/tools/version.sh \$(ROOTDIR)) export BUILDDATE:=\$(shell date -u +'-DYEAR=%Y -DMONTH=%m -DDAY=%d') export MKFIRMWARE=@TOOL@ export BMP2RB_MONO=@BMP2RB_MONO@ diff --git a/tools/svnversion.sh b/tools/svnversion.sh deleted file mode 100755 index 8fe9804622..0000000000 --- a/tools/svnversion.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -# __________ __ ___. -# Open \______ \ ____ ____ | | _\_ |__ _______ ___ -# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -# \/ \/ \/ \/ \/ -# $Id$ -# - -# Usage: svnversion.sh [source-root] - -# Prints the revision "rXYZ" of the first argument, as reported by svnversion. -# Prints "unknown" if svnversion fails or says "exported". -svnversion_safe() { - # LANG=C forces svnversion to not localize "exported". - if OUTPUT=`LANG=C svnversion "$@"`; then - if [ "$OUTPUT" = "exported" ]; then - - # Not a SVN repository, maybe a git-svn one ? - if [ -z "$1" ]; then - GITDIR="./.git" - else - GITDIR="$1/.git" - fi - - # First make sure it is a git repository - if [ -d "$GITDIR" ]; then - OUTPUT=`LANG=C git --git-dir="$GITDIR" svn info 2>/dev/null|grep '^Revision: '|cut -d\ -f2` - if [ -z "$OUTPUT" ]; then - echo "unknown" - else - echo "r$OUTPUT" - fi - else # not a git repository - echo "unknown" - fi - else - echo "r$OUTPUT" - fi - else - echo "unknown" - fi -} - -VERSIONFILE=docs/VERSION -if [ -n "$1" ]; then TOP=$1; else TOP=..; fi -if [ -r $TOP/$VERSIONFILE ]; then SVNVER=`cat $TOP/$VERSIONFILE`; -else - SVNVER=`svnversion_safe $TOP`; - if [ "$SVNVER" = "unknown" ]; then - # try getting it from a subdir to test if perhaps they are symlinked - # from the root - SVNVER=`svnversion_safe $TOP/tools`; - fi -fi -VERSION=$SVNVER-`date -u +%y%m%d` -echo $VERSION - diff --git a/tools/version.sh b/tools/version.sh new file mode 100755 index 0000000000..9f47afcfd2 --- /dev/null +++ b/tools/version.sh @@ -0,0 +1,85 @@ +#!/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" + + # 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 | head -n 1 | perl -ne 'm/@(\d*)/; print "r" . $1;'` + mod="" + # Is this a git-svn commit? + if ! git log HEAD^.. --pretty=format:"%b" | grep -q "git-svn-id: svn" ; then + mod="M" + fi + + # Are there uncommitted changes? + git update-index --refresh --unmerged > /dev/null + if git diff-index --name-only 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 + +# 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/.git` + 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` +echo $VERSION +