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 |
|