mercurial/version.py
changeset 423 25afb21d97ba
child 425 719663b7f235
equal deleted inserted replaced
396:8f8bb77d560e 423:25afb21d97ba
       
     1 # Copyright (C) 2005 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 os.path
       
    14 import re
       
    15 import time
       
    16 
       
    17 unknown_version = 'unknown'
       
    18 
       
    19 def get_version():
       
    20     """Return version information if available."""
       
    21     try:
       
    22         from mercurial.__version__ import version
       
    23     except ImportError:
       
    24         version = unknown_version
       
    25     return version
       
    26 
       
    27 def write_version(version):
       
    28     """Overwrite version file."""
       
    29     filename = os.path.join(os.path.dirname(__file__), '__version__.py')
       
    30     f = open(filename, 'w')
       
    31     f.write("# This file is auto-generated.\n")
       
    32     f.write("version = %r\n" % version)
       
    33     f.close()
       
    34 
       
    35 def remember_version():
       
    36     """Store version information."""
       
    37     f = os.popen("hg identify 2>/dev/null")  # use real hg installation
       
    38     ident = f.read()[:-1]
       
    39     if not f.close() and ident:
       
    40         ids = ident.split(' ', 1)
       
    41         version = ids.pop(0)
       
    42         if version[-1] == '+':
       
    43             version = version[:-1]
       
    44             modified = True
       
    45         else:
       
    46             modified = False
       
    47         if version.isalnum() and ids:
       
    48             for tag in ids[0].split('/'):
       
    49                 # is a tag is suitable as a version number?
       
    50                 if re.match(r'^(\d+\.)+[\w.-]+$', tag):
       
    51                     version = tag
       
    52                     break
       
    53         if modified:
       
    54             version += time.strftime('+%Y%m%d')
       
    55     else:
       
    56         version = unknown_version
       
    57     write_version(version)
       
    58 
       
    59 def forget_version():
       
    60     """Remove version information."""
       
    61     write_version(unknown_version)
       
    62