cola: add more documentation strings to the cola modules
[git-cola.git] / cola / version.py
blob8c580eab4250f2cf2e78bbbdb8116e48e60d87dc
1 # Copyright (c) 2008 David Aguilar
2 """This module inspects the cola repository and calculates
3 cola version numbers.
4 """
6 import re
7 import os
8 import sys
10 from cola.exception import ColaException
11 from cola import git
12 from cola import utils
14 class VersionUnavailable(ColaException):
15 pass
17 def git_describe_version():
18 """Inspect the cola git repository and return the current version."""
19 path = sys.path[0]
20 try:
21 v = git.Git.execute(['git', 'describe', '--tags', '--abbrev=4'])
22 except git.GitCommandError, e:
23 raise VersionUnavailable(str(e))
24 if not re.match(r'^v[0-9]', v):
25 raise VersionUnavailable('%s: bad version' % v)
26 try:
27 dirty = git.Git.execute(['git', 'diff-index', '--name-only', 'HEAD'])
28 except git.GitCommandError, e:
29 raise VersionUnavailable(str(e))
30 if dirty:
31 v += '-dirty'
32 return re.sub('-', '.', utils.strip_prefix('v', v))
34 def builtin_version():
35 """Return the builtin version or calculate it as needed."""
36 try:
37 import builtin_version as bv
38 except ImportError:
39 raise VersionUnavailable()
40 else:
41 return bv.version
43 def _builtin_version_file(ext = 'py'):
44 """Returns the path to cola/builtin_version.py."""
45 return os.path.join(sys.path[0], 'cola', 'builtin_version.%s' % ext)
47 def write_builtin_version():
48 """Writes cola/builtin_version.py."""
49 try:
50 v = git_describe_version()
51 except VersionUnavailable:
52 return
53 f = file(_builtin_version_file(), 'w')
54 f.write('# This file was generated automatically. Do not edit by hand.\n'
55 'version = %r\n' % v)
57 def delete_builtin_version():
58 """Deletes cola/builtin_version.py."""
59 for ext in ['py', 'pyc', 'pyo']:
60 fn = _builtin_version_file(ext)
61 if os.path.exists(fn):
62 os.remove(fn)
64 def get_version():
65 """Returns the builtin version or calculates the current version."""
66 for v in [builtin_version, git_describe_version]:
67 try:
68 return v()
69 except VersionUnavailable:
70 pass
71 return 'unknown-version'
73 version = get_version()
75 git_min_ver = '1.5.2' #: minimum git version
76 python_min_ver = '2.4' #: minimum python version
77 pyqt_min_ver = '4.3' #: minimum PyQt version