-
Notifications
You must be signed in to change notification settings - Fork 132
/
version.py
67 lines (64 loc) · 2.71 KB
/
version.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""Defines version to be imported in the module and obtained from setup.py
"""
# This file has been copied and modified from the DataLad codebase
# https://github.com/datalad/datalad/blob/master/datalad/version.py
# www.datalad.org
# Many thanks to the DataLad developers
import sys
from os.path import lexists, dirname, join as opj, curdir
# Hard coded version, to be done by release process,
# it is also "parsed" (not imported) by setup.py, that is why assigned as
# __hardcoded_version__ later and not vise versa
#
# NOTE this should have the format of
# NEW_RELEASE.dev0
# since the __version__ will be later automatically parsed by adding the git
# commit hash
# so valid versions will be 1.2.1.dev0, 1.4.dev0, etc
__version__ = '1.2.3'
__hardcoded_version__ = __version__
__full_version__ = __version__
# NOTE: might cause problems with "python setup.py develop" deployments
# so I have even changed buildbot to use pip install -e .
moddir = dirname(__file__)
projdir = curdir if moddir == 'cortex' else dirname(moddir)
if lexists(opj(projdir, '.git')):
# If under git -- attempt to deduce a better "dynamic" version following git
try:
from subprocess import Popen, PIPE
# Note: Popen does not support `with` way correctly in 2.7
#
git = Popen(
['git', 'describe', '--abbrev=4', '--dirty', '--match', r'[0-9]*\.*'],
stdout=PIPE, stderr=PIPE,
cwd=projdir
)
if git.wait() != 0:
raise OSError("Could not run git describe")
line = git.stdout.readlines()[0]
_ = git.stderr.readlines()
# Just take describe and replace initial '-' with .dev to be more "pythonish"
# Encoding simply because distutils' LooseVersion compares only StringType
# and thus misses in __cmp__ necessary wrapping for unicode strings
#
# remove the version from describe and stick the current version
# hardcoded in __version__
dev_suffix = line.strip().decode('ascii').split('-')
# in case we are at release, we shouldn't have any dev
if len(dev_suffix) > 1:
dev_suffix = dev_suffix[1:]
dev_suffix = ".dev{}".format('-'.join(dev_suffix))
else:
dev_suffix = ""
# remove dev suffix from hardcoded version
if 'dev' in __version__:
__version__ = '.'.join(__version__.split('.')[:-1])
# stick the automatically generated dev version
__full_version__ = __version__ + dev_suffix
# To follow PEP440 we can't have all the git fanciness
__version__ = __full_version__.split('-')[0]
except (SyntaxError, AttributeError, IndexError):
raise
except:
# just stick to the hard-coded
pass