Index: sys/conf/newvers.sh =================================================================== --- sys/conf/newvers.sh +++ sys/conf/newvers.sh @@ -51,6 +51,9 @@ RELEASE="${REVISION}-${BRANCH}" VERSION="${TYPE} ${RELEASE}" +include_metadata=true +modified=false + # # findvcs dir # Looks up directory dir at world root and up the filesystem @@ -62,11 +65,14 @@ savedir=$(pwd) cd ${SYSDIR}/.. while [ $(pwd) != "/" ]; do - if [ -d "./$1" ]; then - VCSDIR=$(pwd)"/$1" - cd ${savedir} - return 0 - fi + for vcs in svn git hg; do + if [ -d "./.$vcs" ]; then + VCSDIR=$(pwd)"/.$vcs" + VCS=$vcs + cd ${savedir} + return 0 + fi + done cd .. done cd ${savedir} @@ -146,103 +152,14 @@ i=`${MAKE:-make} -V KERN_IDENT` compiler_v=$($(${MAKE:-make} -V CC) -v 2>&1 | grep -w 'version') -for dir in /usr/bin /usr/local/bin; do - if [ ! -z "${svnversion}" ] ; then - break - fi - if [ -x "${dir}/svnversion" ] && [ -z ${svnversion} ] ; then - # Run svnversion from ${dir} on this script; if return code - # is not zero, the checkout might not be compatible with the - # svnversion being used. - ${dir}/svnversion $(realpath ${0}) >/dev/null 2>&1 - if [ $? -eq 0 ]; then - svnversion=${dir}/svnversion - break - fi - fi -done - -if [ -z "${svnversion}" ] && [ -x /usr/bin/svnliteversion ] ; then - /usr/bin/svnliteversion $(realpath ${0}) >/dev/null 2>&1 - if [ $? -eq 0 ]; then - svnversion=/usr/bin/svnliteversion - else - svnversion= - fi -fi - +# Perforce doesn't give us any clues in the filesystem, so we have to +# guess based on p4 changes returning something or not, so we do that +# before we look for all the other VCSs. for dir in /usr/bin /usr/local/bin; do if [ -x "${dir}/p4" ] && [ -z ${p4_cmd} ] ; then p4_cmd=${dir}/p4 fi done - -if findvcs .git; then - for dir in /usr/bin /usr/local/bin; do - if [ -x "${dir}/git" ] ; then - git_cmd="${dir}/git --git-dir=${VCSDIR}" - break - fi - done -fi - -if findvcs .hg; then - for dir in /usr/bin /usr/local/bin; do - if [ -x "${dir}/hg" ] ; then - hg_cmd="${dir}/hg -R ${VCSDIR}" - break - fi - done -fi - -if [ -n "$svnversion" ] ; then - svn=`cd ${SYSDIR} && $svnversion 2>/dev/null` - case "$svn" in - [0-9]*[MSP]|*:*) - svn=" r${svn}" - modified=true - ;; - [0-9]*) - svn=" r${svn}" - ;; - *) - unset svn - ;; - esac -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 - svn=`$git_cmd log | fgrep 'git-svn-id:' | head -1 | \ - sed -n 's/^.*@\([0-9][0-9]*\).*$/\1/p'` - if [ -z "$svn" ] ; then - svn=`$git_cmd log --format='format:%N' | \ - grep '^svn ' | head -1 | \ - sed -n 's/^.*revision=\([0-9][0-9]*\).*$/\1/p'` - fi - if [ -n "$svn" ] ; then - svn=" r${svn}" - git="+${git}" - else - git=" ${git}" - fi - fi - git_b=`$git_cmd rev-parse --abbrev-ref HEAD` - if [ -n "$git_b" ] ; then - git="${git}(${git_b})" - fi - if $git_cmd --work-tree=${VCSDIR}/.. diff-index \ - --name-only HEAD | read dummy; then - git="${git}-dirty" - modified=true - fi -fi - if [ -n "$p4_cmd" ] ; then p4version=`cd ${SYSDIR} && $p4_cmd changes -m1 "./...#have" 2>&1 | \ awk '{ print $2 }'` @@ -262,38 +179,134 @@ esac fi -if [ -n "$hg_cmd" ] ; then - hg=`$hg_cmd id 2>/dev/null` - svn=`$hg_cmd svn info 2>/dev/null | \ - awk -F': ' '/Revision/ { print $2 }'` - if [ -n "$svn" ] ; then - svn=" r${svn}" - fi - if [ -n "$hg" ] ; then - hg=" ${hg}" - fi +if [ -z "$p4version" ] && findvcs; then + case "$VCS" in + git) + for dir in /usr/bin /usr/local/bin; do + if [ -x "${dir}/git" ] ; then + git_cmd="${dir}/git --git-dir=${VCSDIR}" + break + fi + done + 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 + svn=`$git_cmd log | fgrep 'git-svn-id:' | head -1 | \ + sed -n 's/^.*@\([0-9][0-9]*\).*$/\1/p'` + if [ -z "$svn" ] ; then + svn=`$git_cmd log --format='format:%N' | \ + grep '^svn ' | head -1 | \ + sed -n 's/^.*revision=\([0-9][0-9]*\).*$/\1/p'` + fi + if [ -n "$svn" ] ; then + svn=" r${svn}" + git="+${git}" + else + git=" ${git}" + fi + fi + git_b=`$git_cmd rev-parse --abbrev-ref HEAD` + if [ -n "$git_b" ] ; then + git="${git}(${git_b})" + fi + if $git_cmd --work-tree=${VCSDIR}/.. diff-index \ + --name-only HEAD | read dummy; then + git="${git}-dirty" + modified=true + fi + fi + ;; + hg) + for dir in /usr/bin /usr/local/bin; do + if [ -x "${dir}/hg" ] ; then + hg_cmd="${dir}/hg -R ${VCSDIR}/.." + break + fi + done + if [ -n "$hg_cmd" ] ; then + hg=`$hg_cmd id 2>/dev/null` + svn=`$hg_cmd svn info 2>/dev/null | \ + awk -F': ' '/Revision/ { print $2 }'` + if [ -n "$svn" ] ; then + svn=" r${svn}" + fi + if [ -n "$hg" ] ; then + case "${hg}" in + *+\ *) modified=true ;; + esac + hg=" ${hg}" + fi + fi + + ;; + svn) + for dir in /usr/bin /usr/local/bin; do + if [ ! -z "${svnversion}" ] ; then + break + fi + if [ -x "${dir}/svnversion" ] && [ -z ${svnversion} ] ; then + # Run svnversion from ${dir} on this script; if return code + # is not zero, the checkout might not be compatible with the + # svnversion being used. + ${dir}/svnversion $(realpath ${0}) >/dev/null 2>&1 + if [ $? -eq 0 ]; then + svnversion=${dir}/svnversion + break + fi + fi + done + if [ -z "${svnversion}" ] && [ -x /usr/bin/svnliteversion ] ; then + /usr/bin/svnliteversion $(realpath ${0}) >/dev/null 2>&1 + if [ $? -eq 0 ]; then + svnversion=/usr/bin/svnliteversion + else + svnversion= + fi + fi + if [ -n "$svnversion" ] ; then + svn=`cd ${SYSDIR} && $svnversion 2>/dev/null` + case "$svn" in + [0-9]*[MSP]|*:*) + svn=" r${svn}" + modified=true + ;; + [0-9]*) + svn=" r${svn}" + ;; + *) + unset svn + ;; + esac + fi + ;; + *) + ;; + esac fi -include_metadata=true while getopts rR opt; do case "$opt" in r) - include_metadata= + include_metadata=false ;; R) - if [ -z "${modified}" ]; then - include_metadata= + if $modified; then + include_metadata=false fi esac done shift $((OPTIND - 1)) -if [ -z "${include_metadata}" ]; then +if $include_metadata; then + VERINFO="${VERSION} #${v}${svn}${git}${hg}${p4version}: ${t}" + VERSTR="${VERINFO}\\n ${u}@${h}:${d}\\n" +else VERINFO="${VERSION} ${svn}${git}${hg}${p4version}" VERSTR="${VERINFO}\\n" -else - VERINFO="${VERSION} #${v}${svn}${git}${hg}${p4version}: ${t}" - VERSTR="${VERINFO}\\n ${u}@${h}:${d}\\n" fi cat << EOF > vers.c