From c315c5274f8271c83550420236cd28fc1ffa2dd0 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Wed, 11 Jul 2012 10:44:36 -0500 Subject: [PATCH] Latest setup goodness. Upgrade the common setup code to the latest versions, and use setuptools-git for sdist tarball generation. Change-Id: I81eca9199b7d330ef8ec80482565a75f8475a78c --- MANIFEST.in | 8 ++--- glanceclient/openstack/common/setup.py | 49 +++++++++++++++----------- setup.py | 1 + tools/test-requires | 1 + tox.ini | 5 +-- 5 files changed, 34 insertions(+), 30 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index d08d1fcb..bbef07e8 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,9 +1,5 @@ include AUTHORS -include HACKING.rst README.rst -include LICENSE include ChangeLog -include run_tests.sh -include openstack-common.conf tox.ini include glanceclient/versioninfo -recursive-include tests * -recursive-include tools * +exclude .gitignore +exclude .gitreview diff --git a/glanceclient/openstack/common/setup.py b/glanceclient/openstack/common/setup.py index caf06fa5..88c72528 100644 --- a/glanceclient/openstack/common/setup.py +++ b/glanceclient/openstack/common/setup.py @@ -35,7 +35,8 @@ def parse_mailmap(mailmap='.mailmap'): for l in fp: l = l.strip() if not l.startswith('#') and ' ' in l: - canonical_email, alias = l.split(' ') + canonical_email, alias = [x for x in l.split(' ') + if x.startswith('<')] mapping[alias] = canonical_email return mapping @@ -126,6 +127,13 @@ def _run_shell_command(cmd): return out[0].strip() +def _get_git_branch_name(): + branch_ref = _run_shell_command("git symbolic-ref -q HEAD") + if branch_ref is None: + return "HEAD" + return branch_ref[len("refs/heads/"):] + + def _get_git_next_version_suffix(branch_name): datestamp = datetime.datetime.now().strftime('%Y%m%d') if branch_name == 'milestone-proposed': @@ -136,10 +144,16 @@ def _get_git_next_version_suffix(branch_name): milestone_cmd = "git show meta/openstack/release:%s" % branch_name milestonever = _run_shell_command(milestone_cmd) if not milestonever: - milestonever = "" + milestonever = branch_name post_version = _get_git_post_version() - revno = post_version.split(".")[-1] - return "%s~%s.%s%s" % (milestonever, datestamp, revno_prefix, revno) + # post version should look like: + # 0.1.1.4.cc9e28a + # where the bit after the last . is the short sha, and the bit between + # the last and second to last is the revno count + (revno, sha) = post_version.split(".")[-2:] + first_half = "%(milestonever)s~%(datestamp)s" % locals() + second_half = "%(revno_prefix)s%(revno)s.%(sha)s" % locals() + return ".".join((first_half, second_half)) def _get_git_current_tag(): @@ -161,11 +175,14 @@ def _get_git_post_version(): cmd = "git --no-pager log --oneline" out = _run_shell_command(cmd) revno = len(out.split("\n")) + sha = _run_shell_command("git describe --always") else: tag_infos = tag_info.split("-") base_version = "-".join(tag_infos[:-2]) - revno = tag_infos[-2] - return "%s.%s" % (base_version, revno) + (revno, sha) = tag_infos[-2:] + # git describe prefixes the sha with a g + sha = sha[1:] + return "%s.%s.%s" % (base_version, revno, sha) def write_git_changelog(): @@ -207,7 +224,7 @@ _rst_template = """%(heading)s def read_versioninfo(project): """Read the versioninfo file. If it doesn't exist, we're in a github - zipball, and there's really know way to know what version we really + zipball, and there's really no way to know what version we really are, but that should be ok, because the utility of that should be just about nil if this code path is in use in the first place.""" versioninfo_path = os.path.join(project, 'versioninfo') @@ -302,17 +319,9 @@ def get_cmdclass(): 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""" + """Return a version which is leading up to a version that will + be released in the future.""" if os.path.isdir('.git'): current_tag = _get_git_current_tag() if current_tag is not None: @@ -320,14 +329,14 @@ def get_pre_version(projectname, base_version): else: branch_name = os.getenv('BRANCHNAME', os.getenv('GERRIT_REFNAME', - get_git_branchname())) + _get_git_branch_name())) version_suffix = _get_git_next_version_suffix(branch_name) version = "%s~%s" % (base_version, version_suffix) write_versioninfo(projectname, version) - return version.split('~')[0] + return version else: version = read_versioninfo(projectname) - return version.split('~')[0] + return version def get_post_version(projectname): diff --git a/setup.py b/setup.py index e83c2445..d12e96bd 100644 --- a/setup.py +++ b/setup.py @@ -40,6 +40,7 @@ setuptools.setup( install_requires=requires, dependency_links=dependency_links, tests_require=tests_require, + setup_requires=['setuptools-git>=0.4'], test_suite="nose.collector", entry_points={'console_scripts': ['glance = glanceclient.shell:main']}, ) diff --git a/tools/test-requires b/tools/test-requires index 42554059..f883cc67 100644 --- a/tools/test-requires +++ b/tools/test-requires @@ -6,4 +6,5 @@ nose-exclude nosexcover openstack.nose_plugin pep8==1.2 +setuptools-git>=0.4 sphinx>=1.1.2 diff --git a/tox.ini b/tox.ini index 1b0768da..12eb0a22 100644 --- a/tox.ini +++ b/tox.ini @@ -13,11 +13,8 @@ deps = -r{toxinidir}/tools/pip-requires -r{toxinidir}/tools/test-requires commands = nosetests {posargs} -[tox:jenkins] -downloadcache = ~/cache/pip - [testenv:pep8] -commands = pep8 --repeat --show-source --exclude=.venv,.tox,dist,doc . +commands = pep8 --repeat --show-source --exclude=.venv,.tox,dist,doc,*egg . [testenv:cover] setenv = NOSE_WITH_COVERAGE=1