diff --git a/setup.py b/setup.py index 65a2dff..3591324 100644 --- a/setup.py +++ b/setup.py @@ -1,14 +1,39 @@ #!/usr/bin/env python from io import open +from setuptools import find_packages, setup import os -from setuptools import setup, find_packages +import re +import subprocess + + +""" +Use `git tag 1.0.0` to tag a release; `python setup.py --version` +to update the _version.py file. +""" def get_version(prefix): - import re - with open(os.path.join(prefix, '__init__.py')) as fd: - metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", fd.read())) + if os.path.exists('.git'): + parts = subprocess.check_output(['git', 'describe', '--tags']).decode().strip().split('-') + if len(parts) == 3: + version = '{}.{}+{}'.format(*parts) + else: + version = parts[0] + version_py = "__version__ = '{}'".format(version) + _version = os.path.join(prefix, '_version.py') + if not os.path.exists(_version) or open(_version).read().strip() != version_py: + with open(_version, 'w') as fd: + fd.write(version_py) + return version + else: + for f in ('_version.py', '__init__.py'): + f = os.path.join(prefix, f) + if os.path.exists(f): + with open(f) as fd: + metadata = dict(re.findall("__([a-z]+)__ = '([^']+)'", fd.read())) + if 'version' in metadata: + break return metadata['version'] diff --git a/shared/markup/__init__.py b/shared/markup/__init__.py index 5a6f84c..54bc885 100644 --- a/shared/markup/__init__.py +++ b/shared/markup/__init__.py @@ -1 +1,4 @@ -__version__ = '0.5' +try: + from ._version import __version__ +except ImportError: + pass