mercurial/version.py
changeset 7632 9626819b2e3d
parent 7631 0b2ee57dfdb1
child 7633 08cabecfa8a8
equal deleted inserted replaced
7631:0b2ee57dfdb1 7632:9626819b2e3d
     1 # Copyright (C) 2005, 2006, 2008 by Intevation GmbH
       
     2 # Author(s):
       
     3 # Thomas Arendsen Hein <thomas@intevation.de>
       
     4 #
       
     5 # This program is free software under the GNU GPL (>=v2)
       
     6 # Read the file COPYING coming with the software for details.
       
     7 
       
     8 """
       
     9 Mercurial version
       
    10 """
       
    11 
       
    12 import os
       
    13 import re
       
    14 import time
       
    15 
       
    16 unknown_version = 'unknown'
       
    17 remembered_version = False
       
    18 
       
    19 def get_version(doreload=False):
       
    20     """Return version information if available."""
       
    21     try:
       
    22         import mercurial.__version__
       
    23         if doreload:
       
    24             reload(mercurial.__version__)
       
    25         version = mercurial.__version__.version
       
    26     except ImportError:
       
    27         version = unknown_version
       
    28     return version
       
    29 
       
    30 def write_version(version):
       
    31     """Overwrite version file."""
       
    32     if version == get_version():
       
    33         return
       
    34     directory = os.path.dirname(__file__)
       
    35     for suffix in ['py', 'pyc', 'pyo']:
       
    36         try:
       
    37             os.unlink(os.path.join(directory, '__version__.%s' % suffix))
       
    38         except OSError:
       
    39             pass
       
    40     f = open(os.path.join(directory, '__version__.py'), 'w')
       
    41     f.write("# This file is auto-generated.\n")
       
    42     f.write("version = %r\n" % version)
       
    43     f.close()
       
    44     # reload the file we've just written
       
    45     get_version(True)
       
    46 
       
    47 def remember_version(version=None):
       
    48     """Store version information."""
       
    49     global remembered_version
       
    50     if not version and os.path.isdir(".hg"):
       
    51         f = os.popen("hg identify")  # use real hg installation
       
    52         ident = f.read()[:-1]
       
    53         if not f.close() and ident:
       
    54             ids = ident.split(' ', 1)
       
    55             version = ids.pop(0)
       
    56             if version[-1] == '+':
       
    57                 version = version[:-1]
       
    58                 modified = True
       
    59             else:
       
    60                 modified = False
       
    61             if version.isalnum() and ids:
       
    62                 for tag in ids[0].split('/'):
       
    63                     # is a tag is suitable as a version number?
       
    64                     if re.match(r'^(\d+\.)+[\w.-]+$', tag):
       
    65                         version = tag
       
    66                         break
       
    67             if modified:
       
    68                 version += time.strftime('+%Y%m%d')
       
    69     if version:
       
    70         remembered_version = True
       
    71         write_version(version)
       
    72 
       
    73 def forget_version():
       
    74     """Remove version information."""
       
    75     if remembered_version:
       
    76         write_version(unknown_version)
       
    77