139 lines
4.7 KiB
Python
139 lines
4.7 KiB
Python
import contextlib
|
|
import imp
|
|
import os
|
|
import re
|
|
import subprocess
|
|
|
|
from setuptools import setup
|
|
from setuptools.command.sdist import sdist
|
|
|
|
DATA_ROOTS = ['alembic']
|
|
PROJECT = 'vanth'
|
|
VERSION_FILE = 'vanth/version.py'
|
|
|
|
def _get_output_or_none(args):
|
|
try:
|
|
return subprocess.check_output(args).decode('utf-8').strip()
|
|
except subprocess.CalledProcessError:
|
|
return None
|
|
|
|
def _get_git_description():
|
|
return _get_output_or_none(['git', 'describe'])
|
|
|
|
def _get_git_branches_for_this_commit():
|
|
branches = _get_output_or_none(['git', 'branch', '-r', '--contains', 'HEAD'])
|
|
split = branches.split('\n') if branches else []
|
|
return [branch.strip() for branch in split]
|
|
|
|
def _is_on_releasable_branch(branches):
|
|
return any([branch == 'origin/master' or branch.startswith('origin/hotfix') for branch in branches])
|
|
|
|
def _git_to_version(git):
|
|
match = re.match(r'(?P<tag>[\d\.]+)-(?P<offset>[\d]+)-(?P<sha>\w{8})', git)
|
|
if not match:
|
|
version = git
|
|
else:
|
|
version = "{tag}.post0.dev{offset}".format(**match.groupdict())
|
|
return version
|
|
|
|
@contextlib.contextmanager
|
|
def write_version():
|
|
git_description = _get_git_description()
|
|
git_branches = _get_git_branches_for_this_commit()
|
|
version = _git_to_version(git_description) if git_description else None
|
|
if git_branches and not _is_on_releasable_branch(git_branches):
|
|
print("Forcing version to 0.0.1 because this commit is on branches {} and not a whitelisted branch".format(git_branches))
|
|
version = '0.0.1'
|
|
if version:
|
|
with open(VERSION_FILE, 'r') as version_file:
|
|
old_contents = version_file.read()
|
|
with open(VERSION_FILE, 'w') as version_file:
|
|
version_file.write('VERSION = "{}"\n'.format(version))
|
|
yield
|
|
if version:
|
|
with open(VERSION_FILE, 'w') as version_file:
|
|
version_file.write(old_contents)
|
|
|
|
def _get_version_from_file():
|
|
basedir = os.path.abspath(os.path.dirname(__file__))
|
|
root = imp.load_source('version', os.path.join(basedir, PROJECT, 'version.py'))
|
|
return root.VERSION
|
|
|
|
def _get_version_from_git():
|
|
git_description = _get_git_description()
|
|
git_branches = _get_git_branches_for_this_commit()
|
|
version = _git_to_version(git_description) if git_description else None
|
|
if git_branches and not _is_on_releasable_branch(git_branches):
|
|
print("Forcing version to 0.0.1 because this commit is on branches {} and not a whitelisted branch".format(git_branches))
|
|
version = '0.0.1'
|
|
return version
|
|
|
|
def get_version():
|
|
file_version = _get_version_from_file()
|
|
git_version = _get_version_from_git()
|
|
return (file_version == 'development' and git_version) or file_version
|
|
|
|
def get_data_files():
|
|
data_files = []
|
|
for data_root in DATA_ROOTS:
|
|
for root, _, files in os.walk(data_root):
|
|
data_files.append((os.path.join(PROJECT, root), [os.path.join(root, f) for f in files]))
|
|
return data_files
|
|
|
|
class CustomSDistCommand(sdist): # pylint: disable=no-init
|
|
def run(self):
|
|
with write_version():
|
|
sdist.run(self)
|
|
|
|
def main():
|
|
setup(
|
|
name = "vanth",
|
|
version = get_version(),
|
|
description = "A system for tracking expenses",
|
|
url = "https://github.com/EliRibble/vanth",
|
|
long_description = open('README.md', 'r').read(),
|
|
author = "Eli Ribble",
|
|
author_email = "junk@theribbles.org",
|
|
cmdclass = {
|
|
'sdist' : CustomSDistCommand,
|
|
},
|
|
install_requires = [
|
|
'chryso==1.7',
|
|
'Flask==0.10.1',
|
|
'flask-login==0.3.2',
|
|
'ofxparse==0.15',
|
|
'sepiida==5.27',
|
|
],
|
|
extras_require = {
|
|
'develop': [
|
|
'astroid==1.4.4',
|
|
'coverage==3.7.1',
|
|
'mothermayi>=0.4',
|
|
'mothermayi-isort>=0.8',
|
|
'mothermayi-pylint>=0.5',
|
|
'py==1.4.31',
|
|
'pylint==1.5.4',
|
|
'pytest==2.8.2',
|
|
'pytest-cov==1.8.1',
|
|
]
|
|
},
|
|
packages = [
|
|
"vanth",
|
|
"vanth.backend",
|
|
"vanth.pages",
|
|
"vanth.platform",
|
|
],
|
|
package_data = {
|
|
"vanth" : ["vanth/*"],
|
|
"vanth.backend" : ["vanth/backend/*"],
|
|
"vanth.pages" : ["vanth/pages/*"],
|
|
"vanth.platform" : ["vanth/platform/*"],
|
|
},
|
|
data_files = get_data_files(),
|
|
scripts = ["bin/vanth"],
|
|
include_package_data = True,
|
|
)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|