view is-tagged.py @ 17104:fb4a0a84da50

lib-compression: Added initial support for LZ4 There's no standard file format for LZ4, so we created our own. The code has had only minimal testing currently, so there may be bugs.
author Timo Sirainen <tss@iki.fi>
date Wed, 15 Jan 2014 00:57:59 +0200
parents 84ffb38839b9
children
line wrap: on
line source

#!/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())