| #!/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 |
| |