1 # Copyright (c) 2008 David Aguilar
2 """Provides the current cola version number"""
9 from cola
import errors
10 from cola
import utils
11 from cola
import resources
12 from cola
.decorators
import memoize
15 # minimum version requirements
20 'pyqt_qrunnable': '4.4',
21 # git-difftool moved out of contrib in git 1.6.3
22 'difftool-builtin': '1.6.3',
23 # git-mergetool learned --no-prompt in 1.6.2
24 'mergetool-no-prompt': '1.6.2',
26 'diff-submodule': '1.6.6',
31 """Returns an entry from the known versions table"""
32 return _versions
.get(key
)
35 class VersionUnavailable(Exception):
39 def git_describe_version():
40 """Inspect the cola git repository and return the current version."""
42 v
= git
.Git
.execute(['git', 'describe',
48 except errors
.GitCommandError
, e
:
49 raise VersionUnavailable(str(e
))
50 if not re
.match(r
'^v[0-9]', v
):
51 raise VersionUnavailable('%s: bad version' % v
)
53 dirty
= git
.Git
.execute(['git', 'diff-index', '--name-only', 'HEAD'])
54 except errors
.GitCommandError
, e
:
55 raise VersionUnavailable(str(e
))
58 return re
.sub('-', '.', utils
.strip_prefix('v', v
))
61 def builtin_version():
62 """Return the builtin version or throw a VersionUnavailable exception"""
64 from cola
import builtin_version
as bv
65 except ImportError, e
:
66 raise VersionUnavailable()
72 def _builtin_version_file(ext
='py'):
73 """Returns the path to cola's builtin_version.py."""
74 dirname
= os
.path
.dirname(__file__
)
75 return os
.path
.join(dirname
, 'builtin_version.%s' % ext
)
78 def write_builtin_version():
79 """Writes cola/builtin_version.py."""
81 v
= git_describe_version()
82 except VersionUnavailable
:
84 f
= file(_builtin_version_file(), 'w')
85 f
.write('# This file was generated automatically. Do not edit by hand.\n'
88 def delete_builtin_version():
89 """Deletes cola/builtin_version.py."""
90 for ext
in ('py', 'pyc', 'pyo'):
91 fn
= _builtin_version_file(ext
=ext
)
92 if os
.path
.exists(fn
):
98 """Returns the builtin version or calculates the current version."""
99 for v
in [builtin_version
, git_describe_version
]:
102 except VersionUnavailable
:
104 return 'unknown-version'
108 def check_version(min_ver
, ver
):
109 """Check whether ver is greater or equal to min_ver
111 test
= (min_ver
, ver
)
112 min_ver_list
= version_to_list(min_ver
)
113 ver_list
= version_to_list(ver
)
114 return min_ver_list
<= ver_list
119 """Checks if a version is greater than the known version for <what>"""
120 return check_version(get(key
), ver
)
123 def version_to_list(version
):
124 """Convert a version string to a list of numbers or strings
127 for p
in version
.split('.'):
138 """Returns the current GIT version"""
139 return git
.instance().version().split()[-1]