cmds: provide $DIRNAME in the environment for guitool commands
[git-cola.git] / cola / version.py
blob2d793773ff2f4de35afc8ab8314d09ad0f807d0b
1 # Copyright (c) David Aguilar
2 """Provide git-cola's version number"""
3 from __future__ import division, absolute_import, unicode_literals
5 import os
6 import sys
8 if __name__ == '__main__':
9 srcdir = os.path.dirname(os.path.dirname(__file__))
10 sys.path.insert(1, srcdir)
12 from .git import git
13 from .git import STDOUT
14 from .decorators import memoize
15 from ._version import VERSION
17 # minimum version requirements
18 _versions = {
19 # git diff learned --patience in 1.6.2
20 # git mergetool learned --no-prompt in 1.6.2
21 # git difftool moved out of contrib in git 1.6.3
22 'git': '1.6.3',
23 'python': '2.6',
24 # git diff --submodule was introduced in 1.6.6
25 'diff-submodule': '1.6.6',
26 # git check-ignore was introduced in 1.8.2, but did not follow the same
27 # rules as git add and git status until 1.8.5
28 'check-ignore': '1.8.5',
32 def get(key):
33 """Returns an entry from the known versions table"""
34 return _versions.get(key)
37 def version():
38 """Returns the current version"""
39 return VERSION
42 @memoize
43 def check_version(min_ver, ver):
44 """Check whether ver is greater or equal to min_ver
45 """
46 min_ver_list = version_to_list(min_ver)
47 ver_list = version_to_list(ver)
48 return min_ver_list <= ver_list
51 @memoize
52 def check(key, ver):
53 """Checks if a version is greater than the known version for <what>"""
54 return check_version(get(key), ver)
57 def version_to_list(version):
58 """Convert a version string to a list of numbers or strings
59 """
60 ver_list = []
61 for p in version.split('.'):
62 try:
63 n = int(p)
64 except ValueError:
65 n = p
66 ver_list.append(n)
67 return ver_list
70 @memoize
71 def git_version_str():
72 """Returns the current GIT version"""
73 return git.version()[STDOUT].strip()
76 @memoize
77 def git_version():
78 """Returns the current GIT version"""
79 parts = git_version_str().split()
80 if parts and len(parts) >= 3:
81 return parts[2]
82 else:
83 # minimum supported version
84 return '1.6.3'
87 def cola_version():
88 return 'cola version %s' % version()
91 def print_version(brief=False):
92 if brief:
93 msg = version()
94 else:
95 msg = cola_version()
96 sys.stdout.write('%s\n' % msg)
99 if __name__ == '__main__':
100 print_version(brief=True)