[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH v3] Try to use git commit id if hg changeset is unavailable



As Xen uses git as primary repository, get git commit id for
xen_changeset info.

Changes in v2:
 - split scm calls into separate script - based on Linux kernel one,
   with tags handling removed

Changes in v3:
 - do not assume tools/scmversion started from the repository toplevel
   dir - it is actually called from xen/ subdir

Signed-off-by: Marek Marczykowski <marmarek@xxxxxxxxxxxxxxxxxxxxxx>
---
 xen/Makefile         |  2 +-
 xen/tools/scmversion | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+), 1 deletion(-)
 create mode 100755 xen/tools/scmversion

diff --git a/xen/Makefile b/xen/Makefile
index 0fb3db7..945197b 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -126,7 +126,7 @@ include/xen/compile.h: include/xen/compile.h.in .banner
            -e 's/@@version@@/$(XEN_VERSION)/g' \
            -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
            -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
-           -e 's!@@changeset@@!$(shell ((hg parents --template "{date|date} 
{rev}:{node|short}" >/dev/null && hg parents --template "{date|date} 
{rev}:{node|short}") || echo "unavailable") 2>/dev/null)!g' \
+           -e 's!@@changeset@@!$(shell tools/scmversion || echo 
"unavailable")!g' \
            < include/xen/compile.h.in > $@.new
        @grep \" .banner >> $@.new
        @grep -v \" .banner
diff --git a/xen/tools/scmversion b/xen/tools/scmversion
new file mode 100755
index 0000000..8cdca94
--- /dev/null
+++ b/xen/tools/scmversion
@@ -0,0 +1,99 @@
+#!/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>.
+#
+# Based on setlocalversion from Linux kernel
+#
+#
+
+usage() {
+       echo "Usage: $0 [--save-scmversion] [srctree]" >&2
+       exit 1
+}
+
+scm_only=false
+srctree=.
+if test "$1" = "--save-scmversion"; then
+       scm_only=true
+       shift
+fi
+if test $# -gt 0; then
+       srctree=$1
+       shift
+fi
+if test $# -gt 0 -o ! -d "$srctree"; then
+       usage
+fi
+
+scm_version()
+{
+       local short
+       short=false
+
+       cd "$srctree"
+       if test -e .scmversion; then
+               cat .scmversion
+               return
+       fi
+       if test "$1" = "--short"; then
+               short=true
+       fi
+
+       # Check for git and a git repo.
+       if head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
+               date=`git show -s --pretty="%ad" HEAD`
+
+               printf '%s %s%s' "$date" git: $head
+
+               # 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 -qv 
"^scripts/package"; then
+                       printf '%s' -dirty
+               fi
+
+               # All done with git
+               return
+       fi
+
+       # Check for mercurial and a mercurial repo.
+       if hgid=`hg id 2>/dev/null`; then
+               id=`printf '%s' "$hgid" | sed 's/[+ ].*//'`
+               date=`hg parents --template "{date|date}"`
+               printf '%s %s%s' "$date" hg: "$id"
+
+               # Are there uncommitted changes?
+               # These are represented by + after the changeset id.
+               case "$hgid" in
+                       *+|*+\ *) printf '%s' -dirty ;;
+               esac
+
+               # All done with mercurial
+               return
+       fi
+
+       # Check for svn and a svn repo.
+       if rev=`LANG= LC_ALL= LC_MESSAGES=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
+               return
+       fi
+}
+
+# full scm version string
+res="$(scm_version)"
+
+echo "$res"
-- 
1.8.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.