view mercurial/version.py @ 3569:a27d90c9336e

Stripping of query string (since 88b4755fa48f) stripped too much (issue327) rstrip(qs) not only strips qs from the right, but it continues stripping every char at the end of the URL that occurs on qs.
author Thomas Arendsen Hein <thomas@intevation.de>
date Sat, 28 Oct 2006 11:00:59 +0200
parents 345bac2bc4ec
children cff3e4b4a8de
line wrap: on
line source

# Copyright (C) 2005, 2006 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)