chiark / gitweb /
8ee50090b7addcb40a691aed4de61e277b3eebcc
[stgit] / stgit / version.py
1 from stgit.exception import StgException
2 from stgit import run, utils
3 import os.path, re, sys
4
5 class VersionUnavailable(StgException):
6     pass
7
8 def git_describe_version():
9     path = sys.path[0]
10     try:
11         v = run.Run('git', 'describe', '--tags', '--abbrev=4'
12                     ).cwd(path).output_one_line()
13     except run.RunException, e:
14         raise VersionUnavailable(str(e))
15     if not re.match(r'^v[0-9]', v):
16         raise VersionUnavailable('%s: bad version' % v)
17     try:
18         dirty = run.Run('git', 'diff-index', '--name-only', 'HEAD'
19                         ).cwd(path).raw_output()
20     except run.RunException, e:
21         raise VersionUnavailable(str(e))
22     if dirty:
23         v += '-dirty'
24     return re.sub('-', '.', utils.strip_prefix('v', v))
25
26 def builtin_version():
27     try:
28         import builtin_version as bv
29     except ImportError:
30         raise VersionUnavailable()
31     else:
32         return bv.version
33
34 def write_builtin_version():
35     try:
36         v = git_describe_version()
37     except VersionUnavailable:
38         return
39     f = file(os.path.join(sys.path[0], 'stgit', 'builtin_version.py'), 'w')
40     f.write('# This file was generated automatically. Do not edit by hand.\n'
41             'version = %r\n' % v)
42
43 def get_version():
44     for v in [git_describe_version, builtin_version]:
45         try:
46             return v()
47         except VersionUnavailable:
48             pass
49     return 'unknown-version'
50
51 version = get_version()
52
53 # minimum version requirements
54 git_min_ver = '1.5.2'
55 python_min_ver = '2.4'