| 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' |