dovecot-2.0: {master,doveconf}: Show the version with hg's node ...
dovecot at dovecot.org
dovecot at dovecot.org
Sat Mar 27 02:41:01 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/a2c6c91635b5
changeset: 10999:a2c6c91635b5
user: Pascal Volk <user at localhost.localdomain.org>
date: Sat Mar 27 00:35:44 2010 +0000
description:
{master,doveconf}: Show the version with hg's node id, if unreleased.
Affects output from `dovecot --version` and `doveconf`.
diffstat:
.hgignore | 1 +
Makefile.am | 13 ++++++
is-tagged.py | 55 +++++++++++++++++++++++++++
src/config/doveconf.c | 3 +-
src/master/main.c | 3 +-
update-version.sh | 67 +++++++++++++++++++++++++++++++++
6 files changed, 140 insertions(+), 2 deletions(-)
diffs (222 lines):
diff -r be5b93c18203 -r a2c6c91635b5 .hgignore
--- a/.hgignore Sat Mar 27 01:54:31 2010 +0200
+++ b/.hgignore Sat Mar 27 00:35:44 2010 +0000
@@ -13,6 +13,7 @@
config.rpath
configure
configure.scan
+dovecot-version.h
libtool
libtool-shared
ltconfig
diff -r be5b93c18203 -r a2c6c91635b5 Makefile.am
--- a/Makefile.am Sat Mar 27 01:54:31 2010 +0200
+++ b/Makefile.am Sat Mar 27 00:35:44 2010 +0000
@@ -5,13 +5,19 @@
endif
SUBDIRS = \
+ . \
src \
$(DOCS)
+dist_pkginclude_HEADERS = \
+ dovecot-version.h
+
EXTRA_DIST = \
COPYING.LGPL \
COPYING.MIT \
ChangeLog \
+ is-tagged.py \
+ update-version.sh \
$(conf_DATA)
datafiles = \
@@ -31,6 +37,11 @@
aclocal_DATA = dovecot.m4
+dovecot-version.h: noop
+ $(SHELL) $(top_srcdir)/update-version.sh $(top_srcdir) $(top_builddir)
+
+noop:
+
dovecot-config: dovecot-config.in Makefile
old=`pwd` && cd $(top_builddir) && abs_builddir=`pwd` && cd $$old && \
cd $(top_srcdir) && abs_srcdir=`pwd` && cd $$old && \
@@ -61,3 +72,5 @@
endif
CLEANFILES = $(datafiles)
+
+DISTCLEANFILES = $(top_builddir)/dovecot-version.h
diff -r be5b93c18203 -r a2c6c91635b5 is-tagged.py
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/is-tagged.py Sat Mar 27 00:35:44 2010 +0000
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""
+ Checks if the current revision of the repository is a tagged revision,
+ but not 'tip'.
+
+ usage:
+ python is-tagged.py [/path/to/repo]
+ if no path is given, the current working directory will be used.
+
+ Exit status:
+ 0 if the current revision is a tagged version OR
+ if the current revision was used for signing/tagging OR
+ if path is not a Mercurial repository OR
+ if module import should fail for some reason
+ 1 if the current revision has no tag, except 'tip'
+"""
+import re
+import sys
+
+from mercurial import hg, ui
+try:
+ from mercurial.error import Abort, RepoError
+except ImportError:
+ try:
+ from mercurial.repo import RepoError
+ from mercurial.util import Abort
+ except ImportError: # something old/new?
+ sys.exit(0)
+
+RE = r'^Added\s(?:signature|tag)\s(?:[\w\.]+\s)?for\schangeset\s[\da-f]{12,}$'
+
+
+def main():
+ if len(sys.argv) > 1:
+ path = sys.argv[1].strip()
+ else:
+ path = '.'
+ try:
+ repo = hg.repository(ui.ui(), path)
+ except (Abort, RepoError): # no/bad repo? no extra version info
+ return 0
+ parents_id = repo.dirstate.parents()[0]
+ ctx = repo.changectx(parents_id)
+ if re.match(RE, ctx.description()): # tag or sig was added for a release
+ return 0
+ for tag, nodeid in repo.tags().iteritems():
+ if tag != 'tip' and parents_id == nodeid: # tagged
+ return 0
+ # not tagged
+ return 1
+
+
+if __name__ == '__main__':
+ sys.exit(main())
diff -r be5b93c18203 -r a2c6c91635b5 src/config/doveconf.c
--- a/src/config/doveconf.c Sat Mar 27 01:54:31 2010 +0200
+++ b/src/config/doveconf.c Sat Mar 27 00:35:44 2010 +0000
@@ -13,6 +13,7 @@
#include "config-connection.h"
#include "config-parser.h"
#include "config-request.h"
+#include "dovecot-version.h"
#include <stdio.h>
#include <unistd.h>
@@ -513,7 +514,7 @@
} else {
/* print the config file path before parsing it, so in case
of errors it's still shown */
- printf("# "VERSION": %s\n", config_path);
+ printf("# "DOVECOT_VERSION_FULL": %s\n", config_path);
fflush(stdout);
}
master_service_init_finish(master_service);
diff -r be5b93c18203 -r a2c6c91635b5 src/master/main.c
--- a/src/master/main.c Sat Mar 27 01:54:31 2010 +0200
+++ b/src/master/main.c Sat Mar 27 00:35:44 2010 +0000
@@ -21,6 +21,7 @@
#include "service-monitor.h"
#include "service-process.h"
#include "service-log.h"
+#include "dovecot-version.h"
#include <stdio.h>
#include <stdlib.h>
@@ -694,7 +695,7 @@
while (optind < argc) {
if (strcmp(argv[optind], "--version") == 0) {
- printf("%s\n", VERSION);
+ printf("%s\n", DOVECOT_VERSION_FULL);
return 0;
} else if (strcmp(argv[optind], "--build-options") == 0) {
print_build_options();
diff -r be5b93c18203 -r a2c6c91635b5 update-version.sh
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/update-version.sh Sat Mar 27 00:35:44 2010 +0000
@@ -0,0 +1,67 @@
+#!/bin/sh
+
+SRCDIR="${1:-`pwd`}"
+BUILDDIR="${2:-`pwd`}"
+VERSION_H="dovecot-version.h"
+VERSION_HT="dovecot-version.h.tmp"
+
+abspath()
+{ #$1 the path
+ #$2 1 -> SRCDIR || 2 -> BUILDDIR
+ old=`pwd`
+ cd "${1}"
+ if [ ${2} -eq 1 ]; then
+ SRCDIR=`pwd`
+ else
+ BUILDDIR=`pwd`
+ fi
+ cd "$old"
+}
+
+abspath "${SRCDIR}" 1
+abspath "${BUILDDIR}" 2
+
+# when using a different BUILDDIR just copy from SRCDIR, if there is no .hg
+if [ "${BUILDDIR}" != "${SRCDIR}" ]; then
+ if [ ! -d "${SRCDIR}/.hg" ] && [ -f "${SRCDIR}/${VERSION_H}" ]; then
+ cmp -s "${SRCDIR}/${VERSION_H}" "${BUILDDIR}/${VERSION_H}"
+ if [ $? -ne 0 ]; then
+ cp "${SRCDIR}/${VERSION_H}" "${BUILDDIR}/${VERSION_H}"
+ exit 0
+ fi
+ fi
+fi
+
+# Don't generate dovecot-version.h if the source tree has no .hg dir but
+# a dovecot-version.h. This may be the result of a release/nightly tarball.
+[ ! -d "${SRCDIR}/.hg" ] && [ -f "${BUILDDIR}/${VERSION_H}" ] && exit 0
+
+# Lets generate the dovecot-version.h
+[ -f "${BUILDDIR}/${VERSION_HT}" ] && rm -f "${BUILDDIR}/${VERSION_HT}"
+python "${SRCDIR}/is-tagged.py" "${SRCDIR}"
+if [ $? = 1 ]; then
+ # older hg doesn't recognize option -i
+ #HGID=`hg -R ${SRCDIR} id -i 2>/dev/null`
+ HGID=`hg -R ${SRCDIR} id 2>/dev/null | awk '{print $1}'`
+ cat > "${BUILDDIR}/${VERSION_HT}" <<EOF
+#ifndef DOVECOT_VERSION_H
+#define DOVECOT_VERSION_H
+
+#define DOVECOT_VERSION_FULL VERSION" (${HGID})"
+
+#endif /* DOVECOT_VERSION_H */
+EOF
+else
+ cat > "${BUILDDIR}/${VERSION_HT}" <<EOF
+#ifndef DOVECOT_VERSION_H
+#define DOVECOT_VERSION_H
+
+#define DOVECOT_VERSION_FULL VERSION
+
+#endif /* DOVECOT_VERSION_H */
+EOF
+fi
+
+cmp -s "${BUILDDIR}/${VERSION_H}" "${BUILDDIR}/${VERSION_HT}" && \
+ rm -f "${BUILDDIR}/${VERSION_HT}" || \
+ mv "${BUILDDIR}/${VERSION_HT}" "${BUILDDIR}/${VERSION_H}"
More information about the dovecot-cvs
mailing list