Add support for tag-based version numbers.
Change-Id: I9b0e24f65e9b79c39bdf279b7af9c1040ded7952
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -15,3 +15,4 @@ run_tests.err.log | ||||
| .tox | ||||
| doc/source/api | ||||
| *.egg | ||||
| glanceclient/versioninfo | ||||
|   | ||||
| @@ -4,5 +4,6 @@ include LICENSE | ||||
| include ChangeLog | ||||
| include run_tests.sh | ||||
| include openstack-common.conf tox.ini | ||||
| include glanceclient/versioninfo | ||||
| recursive-include tests * | ||||
| recursive-include tools * | ||||
|   | ||||
| @@ -19,9 +19,11 @@ | ||||
| Utilities with minimum-depends for use in setup.py | ||||
| """ | ||||
|  | ||||
| import datetime | ||||
| import os | ||||
| import re | ||||
| import subprocess | ||||
| import sys | ||||
|  | ||||
| from setuptools.command import sdist | ||||
|  | ||||
| @@ -33,8 +35,7 @@ def parse_mailmap(mailmap='.mailmap'): | ||||
|         for l in fp: | ||||
|             l = l.strip() | ||||
|             if not l.startswith('#') and ' ' in l: | ||||
|                 canonical_email, alias = [x for x in l.split(' ') | ||||
|                                           if x.startswith('<')] | ||||
|                 canonical_email, alias = l.split(' ') | ||||
|                 mapping[alias] = canonical_email | ||||
|     return mapping | ||||
|  | ||||
| @@ -76,6 +77,10 @@ def parse_requirements(requirements_files=['requirements.txt', | ||||
|         # -f lines are for index locations, and don't get used here | ||||
|         elif re.match(r'\s*-f\s+', line): | ||||
|             pass | ||||
|         # argparse is part of the standard library starting with 2.7 | ||||
|         # adding it to the requirements list screws distro installs | ||||
|         elif line == 'argparse' and sys.version_info >= (2, 7): | ||||
|             pass | ||||
|         else: | ||||
|             requirements.append(line) | ||||
|  | ||||
| @@ -113,28 +118,54 @@ def write_requirements(): | ||||
| def _run_shell_command(cmd): | ||||
|     output = subprocess.Popen(["/bin/sh", "-c", cmd], | ||||
|                               stdout=subprocess.PIPE) | ||||
|     return output.communicate()[0].strip() | ||||
|     out = output.communicate() | ||||
|     if len(out) == 0: | ||||
|         return None | ||||
|     if len(out[0].strip()) == 0: | ||||
|         return None | ||||
|     return out[0].strip() | ||||
|  | ||||
|  | ||||
| def write_vcsversion(location): | ||||
|     """Produce a vcsversion dict that mimics the old one produced by bzr. | ||||
|     """ | ||||
|     if os.path.isdir('.git'): | ||||
|         branch_nick_cmd = 'git branch | grep -Ei "\* (.*)" | cut -f2 -d" "' | ||||
|         branch_nick = _run_shell_command(branch_nick_cmd) | ||||
|         revid_cmd = "git rev-parse HEAD" | ||||
|         revid = _run_shell_command(revid_cmd).split()[0] | ||||
|         revno_cmd = "git log --oneline | wc -l" | ||||
|         revno = _run_shell_command(revno_cmd) | ||||
|         with open(location, 'w') as version_file: | ||||
|             version_file.write(""" | ||||
| # This file is automatically generated by setup.py, So don't edit it. :) | ||||
| version_info = { | ||||
|     'branch_nick': '%s', | ||||
|     'revision_id': '%s', | ||||
|     'revno': %s | ||||
| } | ||||
| """ % (branch_nick, revid, revno)) | ||||
| def _get_git_next_version_suffix(branch_name): | ||||
|     datestamp = datetime.datetime.now().strftime('%Y%m%d') | ||||
|     if branch_name == 'milestone-proposed': | ||||
|         revno_prefix = "r" | ||||
|     else: | ||||
|         revno_prefix = "" | ||||
|     _run_shell_command("git fetch origin +refs/meta/*:refs/remotes/meta/*") | ||||
|     milestone_cmd = "git show meta/openstack/release:%s" % branch_name | ||||
|     milestonever = _run_shell_command(milestone_cmd) | ||||
|     if not milestonever: | ||||
|         milestonever = "" | ||||
|     post_version = _get_git_post_version() | ||||
|     revno = post_version.split(".")[-1] | ||||
|     return "%s~%s.%s%s" % (milestonever, datestamp, revno_prefix, revno) | ||||
|  | ||||
|  | ||||
| def _get_git_current_tag(): | ||||
|     return _run_shell_command("git tag --contains HEAD") | ||||
|  | ||||
|  | ||||
| def _get_git_tag_info(): | ||||
|     return _run_shell_command("git describe --tags") | ||||
|  | ||||
|  | ||||
| def _get_git_post_version(): | ||||
|     current_tag = _get_git_current_tag() | ||||
|     if current_tag is not None: | ||||
|         return current_tag | ||||
|     else: | ||||
|         tag_info = _get_git_tag_info() | ||||
|         if tag_info is None: | ||||
|             base_version = "0.0" | ||||
|             cmd = "git --no-pager log --oneline" | ||||
|             out = _run_shell_command(cmd) | ||||
|             revno = len(out.split("\n")) | ||||
|         else: | ||||
|             tag_infos = tag_info.split("-") | ||||
|             base_version = "-".join(tag_infos[:-2]) | ||||
|             revno = tag_infos[-2] | ||||
|         return "%s.%s" % (base_version, revno) | ||||
|  | ||||
|  | ||||
| def write_git_changelog(): | ||||
| @@ -174,6 +205,11 @@ _rst_template = """%(heading)s | ||||
| """ | ||||
|  | ||||
|  | ||||
| def write_versioninfo(project, version): | ||||
|     """Write a simple file containing the version of the package.""" | ||||
|     open(os.path.join(project, 'versioninfo'), 'w').write("%s\n" % version) | ||||
|  | ||||
|  | ||||
| def get_cmdclass(): | ||||
|     """Return dict of commands to run from setup.py.""" | ||||
|  | ||||
| @@ -250,3 +286,44 @@ def get_cmdclass(): | ||||
|         pass | ||||
|  | ||||
|     return cmdclass | ||||
|  | ||||
|  | ||||
| def get_git_branchname(): | ||||
|     for branch in _run_shell_command("git branch --color=never").split("\n"): | ||||
|         if branch.startswith('*'): | ||||
|             _branch_name = branch.split()[1].strip() | ||||
|     if _branch_name == "(no": | ||||
|         _branch_name = "no-branch" | ||||
|     return _branch_name | ||||
|  | ||||
|  | ||||
| def get_pre_version(projectname, base_version): | ||||
|     """Return a version which is based""" | ||||
|     if os.path.isdir('.git'): | ||||
|         current_tag = _get_git_current_tag() | ||||
|         if current_tag is not None: | ||||
|             version = current_tag | ||||
|         else: | ||||
|             branch_name = os.getenv('BRANCHNAME', | ||||
|                                     os.getenv('GERRIT_REFNAME', | ||||
|                                               get_git_branchname())) | ||||
|             version_suffix = _get_git_next_version_suffix(branch_name) | ||||
|             version = "%s~%s" % (base_version, version_suffix) | ||||
|         write_versioninfo(projectname, version) | ||||
|         return version.split('~')[0] | ||||
|     else: | ||||
|         with open(os.path.join(projectname, 'versioninfo'), 'r') as vinfo: | ||||
|             full_version = vinfo.read().strip() | ||||
|             return full_version.split('~')[0] | ||||
|  | ||||
|  | ||||
| def get_post_version(projectname): | ||||
|     """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'): | ||||
|         version = _get_git_post_version() | ||||
|         write_versioninfo(projectname, version) | ||||
|         return version | ||||
|     return open(os.path.join(projectname, 'versioninfo'), 'r').read().strip() | ||||
|   | ||||
							
								
								
									
										2
									
								
								setup.py
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								setup.py
									
									
									
									
									
								
							| @@ -19,7 +19,7 @@ def read(fname): | ||||
|  | ||||
| setuptools.setup( | ||||
|     name="python-glanceclient", | ||||
|     version="2012.2", | ||||
|     version=setup.get_post_version('glanceclient'), | ||||
|     description="Client library for OpenStack Image API", | ||||
|     long_description=read('README.rst'), | ||||
|     url='https://github.com/openstack/python-glanceclient', | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Monty Taylor
					Monty Taylor