Extract version information from git repositories. Try to find a

corresponding svn version if this is a git-svn clone'ed repo.
This prefers svn version information over git in case a working
directory has both .svn and .git directories.

MFC after:	3 days
X-MFC:		not stable/8 before 8.0
This commit is contained in:
Max Laier 2009-09-19 21:46:12 +00:00
parent 0e9d96d74e
commit e652e59b58

View File

@ -89,28 +89,47 @@ i=`${MAKE:-make} -V KERN_IDENT`
case "$d" in
*/sys/*)
SRCDIR=${d##*obj}
if [ -n "$MACHINE" ]; then
SRCDIR=${SRCDIR##/$MACHINE}
fi
SRCDIR=${SRCDIR%%/sys/*}
for dir in /bin /usr/bin /usr/local/bin; do
if [ -x "${dir}/svnversion" ]; then
if [ -d "${SRCDIR}/sys/.svn" -a -x "${dir}/svnversion" ] ; then
svnversion=${dir}/svnversion
SRCDIR=${d##*obj}
if [ -n "$MACHINE" ]; then
SRCDIR=${SRCDIR##/$MACHINE}
fi
SRCDIR=${SRCDIR%%/sys/*}
break
fi
if [ -d "${SRCDIR}/.git" -a -x "${dir}/git" ] ; then
git_cmd="${dir}/git --git-dir=${SRCDIR}/.git"
break
fi
done
if [ -n "$svnversion" -a -d "${SRCDIR}/sys/.svn" ] ; then
if [ -n "$svnversion" ] ; then
svn=" r`cd ${SRCDIR}/sys && $svnversion`"
fi
if [ -n "$git_cmd" ] ; then
git=`$git_cmd rev-parse --verify --short HEAD 2>/dev/null`
svn=`$git_cmd svn find-rev $git 2>/dev/null`
if [ -n "$svn" ] ; then
svn=" r${svn}"
git="-${git}"
else
git=" ${git}"
fi
if $git_cmd --work-tree=${SRCDIR} diff-index \
--name-only HEAD | read dummy; then
git="${git}-dirty"
fi
fi
;;
esac
cat << EOF > vers.c
$COPYRIGHT
#define SCCSSTR "@(#)${VERSION} #${v}${svn}: ${t}"
#define VERSTR "${VERSION} #${v}${svn}: ${t}\\n ${u}@${h}:${d}\\n"
#define SCCSSTR "@(#)${VERSION} #${v}${svn}${git}: ${t}"
#define VERSTR "${VERSION} #${v}${svn}${git}: ${t}\\n ${u}@${h}:${d}\\n"
#define RELSTR "${RELEASE}"
char sccs[sizeof(SCCSSTR) > 128 ? sizeof(SCCSSTR) : 128] = SCCSSTR;