2008-03-31 21:50:05 +02:00
|
|
|
#!/bin/sh
|
2013-09-04 11:36:31 +02:00
|
|
|
#
|
|
|
|
# This scripts adds local version information from the version
|
|
|
|
# control systems git, mercurial (hg) and subversion (svn).
|
|
|
|
#
|
|
|
|
# If something goes wrong, send a mail the kernel build mailinglist
|
|
|
|
# (see MAINTAINERS) and CC Nico Schottelius
|
|
|
|
# <nico-linuxsetlocalversion -at- schottelius.org>.
|
|
|
|
#
|
|
|
|
#
|
2008-03-31 21:50:05 +02:00
|
|
|
|
|
|
|
usage() {
|
|
|
|
echo "Usage: $0 [srctree]" >&2
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
cd "${1:-.}" || usage
|
|
|
|
|
|
|
|
# Check for git and a git repo.
|
2009-02-03 17:24:13 +01:00
|
|
|
if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
|
2013-09-04 11:36:31 +02:00
|
|
|
|
|
|
|
# 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 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}.
|
2009-02-03 17:24:13 +01:00
|
|
|
else
|
|
|
|
printf '%s%s' -g $head
|
|
|
|
fi
|
2008-04-01 11:53:14 +02:00
|
|
|
fi
|
|
|
|
|
|
|
|
# Is this git on svn?
|
|
|
|
if git config --get svn-remote.svn.url >/dev/null; then
|
2009-03-26 21:47:38 +01:00
|
|
|
printf -- '-svn%s' "`git svn find-rev $head`"
|
2008-03-31 21:50:05 +02:00
|
|
|
fi
|
|
|
|
|
2013-09-04 11:36:31 +02:00
|
|
|
# Update index only on r/w media
|
|
|
|
[ -w . ] && git update-index --refresh --unmerged > /dev/null
|
|
|
|
|
|
|
|
# Check for uncommitted changes
|
2008-03-31 21:50:05 +02:00
|
|
|
if git diff-index --name-only HEAD | grep -v "^scripts/package" \
|
|
|
|
| read dummy; then
|
|
|
|
printf '%s' -dirty
|
|
|
|
fi
|
|
|
|
|
|
|
|
# All done with git
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check for mercurial and a mercurial repo.
|
|
|
|
if hgid=`hg id 2>/dev/null`; then
|
setlocalversion: fix detection of hg revision for untagged versions
By default, cut prints the entire line if the specified delimiter is not
present at all:
$ printf "foo bar" | cut -d' ' -f2
bar
$ printf "foobar" | cut -d' ' -f2
foobar
In setlocalversion, cut is presented with the output of 'hg id' which has
the format:
"<revision> <tags-if-any>"
If the current revision is not tagged, the output of 'hg id' does not
contain the delimiter (space), cut prints the entire string, and
setlocalversion thinks the version is the tag.
As setlocalversion does not print anything for tagged versions, there is no
output overall, and no correct indication of the mercurial revision.
Fix by passing the extra cut option '--only-delimited', which suppresses
output if no delimiter is found.
This problem likely went unnoticed for so long, because the tag 'tip' (i.e.
most recent revision of the branch) is treated specially: in this case the
mercurial revision _is_ printed, i.e. the situation is treated as
'untagged'.
The problem is only seen when you are _not_ at the most recent revision in
your branch.
Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com>
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
2017-04-26 14:43:11 +02:00
|
|
|
tag=`printf '%s' "$hgid" | cut -d' ' -f2 --only-delimited`
|
2008-03-31 21:50:05 +02:00
|
|
|
|
|
|
|
# Do we have an untagged version?
|
|
|
|
if [ -z "$tag" -o "$tag" = tip ]; then
|
|
|
|
id=`printf '%s' "$hgid" | sed 's/[+ ].*//'`
|
|
|
|
printf '%s%s' -hg "$id"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Are there uncommitted changes?
|
|
|
|
# These are represented by + after the changeset id.
|
|
|
|
case "$hgid" in
|
|
|
|
*+|*+\ *) printf '%s' -dirty ;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
# All done with mercurial
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Check for svn and a svn repo.
|
2012-01-16 13:54:57 +01:00
|
|
|
if rev=`LC_ALL=C svn info 2>/dev/null | grep '^Last Changed Rev'`; then
|
2008-03-31 21:50:05 +02:00
|
|
|
rev=`echo $rev | awk '{print $NF}'`
|
2013-09-04 11:36:31 +02:00
|
|
|
printf -- '-svn%s' "$rev"
|
2008-03-31 21:50:05 +02:00
|
|
|
|
|
|
|
# All done with svn
|
|
|
|
exit
|
|
|
|
fi
|