perf tools: Fix perf version generation
authorRobert Richter <robert.richter@calxeda.com>
Wed, 8 May 2013 09:43:34 +0000 (11:43 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 8 Jul 2013 21:09:52 +0000 (18:09 -0300)
The tag of the perf version is wrongly determined, always the latest tag
is taken regardless of the HEAD commit:

 $ perf --version
 perf version 3.9.rc8.gd7f5d3
 $ git describe d7f5d3
 v3.9-rc7-154-gd7f5d33
 $ head -n 4 Makefile
 VERSION = 3
 PATCHLEVEL = 9
 SUBLEVEL = 0
 EXTRAVERSION = -rc7

In other cases no tag might be found.

This patch fixes this.

This new implementation handles also the case if there are no tags at
all found in the git repo but there is a commit id.

Signed-off-by: Robert Richter <robert.richter@calxeda.com>
Link: http://lkml.kernel.org/r/1368006214-12912-1-git-send-email-rric@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
tools/perf/util/PERF-VERSION-GEN

index 055fef34b6f6cf791a4b7daa8e73a8e3765591ff..15a77b7c0e36f155c968cbf59780aec089c53f3a 100755 (executable)
@@ -13,13 +13,22 @@ LF='
 # First check if there is a .git to get the version from git describe
 # otherwise try to get the version from the kernel Makefile
 #
-if test -d ../../.git -o -f ../../.git &&
-       VN=$(git tag 2>/dev/null | tail -1 | grep -E "v[0-9].[0-9]*")
+CID=
+TAG=
+if test -d ../../.git -o -f ../../.git
 then
-       VN=$(echo $VN"-g"$(git log -1 --abbrev=4 --pretty=format:"%h" HEAD))
-       VN=$(echo "$VN" | sed -e 's/-/./g');
-else
-       VN=$(MAKEFLAGS= make -sC ../.. kernelversion)
+       TAG=$(git describe --abbrev=0 --match "v[0-9].[0-9]*" 2>/dev/null )
+       CID=$(git log -1 --abbrev=4 --pretty=format:"%h" 2>/dev/null) && CID="-g$CID"
+fi
+if test -z "$TAG"
+then
+       TAG=$(MAKEFLAGS= make -sC ../.. kernelversion)
+fi
+VN="$TAG$CID"
+if test -n "$CID"
+then
+       # format version string, strip trailing zero of sublevel:
+       VN=$(echo "$VN" | sed -e 's/-/./g;s/\([0-9]*[.][0-9]*\)[.]0/\1/')
 fi
 
 VN=$(expr "$VN" : v*'\(.*\)')