mercurial/version.py
author mason@suse.com
Tue, 04 Apr 2006 16:38:43 -0400
changeset 2072 74d3f5336b66
parent 1977 7eb694a1c1af
child 2858 345bac2bc4ec
permissions -rw-r--r--
Implement revlogng. revlogng results in smaller indexes, can address larger data files, and supports flags and version numbers. By default the original revlog format is used. To use the new format, use the following .hgrc field: [revlog] # format choices are 0 (classic revlog format) and 1 revlogng format=1

# Copyright (C) 2005 by Intevation GmbH
# Author(s):
# Thomas Arendsen Hein <thomas@intevation.de>
#
# This program is free software under the GNU GPL (>=v2)
# Read the file COPYING coming with the software for details.

"""
Mercurial version
"""

import os
import os.path
import re
import time
import util

unknown_version = 'unknown'
remembered_version = False

def get_version():
    """Return version information if available."""
    try:
        from mercurial.__version__ import version
    except ImportError:
        version = unknown_version
    return version

def write_version(version):
    """Overwrite version file."""
    if version == get_version():
        return
    directory = os.path.dirname(__file__)
    for suffix in ['py', 'pyc', 'pyo']:
        try:
            os.unlink(os.path.join(directory, '__version__.%s' % suffix))
        except OSError:
            pass
    f = open(os.path.join(directory, '__version__.py'), 'w')
    f.write("# This file is auto-generated.\n")
    f.write("version = %r\n" % version)
    f.close()

def remember_version(version=None):
    """Store version information."""
    global remembered_version
    if not version and os.path.isdir(".hg"):
        f = os.popen("hg identify 2> %s" % util.nulldev)  # use real hg installation
        ident = f.read()[:-1]
        if not f.close() and ident:
            ids = ident.split(' ', 1)
            version = ids.pop(0)
            if version[-1] == '+':
                version = version[:-1]
                modified = True
            else:
                modified = False
            if version.isalnum() and ids:
                for tag in ids[0].split('/'):
                    # is a tag is suitable as a version number?
                    if re.match(r'^(\d+\.)+[\w.-]+$', tag):
                        version = tag
                        break
            if modified:
                version += time.strftime('+%Y%m%d')
    if version:
        remembered_version = True
        write_version(version)

def forget_version():
    """Remove version information."""
    if remembered_version:
        write_version(unknown_version)