]> granicus.if.org Git - neomutt/commitdiff
Include extra information in mutt version string for developer builds.
authorDavid Champion <dgc@uchicago.edu>
Mon, 3 Jan 2011 19:19:50 +0000 (13:19 -0600)
committerDavid Champion <dgc@uchicago.edu>
Mon, 3 Jan 2011 19:19:50 +0000 (13:19 -0600)
When a build is based on an hg clone, include extra information about
the changeset node, distance from a tagged release, and mq applied patch
count.

For example, after this patch is applied my mutt build identifies itself
(in mutt -v and in <show-version>) as:

Mutt 1.5.21+26,mq+22 (7edc2073390d) (2010-09-15)

I have applied 26 changesets applied since 1.5.21 was tagged, 22 of
which are in my mq patch series.  A 1.5.21 release build that is not
mercurial-based would still appear simply as "1.5.21".

configure.ac
version.sh [new file with mode: 0755]

index 5a8c7f0eccceb4287c7e9a5abee1453e6e267d6c..c32bc5d65ff48478194f9e523e6925048fa2f4a2 100644 (file)
@@ -7,7 +7,7 @@ AC_PREREQ([2.54])
 AC_INIT([mutt.h])
 AM_CONFIG_HEADER([config.h])
 
-mutt_cv_version=`cat $srcdir/VERSION`
+mutt_cv_version=`./version.sh`
 AM_INIT_AUTOMAKE(mutt, $mutt_cv_version)
 AC_SUBST([CONFIG_STATUS_DEPENDENCIES], ['$(top_srcdir)/VERSION'])
 
diff --git a/version.sh b/version.sh
new file mode 100755 (executable)
index 0000000..cd902bd
--- /dev/null
@@ -0,0 +1,60 @@
+#!/bin/sh
+
+# Ensure that we have a repo here and that mercurial is installed.  If
+# not, just cat the VERSION file; it contains the latest release number.
+{ [ -d .hg ] && hg >/dev/null 2>&1; } || exec cat VERSION
+
+# This is a mercurial repo and we have the hg command.
+
+# Get essential properties of the current working copy
+set -- `hg parents --template='{rev} {node|short}\n'`
+rev="$1"
+node="$2"
+
+# translate release tags into ##.##.## notation
+cleantag () {
+       case "$1" in
+               mutt-*-rel) echo "$1" | sed -e 's/mutt-//' -e 's/-rel//' | tr - . ;;
+               *)          echo "$1" ;;
+       esac
+}
+
+getdistance_old () {
+       # fudge it
+       set -- `hg tags | sort -n +1 | egrep 'mutt-.*rel' | tail -1 | cut -d: -f1`
+       latesttag="$1"
+       latestrev="$2"
+       distance=`expr $rev - $latestrev`
+       echo $latesttag $distance
+}
+
+getdistance_new () {
+       hg parents --template='{latesttag} {latesttagdistance}\n'
+}
+
+
+# latesttag appeared in hg 1.4.  Test for it.
+[ "`hg log -r . --template='{latesttag}'`" = '' ] && 
+set -- `getdistance_old` ||
+set -- `getdistance_new`
+
+tag=`cleantag "$1"`
+dist=$2
+
+if [ $dist -eq 0 ]; then
+       dist=
+else
+       dist="+$dist"
+fi
+
+# if we have mq patches applied, mention it
+qparent=`hg log -r qparent --template='{rev}\n' 2>/dev/null || echo $rev`
+qdelta=`expr $rev - $qparent`
+if [ $qdelta -eq 0 ]; then
+       qdist=""
+else
+       qdist=",mq+$qdelta"
+fi
+
+echo "$tag$dist$qdist ($node)"
+exit 0