Mercurial > hg > mercurial-crew-with-dirclash
annotate mercurial/version.py @ 2931:0843bd53dcff
Fix bug #345.
The last hit for a file might have been before the last window, so we
can't clear copies. To reduce the load, we only store real copy
entries instead of storing hashes for every revision.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Fri, 18 Aug 2006 10:05:44 -0700 |
parents | 345bac2bc4ec |
children | cff3e4b4a8de |
rev | line source |
---|---|
2858 | 1 # Copyright (C) 2005, 2006 by Intevation GmbH |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
2 # Author(s): |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
3 # Thomas Arendsen Hein <thomas@intevation.de> |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
4 # |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
5 # This program is free software under the GNU GPL (>=v2) |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
6 # Read the file COPYING coming with the software for details. |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
7 |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
8 """ |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
9 Mercurial version |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
10 """ |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
11 |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
12 import os |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
13 import os.path |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
14 import re |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
15 import time |
461 | 16 import util |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
17 |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
18 unknown_version = 'unknown' |
425
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
19 remembered_version = False |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
20 |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
21 def get_version(): |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
22 """Return version information if available.""" |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
23 try: |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
24 from mercurial.__version__ import version |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
25 except ImportError: |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
26 version = unknown_version |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
27 return version |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
28 |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
29 def write_version(version): |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
30 """Overwrite version file.""" |
1977
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
31 if version == get_version(): |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
32 return |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
33 directory = os.path.dirname(__file__) |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
34 for suffix in ['py', 'pyc', 'pyo']: |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
35 try: |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
36 os.unlink(os.path.join(directory, '__version__.%s' % suffix)) |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
37 except OSError: |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
38 pass |
7eb694a1c1af
Don't forget version at the end of setup.py, write it only if changed.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
464
diff
changeset
|
39 f = open(os.path.join(directory, '__version__.py'), 'w') |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
40 f.write("# This file is auto-generated.\n") |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
41 f.write("version = %r\n" % version) |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
42 f.close() |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
43 |
427
36e644d28edf
Make it possible to specify a version number in setup.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
425
diff
changeset
|
44 def remember_version(version=None): |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
45 """Store version information.""" |
425
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
46 global remembered_version |
427
36e644d28edf
Make it possible to specify a version number in setup.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
425
diff
changeset
|
47 if not version and os.path.isdir(".hg"): |
461 | 48 f = os.popen("hg identify 2> %s" % util.nulldev) # use real hg installation |
425
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
49 ident = f.read()[:-1] |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
50 if not f.close() and ident: |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
51 ids = ident.split(' ', 1) |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
52 version = ids.pop(0) |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
53 if version[-1] == '+': |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
54 version = version[:-1] |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
55 modified = True |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
56 else: |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
57 modified = False |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
58 if version.isalnum() and ids: |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
59 for tag in ids[0].split('/'): |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
60 # is a tag is suitable as a version number? |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
61 if re.match(r'^(\d+\.)+[\w.-]+$', tag): |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
62 version = tag |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
63 break |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
64 if modified: |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
65 version += time.strftime('+%Y%m%d') |
427
36e644d28edf
Make it possible to specify a version number in setup.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
425
diff
changeset
|
66 if version: |
36e644d28edf
Make it possible to specify a version number in setup.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
425
diff
changeset
|
67 remembered_version = True |
36e644d28edf
Make it possible to specify a version number in setup.py.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
425
diff
changeset
|
68 write_version(version) |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
69 |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
70 def forget_version(): |
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
71 """Remove version information.""" |
425
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
72 if remembered_version: |
719663b7f235
remember_version() only writes version if called in a Mercurial repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
423
diff
changeset
|
73 write_version(unknown_version) |
423
25afb21d97ba
Support for 'hg --version'. setup.py stores version from hg repository.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
74 |