chiark / gitweb /
Do not delete the builtin_version.py file after setup
[stgit] / stgit / version.py
1 from stgit.exception import StgException
2 from stgit import run, utils
3 import os, 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 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 _builtin_version_file(ext = 'py'):
35     return os.path.join(sys.path[0], 'stgit', 'builtin_version.%s' % ext)
36
37 def write_builtin_version():
38     try:
39         v = git_describe_version()
40     except VersionUnavailable:
41         return
42     f = file(_builtin_version_file(), 'w')
43     f.write('# This file was generated automatically. Do not edit by hand.\n'
44             'version = %r\n' % v)
45
46 def get_version():
47     for v in [builtin_version, git_describe_version]:
48         try:
49             return v()
50         except VersionUnavailable:
51             pass
52     return 'unknown-version'
53
54 version = get_version()
55
56 # minimum version requirements
57 git_min_ver = '1.5.2'
58 python_min_ver = '2.4'