From c490e3515e8fee8c5743b944f60eeafb1b67864b Mon Sep 17 00:00:00 2001 From: Mark McLoughlin Date: Fri, 25 Jan 2013 17:29:00 +0000 Subject: [PATCH] Sync latest setup code from oslo-incubator Changes include: 6b3c544 setup: count revs for revno if there are no tags 9c8685a Use revno and git sha for pre-release versioning. 5f5ef7d Add env var version override for packagers. 602aa9c trivial pep whitespace fix --- magic/openstack/common/setup.py | 48 +++++++++++++++++++++++++++------ setup.py | 3 ++- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/magic/openstack/common/setup.py b/magic/openstack/common/setup.py index 7267a6a2..cc8b99e3 100644 --- a/magic/openstack/common/setup.py +++ b/magic/openstack/common/setup.py @@ -108,13 +108,17 @@ def parse_dependency_links(requirements_files=['requirements.txt', return dependency_links -def _run_shell_command(cmd): +def _run_shell_command(cmd, throw_on_error=False): if os.name == 'nt': output = subprocess.Popen(["cmd.exe", "/C", cmd], - stdout=subprocess.PIPE) + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) else: output = subprocess.Popen(["/bin/sh", "-c", cmd], - stdout=subprocess.PIPE) + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + if output.returncode and throw_on_error: + raise Exception("%s returned %d" % cmd, output.returncode) out = output.communicate() if len(out) == 0: return None @@ -254,14 +258,39 @@ def get_cmdclass(): return cmdclass -def get_version_from_git(): +def _get_revno(): + """Return the number of commits since the most recent tag. + + We use git-describe to find this out, but if there are no + tags then we fall back to counting commits since the beginning + of time. + """ + describe = _run_shell_command("git describe --always") + if "-" in describe: + return describe.rsplit("-", 2)[-2] + + # no tags found + revlist = _run_shell_command("git rev-list --abbrev-commit HEAD") + return len(revlist.splitlines()) + + +def get_version_from_git(pre_version): """Return a version which is equal to the tag that's on the current revision if there is one, or tag plus number of additional revisions if the current revision has no tag.""" if os.path.isdir('.git'): - return _run_shell_command( - "git describe --always").replace('-', '.') + if pre_version: + try: + return _run_shell_command( + "git describe --exact-match", + throw_on_error=True).replace('-', '.') + except Exception: + sha = _run_shell_command("git log -n1 --pretty=format:%h") + return "%s.a%s.g%s" % (pre_version, _get_revno(), sha) + else: + return _run_shell_command( + "git describe --always").replace('-', '.') return None @@ -281,7 +310,7 @@ def get_version_from_pkg_info(package_name): return pkg_info.get('Version', None) -def get_version(package_name): +def get_version(package_name, pre_version=None): """Get the version of the project. First, try getting it from PKG-INFO, if it exists. If it does, that means we're in a distribution tarball or that install has happened. Otherwise, if there is no PKG-INFO file, pull the @@ -293,10 +322,13 @@ def get_version(package_name): to make a source tarball from a fork of our repo with additional tags in it that they understand and desire the results of doing that. """ + version = os.environ.get("OSLO_PACKAGE_VERSION", None) + if version: + return version version = get_version_from_pkg_info(package_name) if version: return version - version = get_version_from_git() + version = get_version_from_git(pre_version) if version: return version raise Exception("Versioning for this project requires either an sdist" diff --git a/setup.py b/setup.py index 344d6dc7..122232ae 100644 --- a/setup.py +++ b/setup.py @@ -20,6 +20,7 @@ import setuptools from magic.openstack.common import setup package = 'oslo-config' +version = '2012.3' requires = setup.parse_requirements() depend_links = setup.parse_dependency_links() @@ -28,7 +29,7 @@ tests_require = setup.parse_requirements(['tools/test-requires']) setuptools.setup( name=package, - version=setup.get_version(package), + version=setup.get_version(package, version), description='Oslo configuration API', long_description='The Oslo configuration API supports parsing command ' 'line arguments and .ini style configuration files.',