From ba2e5f4442b8f933f37411cc625598cc72938d33 Mon Sep 17 00:00:00 2001 From: Colin Guthrie Date: Sat, 4 Dec 2010 17:21:27 +0000 Subject: build-sys: Add some smarts to version extraction from git tags. When we are dealing with a tag against a commit with other tags applied, then favour the first tag, not the last one. This allows us to tag a release as e.g. v1.0, v1.1-dev and v2.0-dev and get a version of 1.0 rather than the newer tags. This also removes support for git versions that do not accept the --match argument as we also now make use of the --contains arg which was added at the same time (I think) Additionally, the v variable is reset just incase it is already exported in the shell for some reason. --- git-version-gen | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'git-version-gen') diff --git a/git-version-gen b/git-version-gen index ae3988ea..1a3d13b9 100755 --- a/git-version-gen +++ b/git-version-gen @@ -1,6 +1,6 @@ #!/bin/sh # Print a version string. -scriptversion=2008-04-08.07 +scriptversion=2008-04-08.07.01 # Copyright (C) 2007-2008 Free Software Foundation # @@ -76,6 +76,7 @@ esac tarball_version_file=$1 nl=' ' +v= # First see if there is a tarball-only version file. # then try "git describe", then default. @@ -95,13 +96,20 @@ if test -n "$v" then : # use $v elif test -d .git \ - && v=`git describe --abbrev=4 --match='v*' HEAD 2>/dev/null \ - || git describe --abbrev=4 HEAD 2>/dev/null` \ - && case $v in - v[0-9]*) ;; - *) (exit 1) ;; - esac + && v=`git describe --abbrev=4 --match='v[0-9]*' HEAD 2>/dev/null` \ + && [ -n "$v" ] then + # If we are on a "dev" tag, we need to check that it is not the same + # reference as the a previous version tag (this only happens when we are + # working with a release tag). + # NB The below trick relies on the $v being an exact tag to work which + # will only work when HEAD == tag. When further commits have been made on top + # of the tag, the $v will be supplimented with the number of commits since + # that tag and the commit ref of the most recent commit and thus will + # fail the test below (as intended) + v2=`git describe --abbrev=4 --match='v[0-9]\.[0-9]' --contains $v 2>/dev/null | cut -d'^' -f1` + [ -n "$v2" ] && v=$v2 + # Is this a new git that lists number of commits since the last # tag or the previous older version that did not? # Newer: v6.10-77-g0f8faeb -- cgit