From 178e1f5e805dd29b9f0599afb8f7bed380627c7d Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Wed, 29 Oct 2014 21:37:07 +0100 Subject: [PATCH] Forgot to add and ignore new files in latest commit. --- .hgignore | 1 + is-tagged.py | 57 ++++++++++++++++++++++++++++++++++++++++ update-version.sh | 67 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 125 insertions(+) create mode 100644 is-tagged.py create mode 100644 update-version.sh diff --git a/.hgignore b/.hgignore index cb80ae279..696b3982a 100644 --- a/.hgignore +++ b/.hgignore @@ -12,6 +12,7 @@ config.sub config.rpath configure configure.scan +pigeonhole-version.h libtool libtool-shared ltconfig diff --git a/is-tagged.py b/is-tagged.py new file mode 100644 index 000000000..59909d6ef --- /dev/null +++ b/is-tagged.py @@ -0,0 +1,57 @@ +#!/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 +try: + from mercurial import hg, ui +except ImportError: # no Mercurial at all + sys.exit(0) +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 --git a/update-version.sh b/update-version.sh new file mode 100644 index 000000000..ff22d522c --- /dev/null +++ b/update-version.sh @@ -0,0 +1,67 @@ +#!/bin/sh + +SRCDIR="${1:-`pwd`}" +BUILDDIR="${2:-`pwd`}" +VERSION_H="pigeonhole-version.h" +VERSION_HT="pigeonhole-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 PIGEONHOLE_VERSION_H +#define PIGEONHOLE_VERSION_H + +#define PIGEONHOLE_VERSION_FULL PIGEONHOLE_VERSION" (${HGID})" + +#endif /* PIGEONHOLE_VERSION_H */ +EOF +else + cat > "${BUILDDIR}/${VERSION_HT}" <<EOF +#ifndef PIGEONHOLE_VERSION_H +#define PIGEONHOLE_VERSION_H + +#define PIGEONHOLE_VERSION_FULL PIGEONHOLE_VERSION + +#endif /* PIGEONHOLE_VERSION_H */ +EOF +fi + +cmp -s "${BUILDDIR}/${VERSION_H}" "${BUILDDIR}/${VERSION_HT}" && \ + rm -f "${BUILDDIR}/${VERSION_HT}" || \ + mv -f "${BUILDDIR}/${VERSION_HT}" "${BUILDDIR}/${VERSION_H}" -- GitLab