Author: mlaier
Date: Sat Sep 19 21:46:12 2009
New Revision: 197334
URL: http://svn.freebsd.org/changeset/base/197334

Log:
  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

Modified:
  head/sys/conf/newvers.sh

Modified: head/sys/conf/newvers.sh
==============================================================================
--- head/sys/conf/newvers.sh    Sat Sep 19 20:36:43 2009        (r197333)
+++ head/sys/conf/newvers.sh    Sat Sep 19 21:46:12 2009        (r197334)
@@ -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    $...@${h}:${d}\\n"
+#define SCCSSTR "@(#)${VERSION} #${v}${svn}${git}: ${t}"
+#define VERSTR "${VERSION} #${v}${svn}${git}: ${t}\\n    $...@${h}:${d}\\n"
 #define RELSTR "${RELEASE}"
 
 char sccs[sizeof(SCCSSTR) > 128 ? sizeof(SCCSSTR) : 128] = SCCSSTR;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to