Several bugfixes have occurred upstream since this script was imported
into U-Boot. In particular, the script currently in U-Boot does not
describe commit f8bbb4dad0e9d91b7a51d6cc54dcf66d142f50fe correctly,
resulting in a version of 2011.09 instead of 2011.09-01460-gf8bbb4d.
With that commit checked out, the command git name-rev --tags HEAD
gives this result:
HEAD tags/v2011.12-rc1~30^2
Then the changes regex does not match because of the trailing '^2':
grep -E '^HEAD[[:space:]]+(.*~[0-9]*|undefined)$'
The new version of tools/setlocalversion in the kernel correctly handles
those situations by using different plumbing commands.
The version from the kernel is not directly usable as it does not append
the full GIT version that U-Boot expects unless the right config options
are set (CONFIG_LOCALVERSION_AUTO=y). Other than a few minor changes
for Kconfig, the imported version is very similar to Linux v3.2-rc4.
Signed-off-by: Kyle Moffett kyle.d.moff...@boeing.com
Cc: Wolfgang Denk w...@denx.de
Cc: Mike Frysinger vap...@gentoo.org
--
Changelog:
v3: Fix localversion-* file support and minimize kernel delta.
---
tools/setlocalversion | 185 ++---
1 files changed, 161 insertions(+), 24 deletions(-)
diff --git a/tools/setlocalversion b/tools/setlocalversion
index e11f54f..f551b4c 100755
--- a/tools/setlocalversion
+++ b/tools/setlocalversion
@@ -1,40 +1,177 @@
#!/bin/sh
-# Print additional version information for non-release trees.
+#
+# This scripts adds local version information from the version
+# control systems git, mercurial (hg) and subversion (svn).
+#
+# It was originally copied from the Linux kernel v3.2.0-rc4 and modified
+# to support the U-Boot build-system.
+#
usage() {
- echo Usage: $0 [srctree] 2
+ echo Usage: $0 [--save-scmversion] [srctree] 2
exit 1
}
-cd ${1:-.} || usage
+scm_only=false
+srctree=.
+if test $1 = --save-scmversion; then
+ scm_only=true
+ shift
+fi
+if test $# -gt 0; then
+ srctree=$1
+ shift
+fi
+if test $# -gt 0 -o ! -d $srctree; then
+ usage
+fi
+
+scm_version()
+{
+ local short
+ short=false
+
+ cd $srctree
+ if test -e .scmversion; then
+ cat .scmversion
+ return
+ fi
+ if test $1 = --short; then
+ short=true
+ fi
+
+ # Check for git and a git repo.
+ if test -e .git head=`git rev-parse --verify --short HEAD
2/dev/null`; then
+
+ # If we are at a tagged commit (like v2.6.30-rc6), we ignore
+ # it, because this version is defined in the top level Makefile.
+ if [ -z `git describe --exact-match 2/dev/null` ]; then
+
+ # If only the short version is requested, don't bother
+ # running further git commands
+ if $short; then
+ echo +
+ return
+ fi
+ # If we are past a tagged commit (like
+ # v2.6.30-rc5-302-g72357d5), we pretty print it.
+ if atag=`git describe 2/dev/null`; then
+ echo $atag | awk -F- '{printf(-%05d-%s,
$(NF-1),$(NF))}'
+
+ # If we don't have a tag at all we print -g{commitish}.
+ else
+ printf '%s%s' -g $head
+ fi
+ fi
+
+ # Is this git on svn?
+ if git config --get svn-remote.svn.url /dev/null; then
+ printf -- '-svn%s' `git svn find-rev $head`
+ fi
+
+ # Update index only on r/w media
+ [ -w . ] git update-index --refresh --unmerged /dev/null
+
+ # Check for uncommitted changes
+ if git diff-index --name-only HEAD | grep -v ^scripts/package
\
+ | read dummy; then
+ printf '%s' -dirty
+ fi
-# Check for git and a git repo.
-if head=`git rev-parse --verify HEAD 2/dev/null`; then
- # Do we have an untagged version?
- if git name-rev --tags HEAD | \
- grep -E '^HEAD[[:space:]]+(.*~[0-9]*|undefined)$' /dev/null; then
- (git describe || git describe --tags || git describe --all
--long) \
- 2/dev/null | awk -F- '{printf(-%05d-%s,
$(NF-1),$(NF))}'
+ # All done with git
+ return
fi
- # Are there uncommitted changes?
- git update-index --refresh --unmerged /dev/null
- if git diff-index --name-only HEAD | grep -v ^scripts/package \
- | read dummy; then
- printf '%s' -dirty
+ # Check for mercurial and a mercurial repo.
+ if test -d .hg hgid=`hg id 2/dev/null`; then
+ # Do we have an tagged version? If so, latesttagdistance