![Thomas De Schampheleire](/assets/img/avatar_default.png)
Commit9e4ffdc8cf
modified the output of 'setlocalversion' so that the Buildroot version tag is included in the output, the version part was added in Makefile. Due to differences in behavior of the used git and Mercurial commands, this caused different output for the Mercurial case, in BR2_VERSION_FULL and thus /etc/os-release and 'make print-version'. Assuming the official Buildroot releases are tagged and no project-specific tags are present, the output after commit9e4ffdc8cf
is: -hg<commit> whereas it is expected to be something like: 2020.02.6-hg<commit> Change the Mercurial case in setlocalversion to behave similar to git, looking up the latest tag if the current revision is not itself tagged. The number of commits after the latest tag is not added, unlike in git, as this value is not commonly present in Mercurial output, and its added value can be disputed in this context. Even one commit could bring a huge change to the sources, so in order to interpret the number one has to look at the repository anyhow, in which case the commit ID can just be used. Signed-off-by: Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
94 lines
2.4 KiB
Bash
Executable file
94 lines
2.4 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# 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>.
|
|
#
|
|
#
|
|
|
|
usage() {
|
|
echo "Usage: $0 [srctree]" >&2
|
|
exit 1
|
|
}
|
|
|
|
cd "${1:-.}" || usage
|
|
|
|
# Check for git and a git repo.
|
|
if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
|
|
|
|
atag="`git describe 2>/dev/null`"
|
|
|
|
# Show -g<commit> if we have no tag, or just the tag
|
|
# otherwise.
|
|
if [ -z "${atag}" ] ; then
|
|
printf "%s%s" -g ${head}
|
|
else
|
|
printf ${atag}
|
|
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
|
|
|
|
# All done with git
|
|
exit
|
|
fi
|
|
|
|
# Check for mercurial and a mercurial repo.
|
|
# In the git case, 'git describe' will show the latest tag, and unless we are
|
|
# exactly on that tag, the number of commits since then, and last commit id.
|
|
# Mimic something similar in the Mercurial case.
|
|
if hgid=`HGRCPATH= hg id --id --tags 2>/dev/null`; then
|
|
tag=`printf '%s' "$hgid" | cut -d' ' -f2 --only-delimited`
|
|
|
|
# Do we have an untagged version?
|
|
if [ -z "$tag" -o "$tag" = tip ]; then
|
|
# current revision is not tagged, determine latest tag
|
|
latesttag=`HGRCPATH= hg log -r. -T '{latesttag}' 2>/dev/null`
|
|
# In case there is more than one tag on the latest tagged commit,
|
|
# 'latesttag' will separate them by colon (:). We'll retain this.
|
|
# In case there is no tag at all, 'null' will be returned.
|
|
if [ "$latesttag" = "null" ]; then
|
|
latesttag=''
|
|
fi
|
|
|
|
# add the commit id
|
|
id=`printf '%s' "$hgid" | sed 's/[+ ].*//'`
|
|
printf '%s%s%s' "${latesttag}" -hg "$id"
|
|
else
|
|
# current revision is tagged, just print the tag
|
|
printf ${tag}
|
|
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.
|
|
if rev=`LC_ALL=C svn info 2>/dev/null | grep '^Last Changed Rev'`; then
|
|
rev=`echo $rev | awk '{print $NF}'`
|
|
printf -- '-svn%s' "$rev"
|
|
|
|
# All done with svn
|
|
exit
|
|
fi
|