Hello community, here is the log from the commit of package python-pbr for openSUSE:Factory checked in at 2013-12-03 10:49:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pbr (Old) and /work/SRC/openSUSE:Factory/.python-pbr.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pbr" Changes: -------- --- /work/SRC/openSUSE:Factory/python-pbr/python-pbr.changes 2013-08-13 10:52:14.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.python-pbr.new/python-pbr.changes 2013-12-03 10:49:55.000000000 +0100 @@ -1,0 +2,14 @@ +Mon Nov 25 13:58:28 UTC 2013 - [email protected] + +- Update dependencies +- Rename build-conditional to "test", avoid clash with Cloud:OpenStack:Master's + "tests" build-conditional. We've got other issues here +- Add rpmlintrc, we have some C files as part of the testsuite + +------------------------------------------------------------------- +Thu Oct 31 23:47:07 UTC 2013 - [email protected] + +- update to 0.5.23: + * Use dev based release versioning + +------------------------------------------------------------------- Old: ---- pbr-0.5.21.tar.gz New: ---- pbr-0.5.23.tar.gz rpmlintrc ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pbr.spec ++++++ --- /var/tmp/diff_new_pack.K2McHd/_old 2013-12-03 10:49:55.000000000 +0100 +++ /var/tmp/diff_new_pack.K2McHd/_new 2013-12-03 10:49:55.000000000 +0100 @@ -16,12 +16,12 @@ # -# A build cycle exists between python-extras and python-testtools. Thus, only +# NOTE(saschpe): git invocation and pythonpath issues with testrepository # enable testing with a build conditional (off by default): -%bcond_with tests +%bcond_with test Name: python-pbr -Version: 0.5.21 +Version: 0.5.23 Release: 0 Summary: Python Build Reasonableness License: Apache-2.0 @@ -30,25 +30,22 @@ Source: http://pypi.python.org/packages/source/p/pbr/pbr-%{version}.tar.gz BuildRequires: python-devel # Documentation requirements: -BuildRequires: python-Sphinx +BuildRequires: python-Sphinx >= 1.1.2 # Test requirements: -%if %{with tests} -BuildRequires: python-coverage >= 3.6 +%if %{with test} +#BuildRequires: python-coverage >= 3.6 %if 0%{?suse_version} <= 1110 BuildRequires: python-discover %endif BuildRequires: python-fixtures >= 0.3.12 -BuildRequires: python-flake8 -BuildRequires: python-mox -BuildRequires: python-nose -BuildRequires: python-oslo.config -BuildRequires: python-pip >= 1.0 -BuildRequires: python-python-mimeparse +BuildRequires: python-flake8 >= 2.0 +#BuildRequires: python-pip >= 1.0 +#BuildRequires: python-python-mimeparse BuildRequires: python-python-subunit -BuildRequires: python-testrepository >= 0.0.13 +BuildRequires: python-testrepository >= 0.0.17 BuildRequires: python-testresources -BuildRequires: python-testscenarios -BuildRequires: python-testtools >= 0.9.27 +BuildRequires: python-testscenarios >= 0.4 +BuildRequires: python-testtools >= 0.9.32 %endif Requires: python-pip >= 1.0 BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -77,9 +74,9 @@ %install python setup.py install --prefix=%{_prefix} --root=%{buildroot} -%if %{with tests} +%if %{with test} %check -python setup.py testr || true +python setup.py testr %endif %files ++++++ pbr-0.5.21.tar.gz -> pbr-0.5.23.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/AUTHORS new/pbr-0.5.23/AUTHORS --- old/pbr-0.5.21/AUTHORS 2013-08-04 20:41:10.000000000 +0200 +++ new/pbr-0.5.23/AUTHORS 2013-10-30 22:02:56.000000000 +0100 @@ -22,6 +22,7 @@ Ionuț Arțăriși <[email protected]> Jason Kölker <[email protected]> Jay Pipes <[email protected]> +Jeremy Stanley <[email protected]> Joe Gordon <[email protected]> Joe Heck <[email protected]> Johannes Erdfelt <[email protected]> @@ -30,17 +31,22 @@ Mark McLoughlin <[email protected]> Mark Sienkiewicz <[email protected]> Maru Newby <[email protected]> +Matthew Treinish <[email protected]> Michael Basnight <[email protected]> Michael Still <[email protected]> Monty Taylor <[email protected]> +Nikhil Manchanda <[email protected]> Rajaram Mallya <[email protected]> Rick Harris <[email protected]> +Robert Collins <[email protected]> Robert Myers <[email protected]> Russell Bryant <[email protected]> +Ryan Petrello <[email protected]> Sean Dague <[email protected]> Sergey Lukjanov <[email protected]> Steven Hardy <[email protected]> Thomas Grainger <[email protected]> +Thomas Leaman <[email protected]> Tim Simpson <[email protected]> Vincent Untz <[email protected]> Vishvananda Ishaya <[email protected]> @@ -48,3 +54,4 @@ Yaguang Tang <[email protected]> Yuriy Taraday <[email protected]> Zhongyue Luo <[email protected]> +alexpilotti <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/ChangeLog new/pbr-0.5.23/ChangeLog --- old/pbr-0.5.21/ChangeLog 2013-08-04 20:41:09.000000000 +0200 +++ new/pbr-0.5.23/ChangeLog 2013-10-30 22:02:56.000000000 +0100 @@ -1,3 +1,336 @@ +commit 629bbce1c88a4a576182c7a41372a70a864d8226 +Author: Nikhil Manchanda <[email protected]> +Date: Wed Oct 30 03:08:48 2013 -0700 + + Fixed pbr install to not error out and fail if git is not installed + + Fixed the issue where pbr was erroring out (file not found) when + running 'python setup.py egg_info' since it was trying to get the + .git directory even if git was not installed. + + Closes bug 1245676 + + Change-Id: I31e1f86f10f18897774b49eb293aede31641db31 + +commit e8a3c7e7ba4430870849ff34ab3437db2ed1f942 +Merge: a3a875b 1f730e2 +Author: Jenkins <[email protected]> +Date: Mon Oct 28 01:13:31 2013 +0000 + + Merge "Move base test case logic out of __init__.py" + +commit a3a875b1a0eee25344d8d6a8898ee176d3dc46b3 +Merge: 3fdedcf a7e5f91 +Author: Jenkins <[email protected]> +Date: Sun Oct 27 22:58:13 2013 +0000 + + Merge "Prevent ordereddict installation on 2.7" + +commit 1f730e25803c9a263c147c1a35415ee8b2b49e5e +Author: Monty Taylor <[email protected]> +Date: Sun Sep 29 15:40:03 2013 -0400 + + Move base test case logic out of __init__.py + + It's an antipattern to have functional code in an __init__.py. Move it + into base.py to be less anti. + + Change-Id: Ib4db548b78e4e760d94099596a3c495a839836dc + +commit 3fdedcf69e6c175c242400c5982e1d4a7db9673e +Author: Monty Taylor <[email protected]> +Date: Tue Sep 17 12:22:05 2013 -0500 + + Comply with pep440 + + pep440 indicates that development releases should mark themselves with + the devN specifier. + + http://www.python.org/dev/peps/pep-0440/#developmental-releases + + Instead of using aN as we are currently doing for automatically + generated versions, we should use the pep440 compliant devN form. + + Change-Id: Ieeb5149f8b013e76621112593e0a5c0a64817e1f + +commit a7e5f91d90b8a9205ed2a3b014a1bbc803aa4ada +Author: Thomas Leaman <[email protected]> +Date: Wed Oct 16 16:07:25 2013 +0000 + + Prevent ordereddict installation on 2.7 + + This supports https://review.openstack.org/#/c/48475/ in glance + to remove copy/pasted ordereddict code. + + Change-Id: I9b0a2588c6e7da86c048698c5e6dfe37ced4dd7f + +commit ae25b565d37c831d4caea8347a6ba6279683fbca +Author: Doug Hellmann <[email protected]> +Date: Wed Sep 25 16:55:49 2013 -0400 + + Do not pass unicode where byte strings are wanted + + Some versions of the tarfile module break when unicode data is + passed as metadata (like the version). See + http://bugs.python.org/issue11638 for details. + + This change ensures that version number is always a byte strings + under python 2, where the problem exists. + + Change-Id: Ic266cd7cce0394d28794ee61afe269f1296be2a2 + +commit 3391ca5c1a9a1db4e96e0043b953d0b5d463d7fd +Merge: 9fbbb2b d322c34 +Author: Jenkins <[email protected]> +Date: Wed Oct 9 16:00:52 2013 +0000 + + Merge "Rework run_shell_command" + +commit 9fbbb2b8871e654048dbbe46347d49d8230e8a26 +Merge: 403c2ba 0ff4fe1 +Author: Jenkins <[email protected]> +Date: Wed Oct 9 16:00:39 2013 +0000 + + Merge "Add a test for command registration." + +commit 403c2ba4668f04739adc608f3538c5c91c5be28b +Merge: 517ce12 2f74b46 +Author: Jenkins <[email protected]> +Date: Wed Oct 9 11:05:18 2013 +0000 + + Merge "Switch away from tearDown for BaseTests." + +commit 517ce12c8d47e84b53da98b58a5c9035bfeca3d0 +Merge: 42b49cb 55f7642 +Author: Jenkins <[email protected]> +Date: Wed Oct 9 04:45:20 2013 +0000 + + Merge "Fix test_changelog when git isn't globally setup." + +commit 42b49cbad0d7ae57da72513690e940cd9765f68f +Author: Jeremy Stanley <[email protected]> +Date: Mon Oct 7 23:31:27 2013 +0000 + + Get rid of PyPI URL override in integration test + + * tools/integration.sh: Overriding the PyPI URL is logic best left + to devstack-gate since it does those things already. Remove the + similar dance found here. + + Change-Id: Ie2fcabb11b30dc3ab6564bdedd55b2b173c1bf2a + +commit 0ff4fe1a7619c289bc10e4905f1627d12a229e4a +Author: Robert Collins <[email protected]> +Date: Sun Sep 29 21:58:26 2013 +1300 + + Add a test for command registration. + + This would be better as a direct unit test, but I can't see where + thats done; and setuptools doesn't seem super friendly to that. + + There are more commands that can be tested, but this seemed like a + good place to start. + + Change-Id: I433880d9b08d07de0194450bbc90a423554e347c + +commit 2f74b467dd08ad63bce693379913c23a5f5e6785 +Author: Robert Collins <[email protected]> +Date: Sun Sep 29 21:44:47 2013 +1300 + + Switch away from tearDown for BaseTests. + + tearDown is never the right hammer. + + Change-Id: If17ae653e25d4fba2b768cb569a573467448ccef + +commit 55f76425fa082373be32bcf9df33ef81bbef0f4c +Author: Robert Collins <[email protected]> +Date: Sun Sep 29 20:53:13 2013 +1300 + + Fix test_changelog when git isn't globally setup. + + This test was assuming that it was possible to make a new git repo and + commit to it, but some versions of git will error if no user email is + set, and some users choose not to have that set globally. + + Change-Id: I94401c4fe716021c2cb2f1585690463746c740c9 + +commit d322c34fec2a7096203eba762d93b478a89cebe6 +Author: Monty Taylor <[email protected]> +Date: Thu Aug 15 19:22:33 2013 -0300 + + Rework run_shell_command + + A previous patch for windows support made the simple case of passing a + string to run_shell_command complicated with quoting. Clean that up by + reverting to list, which avoids the crazy quoting we had to do. + + Change-Id: Ia3b8ac6a57e7400d0aab0d5265c851e536fb4e87 + +commit 9f04dba0ecc07a33dc4b256bec4f860c30b2b500 +Author: Monty Taylor <[email protected]> +Date: Sat Sep 21 20:03:19 2013 -0400 + + Update tox config to use latest upgrades + + Change-Id: I3b9e627eecc5b805db3fed2ae9571ccfc3dbd6fc + +commit 2f0b291bb9573e5cf61f3dd697a340f7995e47a5 +Merge: 3fbf36e 9786042 +Author: Jenkins <[email protected]> +Date: Sat Sep 7 04:31:32 2013 +0000 + + Merge "Add a hint for users who don't have git installed." + +commit 9786042aebf7b5117f49773ab9e6fb59f5e1bb8d +Author: Ryan Petrello <[email protected]> +Date: Fri Sep 6 18:18:05 2013 -0400 + + Add a hint for users who don't have git installed. + + Change-Id: I31058752e8303beab3f21dd590459e9a8a7c2334 + +commit 3fbf36ef476e2ee6a368297a6300389ddfc590b0 +Author: Julien Danjou <[email protected]> +Date: Mon Aug 26 23:01:37 2013 +0200 + + Add pypy to tox.ini + + Change-Id: I590af708465e8a8a3d5d5f64cc4ad1a9d640abc7 + +commit ed63f50aacb19d1a276fc4329bf8cc4e4ab5717a +Merge: 84614d3 0c33086 +Author: Jenkins <[email protected]> +Date: Thu Aug 15 07:55:55 2013 +0000 + + Merge "Sync requirements with global requirements" + +commit 84614d3cad00b450f770a9b4659937e9f5502f3d +Merge: c8e6d0b aaad8e4 +Author: Jenkins <[email protected]> +Date: Wed Aug 14 21:57:11 2013 +0000 + + Merge "Fix python-ldap mirroring." + +commit c8e6d0b2651f2268d6dd6b1359dc61f05344e3af +Merge: 24ee68c 00f878c +Author: Jenkins <[email protected]> +Date: Wed Aug 14 21:54:10 2013 +0000 + + Merge "Stop checking periods in commit messages" + +commit 24ee68c226233bd305a94939f601de2ffb004961 +Merge: e2821d1 091b774 +Author: Jenkins <[email protected]> +Date: Wed Aug 14 21:54:08 2013 +0000 + + Merge "Fixes issue with command escaping on Windows" + +commit aaad8e451119a5732beb3bcd66d3f17e65bad5cc +Author: Robert Collins <[email protected]> +Date: Thu Aug 8 09:01:09 2013 +1200 + + Fix python-ldap mirroring. + + python-ldap wants ldap headers to compile. + + Change-Id: I57dc54a3b745702ee8c1f8f8f91fc4ef1aa169fd + +commit 00f878c557942dfd8c4024c61aa63a7400336519 +Author: Robert Collins <[email protected]> +Date: Thu Aug 8 22:36:40 2013 +1200 + + Stop checking periods in commit messages + + This breaks various peoples fingers and there was no overwhelming + community support, nor historical evidence, for enforcing the proposed + rule in either direction. + + Change-Id: Id2a5af9bb8a49af0a2f94b38a8e7d5ef1208e627 + +commit 091b774f0cf4b4e8bad7f5e04f88b53ac88b5227 +Author: alexpilotti <[email protected]> +Date: Sun Aug 11 07:25:14 2013 +0300 + + Fixes issue with command escaping on Windows + + Fixes bug: #1210912 + + Special characters like <, > or ' need to be escaped on Windows when used + with "cmd /C <command>" as implemented in _run_shell_command + + In order to avoid escaping issues, shell spawning has been replaced with + direct command execution. As a consequence, grep/egrep command pipes have + been replaced with Python regular expressions where appropriate. + + Change-Id: Idd50fd24f300bce655f99d42cb96e37d29d4cb14 + +commit e2821d16e70bbcdc920265c0762bcc70101b7160 +Merge: 9234efa 91cacee +Author: Jenkins <[email protected]> +Date: Sun Aug 11 16:54:33 2013 +0000 + + Merge "Add option to run testr serially" + +commit 9234efaff21a1d882db38f87fe0c0dc9c804b0f6 +Merge: d467f99 fb0aabc +Author: Jenkins <[email protected]> +Date: Sun Aug 11 16:51:20 2013 +0000 + + Merge "Fix pep8 error" + +commit d467f99b73385ed919bdb2121564d6a24d9d4fa7 +Author: Monty Taylor <[email protected]> +Date: Fri Aug 9 11:50:01 2013 -0300 + + Added documentation for packagers + + There are several features aimed at distro packagers that it's probably + a good idea to tell them about. + + Change-Id: Ide4ec3b94c5da644c5a4d5eee6629f42f7b508ac + +commit cb4a30bdc690abed44a940fbcff4cb945631325b +Author: Monty Taylor <[email protected]> +Date: Fri Aug 9 11:30:03 2013 -0300 + + Update requirements in integration test + + So that we don't test combinations of things that we won't see in the + gate, run the same requirements sync job that devstack does. + + Change-Id: I0ee375b4e41aa214acf4cd3bfeb1b3a8ccb08dff + +commit 0c330868ec037033258196932961f440f4d2d393 +Author: Monty Taylor <[email protected]> +Date: Thu Aug 8 11:20:22 2013 -0300 + + Sync requirements with global requirements + + Change-Id: Id8ffb22f4ecb05b9f8494be70d4587453a334efb + +commit fb0aabc97d64958799fd4a19994ac43d2632fb60 +Author: Monty Taylor <[email protected]> +Date: Thu Aug 8 11:18:53 2013 -0300 + + Fix pep8 error + + I have no idea how this wasn't happening before but now is. + + Change-Id: I3a9c82d58d9a89d31711efbdd30324888f343e3a + +commit 91caceed9c7a311253d5e593bf6053b94e8eb693 +Author: Matthew Treinish <[email protected]> +Date: Thu Aug 1 17:30:17 2013 -0400 + + Add option to run testr serially + + This commit adds a new serial option to testr_command.py that when + set will run testr serially instead of running testr with the + '--parallel' flag. + + Change-Id: Id49b105dc921e9acdef1a94d933719ad3a772c81 + commit 270594f4e12dd3d2ce94e2e32128d72aba490cd6 Merge: 8e92bb2 d26d430 Author: Jenkins <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/PKG-INFO new/pbr-0.5.23/PKG-INFO --- old/pbr-0.5.21/PKG-INFO 2013-08-04 20:41:10.000000000 +0200 +++ new/pbr-0.5.23/PKG-INFO 2013-10-30 22:02:56.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: pbr -Version: 0.5.21 +Version: 0.5.23 Summary: Python Build Reasonableness Home-page: http://pypi.python.org/pypi/pbr Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/doc/source/index.rst new/pbr-0.5.23/doc/source/index.rst --- old/pbr-0.5.21/doc/source/index.rst 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/doc/source/index.rst 2013-10-30 22:02:32.000000000 +0100 @@ -191,6 +191,14 @@ `Plain` class in `pbr.cfg.driver` and one called `fancy` which maps to the `Fancy` class in `pbr.cfg.driver`. +Packager Notes +============== + +.. toctree:: + :maxdepth: 1 + + packagers + Indices and tables ================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/doc/source/packagers.rst new/pbr-0.5.23/doc/source/packagers.rst --- old/pbr-0.5.21/doc/source/packagers.rst 1970-01-01 01:00:00.000000000 +0100 +++ new/pbr-0.5.23/doc/source/packagers.rst 2013-10-30 22:02:32.000000000 +0100 @@ -0,0 +1,59 @@ +===================== + Notes for Packagers +===================== + +If you are maintaining packages of software that uses `pbr`, there are some +features you probably want to be aware of that can make your life easier. +They are exposed by environment variables, so adding them to rules or spec +files should be fairly easy. + +Versioning +========== + +`pbr`, when run in a git repo, derives the version of a package from the +git tags. When run in a tarball with a proper egg-info dir, it will happily +pull the version from that. So for the most part, the packager shouldn't need +to care. However, if you are doing something like keeping a git repo with +the sources and the packaging intermixed and it's causing pbr to get confused +about whether its in its own git repo or not, you can set `PBR_VERSION`: + +:: + + PBR_VERSION=1.2.3 + +and all version calculation logic will be completely skipped and the supplied +version will be considered absolute. + +Dependencies +============ + +`pbr` overrides almost everything having to do with python dependency +resolution and calls out to `pip`. In the python source package world this +leads to a more consistent experience. However, in the distro packaging world, +dependencies are handled by the distro. Setting `SKIP_PIP_INSTALL`: + +:: + + SKIP_PIP_INSTALL=1 + +will cause all logic around use of `pip` to be skipped, including the logic +that includes pip as a dependency of `pbr` itself. + +Tarballs +======== + +`pbr` includes everything in a source tarball that is in the original `git` +repository. This can again cause havoc if a packager is doing fancy things +with combined `git` repos, and is generating a source tarball using `python +setup.py sdist` from that repo. If that is the workflow the packager is using, +setting `SKIP_GIT_SDIST`: + +:: + + SKIP_GIT_SDIST=1 + +will cause all logic around using git to find the files that should be in the +source tarball to be skipped. Beware though, that because `pbr` packages +automatically find all of the files, most of them do not have a complete +`MANIFEST.in` file, so its possible that a tarball produced in that way will +be missing files. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/packaging.py new/pbr-0.5.23/pbr/packaging.py --- old/pbr-0.5.21/pbr/packaging.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/packaging.py 2013-10-30 22:02:32.000000000 +0100 @@ -49,7 +49,7 @@ TEST_REQUIREMENTS_FILES = ('test-requirements.txt', 'tools/test-requires') # part of the standard library starting with 2.7 # adding it to the requirements list screws distro installs -BROKEN_ON_27 = ('argparse', 'importlib') +BROKEN_ON_27 = ('argparse', 'importlib', 'ordereddict') def get_requirements_files(): @@ -81,33 +81,25 @@ return mapping -def _wrap_in_quotes(values): - return ["'%s'" % value for value in values] - - -def _make_links_args(links): - return ["-f '%s'" % link for link in links] - - def _pip_install(links, requires, root=None, option_dict=dict()): if get_boolean_option( option_dict, 'skip_pip_install', 'SKIP_PIP_INSTALL'): return - root_cmd = "" + cmd = [sys.executable, '-m', 'pip.__init__', 'install'] if root: - root_cmd = "--root=%s" % root + cmd.append("--root=%s" % root) + for link in links: + cmd.append("-f") + cmd.append(link) _run_shell_command( - "%s -m pip.__init__ install %s %s %s" % ( - sys.executable, - root_cmd, - " ".join(links), - " ".join(_wrap_in_quotes(requires))), + cmd + requires, throw_on_error=True, buffer=False) def read_git_mailmap(root_dir=None, mailmap='.mailmap'): if not root_dir: - root_dir = _run_shell_command('git rev-parse --show-toplevel') + root_dir = _run_shell_command( + ['git', 'rev-parse', '--show-toplevel']) mailmap = os.path.join(root_dir, mailmap) if os.path.exists(mailmap): @@ -202,6 +194,13 @@ return dependency_links +def _run_git_command(cmd, git_dir, **kwargs): + if not isinstance(cmd, (list, tuple)): + cmd = [cmd] + return _run_shell_command( + ['git', '--git-dir=%s' % git_dir] + cmd, **kwargs) + + def _run_shell_command(cmd, throw_on_error=False, buffer=True): if buffer: out_location = subprocess.PIPE @@ -210,14 +209,9 @@ out_location = None err_location = None - if os.name == 'nt': - output = subprocess.Popen(["cmd.exe", "/C", cmd], - stdout=out_location, - stderr=err_location) - else: - output = subprocess.Popen(["/bin/sh", "-c", cmd], - stdout=out_location, - stderr=err_location) + output = subprocess.Popen(cmd, + stdout=out_location, + stderr=err_location) out = output.communicate() if output.returncode and throw_on_error: raise distutils.errors.DistutilsError( @@ -228,7 +222,11 @@ def _get_git_directory(): - return _run_shell_command("git rev-parse --git-dir", None) + return _run_shell_command(['git', 'rev-parse', '--git-dir']) + + +def _git_is_installed(): + return _run_shell_command(['which', 'git']) def get_boolean_option(option_dict, option_name, env_name): @@ -252,8 +250,7 @@ if git_dir is None: git_dir = _get_git_directory() if git_dir: - git_log_cmd = 'git --git-dir=%s log' % git_dir - changelog = _run_shell_command(git_log_cmd) + changelog = _run_git_command('log', git_dir) mailmap = read_git_mailmap() with open(new_changelog, "wb") as changelog_file: changelog_file.write(canonicalize_emails( @@ -279,18 +276,16 @@ authors = [] # don't include jenkins email address in AUTHORS file - git_log_cmd = ("git --git-dir=" + git_dir + - " log --format='%aN <%aE>'" - " | egrep -v '" + ignore_emails + "'") - authors += _run_shell_command(git_log_cmd).split('\n') + git_log_cmd = ['log', '--format=%aN <%aE>'] + authors += _run_git_command(git_log_cmd, git_dir).split('\n') + authors = [a for a in authors if not re.search(ignore_emails, a)] # get all co-authors from commit messages - co_authors_cmd = ("git log --git-dir=" + git_dir + - " | grep -i Co-authored-by:") - co_authors = _run_shell_command(co_authors_cmd) - + co_authors_out = _run_git_command('log', git_dir) + co_authors = re.findall('Co-authored-by:.+', co_authors_out, + re.MULTILINE) co_authors = [signed.split(":", 1)[1].strip() - for signed in co_authors.split('\n') if signed] + for signed in co_authors if signed] authors += co_authors @@ -315,12 +310,11 @@ at absurd times. We only want to do this when we are building an sdist. """ file_list = [] - if git_dir is None: + if git_dir is None and _git_is_installed(): git_dir = _get_git_directory() if git_dir: log.info("[pbr] In git context, generating filelist from git") - git_ls_cmd = "git --git-dir=%s ls-files -z" % git_dir - file_list = _run_shell_command(git_ls_cmd) + file_list = _run_git_command(['ls-files', '-z'], git_dir) file_list = file_list.split(b'\x00'.decode('utf-8')) return [f for f in file_list if f] @@ -364,9 +358,9 @@ option_dict = self.distribution.get_option_dict('pbr') if (not self.single_version_externally_managed and self.distribution.install_requires): - links = _make_links_args(self.distribution.dependency_links) _pip_install( - links, self.distribution.install_requires, self.root, + self.distribution.dependency_links, + self.distribution.install_requires, self.root, option_dict=option_dict) return du_install.install.run(self) @@ -397,8 +391,7 @@ def install_test_requirements(self): - links = _make_links_args( - parse_dependency_links(TEST_REQUIREMENTS_FILES)) + links = parse_dependency_links(TEST_REQUIREMENTS_FILES) if self.distribution.tests_require: option_dict = self.distribution.get_option_dict('pbr') _pip_install( @@ -488,7 +481,7 @@ import_target=ep.attrs[0], invoke_target='.'.join(ep.attrs), ) - yield (name, header+script_text) + yield (name, header + script_text) class LocalInstallScripts(install_scripts.install_scripts): @@ -742,14 +735,13 @@ tags then we fall back to counting commits since the beginning of time. """ - describe = _run_shell_command( - "git --git-dir=%s describe --always" % git_dir) + describe = _run_git_command(['describe', '--always'], git_dir) if "-" in describe: return describe.rsplit("-", 2)[-2] # no tags found - revlist = _run_shell_command( - "git --git-dir=%s rev-list --abbrev-commit HEAD" % git_dir) + revlist = _run_git_command( + ['rev-list', '--abbrev-commit', 'HEAD'], git_dir) return len(revlist.splitlines()) @@ -763,18 +755,23 @@ if git_dir: if pre_version: try: - return _run_shell_command( - "git --git-dir=" + git_dir + " describe --exact-match", + return _run_git_command( + ['describe', '--exact-match'], git_dir, throw_on_error=True).replace('-', '.') except Exception: - sha = _run_shell_command( - "git --git-dir=" + git_dir + " log -n1 --pretty=format:%h") - return "%s.a%s.g%s" % (pre_version, _get_revno(git_dir), sha) + sha = _run_git_command( + ['log', '-n1', '--pretty=format:%h'], git_dir) + return "%s.dev%s.g%s" % (pre_version, _get_revno(git_dir), sha) else: - return _run_shell_command( - "git --git-dir=" + git_dir + " describe --always").replace( - '-', '.') - return None + return _run_git_command( + ['describe', '--always'], git_dir).replace('-', '.') + # If we don't know the version, return an empty string so at least + # the downstream users of the value always have the same type of + # object to work with. + try: + return unicode() + except NameError: + return '' def _get_version_from_pkg_info(package_name): @@ -814,7 +811,14 @@ if version: return version version = _get_version_from_git(pre_version) + # Handle http://bugs.python.org/issue11638 + # version will either be an empty unicode string or a valid + # unicode version string, but either way it's unicode and needs to + # be encoded. + if sys.version_info[0] == 2: + version = version.encode('utf-8') if version: return version raise Exception("Versioning for this project requires either an sdist" - " tarball, or access to an upstream git repository.") + " tarball, or access to an upstream git repository." + " Are you sure that git is installed?") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/testr_command.py new/pbr-0.5.23/pbr/testr_command.py --- old/pbr-0.5.21/pbr/testr_command.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/testr_command.py 2013-10-30 22:02:32.000000000 +0100 @@ -56,9 +56,10 @@ ('testr-args=', 't', "Run 'testr' with these args"), ('omit=', 'o', 'Files to omit from coverage calculations'), ('slowest', None, "Show slowest test times after tests complete."), + ('no-parallel', None, "Run testr serially"), ] - boolean_options = ['coverage', 'slowest'] + boolean_options = ['coverage', 'slowest', 'no_parallel'] def _run_testr(self, *args): return commands.run_argv([sys.argv[0]] + list(args), @@ -69,6 +70,7 @@ self.coverage = None self.omit = "" self.slowest = None + self.no_parallel = None def finalize_options(self): if self.testr_args is None: @@ -85,7 +87,10 @@ if self.coverage: self._coverage_before() - testr_ret = self._run_testr("run", "--parallel", *self.testr_args) + if not self.no_parallel: + testr_ret = self._run_testr("run", "--parallel", *self.testr_args) + else: + testr_ret = self._run_testr("run", *self.testr_args) if testr_ret: raise distutils.errors.DistutilsError( "testr failed (%d)" % testr_ret) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/__init__.py new/pbr-0.5.23/pbr/tests/__init__.py --- old/pbr-0.5.21/pbr/tests/__init__.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/__init__.py 2013-10-30 22:02:32.000000000 +0100 @@ -1,133 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -# Copyright 2010-2011 OpenStack Foundation -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. -# -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. -# Copyright (C) 2013 Association of Universities for Research in Astronomy -# (AURA) -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of AURA and its representatives may not be used to -# endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - -"""Common utilities used in testing""" - -import os -import shutil -import subprocess -import sys - -import fixtures -import testresources -import testtools - -from pbr import packaging - - -class DiveDir(fixtures.Fixture): - """Dive into given directory and return back on cleanup. - - :ivar path: The target directory. - """ - - def __init__(self, path): - self.path = path - - def setUp(self): - super(DiveDir, self).setUp() - self.addCleanup(os.chdir, os.getcwd()) - os.chdir(self.path) - - -class BaseTestCase(testtools.TestCase, testresources.ResourcedTestCase): - - def setUp(self): - super(BaseTestCase, self).setUp() - test_timeout = os.environ.get('OS_TEST_TIMEOUT', 30) - try: - test_timeout = int(test_timeout) - except ValueError: - # If timeout value is invalid, fail hard. - print("OS_TEST_TIMEOUT set to invalid value" - " defaulting to no timeout") - test_timeout = 0 - if test_timeout > 0: - self.useFixture(fixtures.Timeout(test_timeout, gentle=True)) - - if os.environ.get('OS_STDOUT_CAPTURE') in packaging.TRUE_VALUES: - stdout = self.useFixture(fixtures.StringStream('stdout')).stream - self.useFixture(fixtures.MonkeyPatch('sys.stdout', stdout)) - if os.environ.get('OS_STDERR_CAPTURE') in packaging.TRUE_VALUES: - stderr = self.useFixture(fixtures.StringStream('stderr')).stream - self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr)) - self.log_fixture = self.useFixture( - fixtures.FakeLogger('pbr')) - - self.useFixture(fixtures.NestedTempfile()) - self.useFixture(fixtures.FakeLogger()) - self.useFixture(fixtures.EnvironmentVariable('PBR_VERSION', '0.0')) - - self.temp_dir = self.useFixture(fixtures.TempDir()).path - self.package_dir = os.path.join(self.temp_dir, 'testpackage') - shutil.copytree(os.path.join(os.path.dirname(__file__), 'testpackage'), - self.package_dir) - self.addCleanup(os.chdir, os.getcwd()) - os.chdir(self.package_dir) - - def tearDown(self): - # Remove pbr.testpackage from sys.modules so that it can be freshly - # re-imported by the next test - for k in list(sys.modules): - if (k == 'pbr_testpackage' or - k.startswith('pbr_testpackage.')): - del sys.modules[k] - super(BaseTestCase, self).tearDown() - - def run_setup(self, *args): - return self._run_cmd(sys.executable, ('setup.py',) + args) - - def _run_cmd(self, cmd, args=[]): - """Run a command in the root of the test working copy. - - Runs a command, with the given argument list, in the root of the test - working copy--returns the stdout and stderr streams and the exit code - from the subprocess. - """ - - os.chdir(self.package_dir) - p = subprocess.Popen([cmd] + list(args), stdout=subprocess.PIPE, - stderr=subprocess.PIPE) - - streams = tuple(s.decode('latin1').strip() for s in p.communicate()) - for line in streams: - print(line) - return (streams) + (p.returncode,) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/base.py new/pbr-0.5.23/pbr/tests/base.py --- old/pbr-0.5.21/pbr/tests/base.py 1970-01-01 01:00:00.000000000 +0100 +++ new/pbr-0.5.23/pbr/tests/base.py 2013-10-30 22:02:32.000000000 +0100 @@ -0,0 +1,133 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2010-2011 OpenStack Foundation +# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# Copyright (C) 2013 Association of Universities for Research in Astronomy +# (AURA) +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of AURA and its representatives may not be used to +# endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY AURA ``AS IS'' AND ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL AURA BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + +"""Common utilities used in testing""" + +import os +import shutil +import subprocess +import sys + +import fixtures +import testresources +import testtools + +from pbr import packaging + + +class DiveDir(fixtures.Fixture): + """Dive into given directory and return back on cleanup. + + :ivar path: The target directory. + """ + + def __init__(self, path): + self.path = path + + def setUp(self): + super(DiveDir, self).setUp() + self.addCleanup(os.chdir, os.getcwd()) + os.chdir(self.path) + + +class BaseTestCase(testtools.TestCase, testresources.ResourcedTestCase): + + def setUp(self): + super(BaseTestCase, self).setUp() + test_timeout = os.environ.get('OS_TEST_TIMEOUT', 30) + try: + test_timeout = int(test_timeout) + except ValueError: + # If timeout value is invalid, fail hard. + print("OS_TEST_TIMEOUT set to invalid value" + " defaulting to no timeout") + test_timeout = 0 + if test_timeout > 0: + self.useFixture(fixtures.Timeout(test_timeout, gentle=True)) + + if os.environ.get('OS_STDOUT_CAPTURE') in packaging.TRUE_VALUES: + stdout = self.useFixture(fixtures.StringStream('stdout')).stream + self.useFixture(fixtures.MonkeyPatch('sys.stdout', stdout)) + if os.environ.get('OS_STDERR_CAPTURE') in packaging.TRUE_VALUES: + stderr = self.useFixture(fixtures.StringStream('stderr')).stream + self.useFixture(fixtures.MonkeyPatch('sys.stderr', stderr)) + self.log_fixture = self.useFixture( + fixtures.FakeLogger('pbr')) + + self.useFixture(fixtures.NestedTempfile()) + self.useFixture(fixtures.FakeLogger()) + self.useFixture(fixtures.EnvironmentVariable('PBR_VERSION', '0.0')) + + self.temp_dir = self.useFixture(fixtures.TempDir()).path + self.package_dir = os.path.join(self.temp_dir, 'testpackage') + shutil.copytree(os.path.join(os.path.dirname(__file__), 'testpackage'), + self.package_dir) + self.addCleanup(os.chdir, os.getcwd()) + os.chdir(self.package_dir) + self.addCleanup(self._discard_testpackage) + + def _discard_testpackage(self): + # Remove pbr.testpackage from sys.modules so that it can be freshly + # re-imported by the next test + for k in list(sys.modules): + if (k == 'pbr_testpackage' or + k.startswith('pbr_testpackage.')): + del sys.modules[k] + + def run_setup(self, *args): + return self._run_cmd(sys.executable, ('setup.py',) + args) + + def _run_cmd(self, cmd, args=[]): + """Run a command in the root of the test working copy. + + Runs a command, with the given argument list, in the root of the test + working copy--returns the stdout and stderr streams and the exit code + from the subprocess. + """ + + os.chdir(self.package_dir) + p = subprocess.Popen([cmd] + list(args), stdout=subprocess.PIPE, + stderr=subprocess.PIPE) + + streams = tuple(s.decode('latin1').strip() for s in p.communicate()) + for line in streams: + print(line) + return (streams) + (p.returncode,) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/test_commands.py new/pbr-0.5.23/pbr/tests/test_commands.py --- old/pbr-0.5.21/pbr/tests/test_commands.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/test_commands.py 2013-10-30 22:02:32.000000000 +0100 @@ -40,10 +40,10 @@ from testtools import content -from pbr import tests +from pbr.tests import base -class TestCommands(tests.BaseTestCase): +class TestCommands(base.BaseTestCase): def test_custom_build_py_command(self): """Test custom build_py command. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/test_core.py new/pbr-0.5.23/pbr/tests/test_core.py --- old/pbr-0.5.21/pbr/tests/test_core.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/test_core.py 2013-10-30 22:02:32.000000000 +0100 @@ -44,10 +44,10 @@ import fixtures -from pbr import tests +from pbr.tests import base -class TestCore(tests.BaseTestCase): +class TestCore(base.BaseTestCase): cmd_names = ('pbr_test_cmd', 'pbr_test_cmd_with_class') @@ -122,7 +122,7 @@ self.check_script_install(stdout) -class TestGitSDist(tests.BaseTestCase): +class TestGitSDist(base.BaseTestCase): def setUp(self): super(TestGitSDist, self).setUp() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/test_files.py new/pbr-0.5.23/pbr/tests/test_files.py --- old/pbr-0.5.21/pbr/tests/test_files.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/test_files.py 2013-10-30 22:02:32.000000000 +0100 @@ -22,10 +22,10 @@ import fixtures from pbr.hooks import files -from pbr import tests +from pbr.tests import base -class FilesConfigTest(tests.BaseTestCase): +class FilesConfigTest(base.BaseTestCase): def setUp(self): super(FilesConfigTest, self).setUp() @@ -49,7 +49,7 @@ with open(os.path.join(subpackage, "__init__.py"), 'w') as foo_file: foo_file.write("# empty") - self.useFixture(tests.DiveDir(pkg_fixture.base)) + self.useFixture(base.DiveDir(pkg_fixture.base)) def test_implicit_auto_package(self): config = dict( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/test_hooks.py new/pbr-0.5.23/pbr/tests/test_hooks.py --- old/pbr-0.5.21/pbr/tests/test_hooks.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/test_hooks.py 2013-10-30 22:02:32.000000000 +0100 @@ -41,11 +41,13 @@ import os import textwrap -from pbr import tests +from testtools.matchers import Contains + +from pbr.tests import base from pbr.tests import util -class TestHooks(tests.BaseTestCase): +class TestHooks(base.BaseTestCase): def setUp(self): super(TestHooks, self).setUp() with util.open_config( @@ -89,3 +91,8 @@ """) in stdout # flake8: noqa assert stdout.endswith('build_ext post-hook') assert return_code == 0 + + def test_custom_commands_known(self): + stdout, _, return_code = self.run_setup('--help-commands') + self.assertFalse(return_code) + self.assertThat(stdout, Contains(" testr ")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/test_packaging.py new/pbr-0.5.23/pbr/tests/test_packaging.py --- old/pbr-0.5.21/pbr/tests/test_packaging.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/test_packaging.py 2013-10-30 22:02:32.000000000 +0100 @@ -40,13 +40,18 @@ import os -from pbr import tests +import fixtures +from pbr.tests import base -class TestPackagingInGitRepoWithCommit(tests.BaseTestCase): + +class TestPackagingInGitRepoWithCommit(base.BaseTestCase): def setUp(self): super(TestPackagingInGitRepoWithCommit, self).setUp() + self.useFixture(fixtures.TempHomeDir()) + self._run_cmd( + 'git', ['config', '--global', 'user.email', '[email protected]']) self._run_cmd('git', ['init', '.']) self._run_cmd('git', ['add', '.']) self._run_cmd('git', ['commit', '-m', 'test commit']) @@ -66,7 +71,7 @@ self.assertNotEqual(body, '') -class TestPackagingInGitRepoWithoutCommit(tests.BaseTestCase): +class TestPackagingInGitRepoWithoutCommit(base.BaseTestCase): def setUp(self): super(TestPackagingInGitRepoWithoutCommit, self).setUp() @@ -88,7 +93,7 @@ self.assertEqual(body, '') -class TestPackagingInPlainDirectory(tests.BaseTestCase): +class TestPackagingInPlainDirectory(base.BaseTestCase): def setUp(self): super(TestPackagingInPlainDirectory, self).setUp() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/test_setup.py new/pbr-0.5.23/pbr/tests/test_setup.py --- old/pbr-0.5.21/pbr/tests/test_setup.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/test_setup.py 2013-10-30 22:02:32.000000000 +0100 @@ -33,10 +33,10 @@ import testscenarios from pbr import packaging -from pbr import tests +from pbr.tests import base -class EmailTestCase(tests.BaseTestCase): +class EmailTestCase(base.BaseTestCase): def test_str_dict_replace(self): string = 'Johnnie T. Hozer' @@ -45,7 +45,7 @@ packaging.canonicalize_emails(string, mapping)) -class MailmapTestCase(tests.BaseTestCase): +class MailmapTestCase(base.BaseTestCase): def setUp(self): super(MailmapTestCase, self).setUp() @@ -71,7 +71,7 @@ packaging.read_git_mailmap(self.root_dir)) -class SkipFileWrites(tests.BaseTestCase): +class SkipFileWrites(base.BaseTestCase): scenarios = [ ('changelog_option_true', @@ -135,7 +135,7 @@ or self.env_value is not None)) -class GitLogsTest(tests.BaseTestCase): +class GitLogsTest(base.BaseTestCase): def setUp(self): super(GitLogsTest, self).setUp() @@ -170,20 +170,15 @@ with open(os.path.join(self.temp_path, "ChangeLog"), "r") as ch_fh: self.assertTrue("[email protected]" in ch_fh.read()) - def _fake_log_output(self, cmd, mapping): - for (k, v) in mapping.items(): - if cmd.startswith(k): - return v.encode('utf-8') - return b"" - def test_generate_authors(self): - author_old = "Foo Foo <[email protected]>" - author_new = "Bar Bar <[email protected]>" - co_author = "Foo Bar <[email protected]>" - co_author_by = "Co-authored-by: " + co_author - - git_log_cmd = ("git --git-dir=%s log --format" % self.git_dir) - git_co_log_cmd = ("git log --git-dir=%s" % self.git_dir) + author_old = u"Foo Foo <[email protected]>" + author_new = u"Bar Bar <[email protected]>" + co_author = u"Foo Bar <[email protected]>" + co_author_by = u"Co-authored-by: " + co_author + + git_log_cmd = ( + "git --git-dir=%s log --format=%%aN <%%aE>" % self.git_dir) + git_co_log_cmd = ("git --git-dir=%s log" % self.git_dir) git_top_level = "git rev-parse --show-toplevel" cmd_map = { git_log_cmd: author_new, @@ -197,10 +192,12 @@ "os.path.exists", lambda path: os.path.abspath(path) in exist_files)) - self.useFixture(fixtures.FakePopen(lambda proc_args: { - "stdout": BytesIO( - self._fake_log_output(proc_args["args"][2], cmd_map)) - })) + def _fake_run_shell_command(cmd, **kwargs): + return cmd_map[" ".join(cmd)] + + self.useFixture(fixtures.MonkeyPatch( + "pbr.packaging._run_shell_command", + _fake_run_shell_command)) with open(os.path.join(self.temp_path, "AUTHORS.in"), "w") as auth_fh: auth_fh.write("%s\n" % author_old) @@ -215,7 +212,7 @@ self.assertTrue(co_author in authors) -class BuildSphinxTest(tests.BaseTestCase): +class BuildSphinxTest(base.BaseTestCase): scenarios = [ ('true_autodoc_caps', @@ -241,7 +238,7 @@ pkg_fixture = fixtures.PythonPackage( "fake_package", [("fake_module.py", b"")]) self.useFixture(pkg_fixture) - self.useFixture(tests.DiveDir(pkg_fixture.base)) + self.useFixture(base.DiveDir(pkg_fixture.base)) def test_build_doc(self): if self.has_opt: @@ -257,7 +254,7 @@ "api/fake_package.fake_module.rst") == self.has_autodoc) -class ParseRequirementsTest(tests.BaseTestCase): +class ParseRequirementsTest(base.BaseTestCase): def setUp(self): super(ParseRequirementsTest, self).setUp() @@ -334,7 +331,7 @@ packaging.parse_requirements([self.tmp_file])) -class ParseDependencyLinksTest(tests.BaseTestCase): +class ParseDependencyLinksTest(base.BaseTestCase): def setUp(self): super(ParseDependencyLinksTest, self).setUp() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr/tests/test_version.py new/pbr-0.5.23/pbr/tests/test_version.py --- old/pbr-0.5.21/pbr/tests/test_version.py 2013-08-04 20:40:39.000000000 +0200 +++ new/pbr-0.5.23/pbr/tests/test_version.py 2013-10-30 22:02:32.000000000 +0100 @@ -15,11 +15,11 @@ # License for the specific language governing permissions and limitations # under the License. -from pbr import tests +from pbr.tests import base from pbr import version -class DeferredVersionTestCase(tests.BaseTestCase): +class DeferredVersionTestCase(base.BaseTestCase): def test_cached_version(self): class MyVersionInfo(version.VersionInfo): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr.egg-info/PKG-INFO new/pbr-0.5.23/pbr.egg-info/PKG-INFO --- old/pbr-0.5.21/pbr.egg-info/PKG-INFO 2013-08-04 20:41:10.000000000 +0200 +++ new/pbr-0.5.23/pbr.egg-info/PKG-INFO 2013-10-30 22:02:56.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.1 Name: pbr -Version: 0.5.21 +Version: 0.5.23 Summary: Python Build Reasonableness Home-page: http://pypi.python.org/pypi/pbr Author: OpenStack diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/pbr.egg-info/SOURCES.txt new/pbr-0.5.23/pbr.egg-info/SOURCES.txt --- old/pbr-0.5.21/pbr.egg-info/SOURCES.txt 2013-08-04 20:41:10.000000000 +0200 +++ new/pbr-0.5.23/pbr.egg-info/SOURCES.txt 2013-10-30 22:02:56.000000000 +0100 @@ -13,6 +13,7 @@ tox.ini doc/source/conf.py doc/source/index.rst +doc/source/packagers.rst doc/source/_templates/.placeholder doc/source/_theme/layout.html doc/source/_theme/theme.conf @@ -46,6 +47,7 @@ pbr/hooks/files.py pbr/hooks/metadata.py pbr/tests/__init__.py +pbr/tests/base.py pbr/tests/test_commands.py pbr/tests/test_core.py pbr/tests/test_files.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/test-requirements.txt new/pbr-0.5.23/test-requirements.txt --- old/pbr-0.5.21/test-requirements.txt 2013-08-04 20:40:40.000000000 +0200 +++ new/pbr-0.5.23/test-requirements.txt 2013-10-30 22:02:32.000000000 +0100 @@ -1,10 +1,10 @@ coverage>=3.6 discover fixtures>=0.3.12 -flake8 +flake8==2.0 python-subunit sphinx>=1.1.2 -testrepository>=0.0.13 -testresources -testscenarios -testtools>=0.9.27 +testrepository>=0.0.17 +testresources<0.3 +testscenarios>=0.4,<0.5 +testtools>=0.9.32 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/tools/integration.sh new/pbr-0.5.23/tools/integration.sh --- old/pbr-0.5.21/tools/integration.sh 2013-08-04 20:40:40.000000000 +0200 +++ new/pbr-0.5.23/tools/integration.sh 2013-10-30 22:02:32.000000000 +0100 @@ -24,7 +24,7 @@ REPODIR=${REPODIR:-$BASE/new} # TODO: Figure out how to get this on to the box properly -sudo apt-get install -y --force-yes libxml2-dev libxslt-dev libmysqlclient-dev libpq-dev libnspr4-dev pkg-config libsqlite3-dev libzmq-dev libffi-dev +sudo apt-get install -y --force-yes libxml2-dev libxslt-dev libmysqlclient-dev libpq-dev libnspr4-dev pkg-config libsqlite3-dev libzmq-dev libffi-dev libldap2-dev libsasl2-dev tmpdir=$(mktemp -d) @@ -63,21 +63,6 @@ output: $pypidir EOF -# Default to using pypi.openstack.org as an easy_install mirror -if [ "$1" == "--no-mirror" ] ; then - shift -else - cat <<EOF > ~/.pydistutils.cfg -[easy_install] -index_url = http://pypi.openstack.org/openstack -EOF - cat <<EOF > ~/.pip/pip.conf -[global] -index-url = http://pypi.openstack.org/openstack -log = $HOME/pip.log -EOF -fi - # PROJECTS is a list of projects that we're testing PROJECTS=$* @@ -173,6 +158,13 @@ continue fi shortprojectdir=$projectdir/$SHORT_PROJECT + sudo chown -R $USER $REPODIR/$SHORT_PROJECT + (cd $REPODIR/requirements && python update.py $REPODIR/$SHORT_PROJECT) + pushd $REPODIR/$SHORT_PROJECT + if ! git diff --quiet ; then + git commit -a -m'Update requirements' + fi + popd git clone $REPODIR/$SHORT_PROJECT $shortprojectdir sdistvenv=$tmpdir/sdist diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-0.5.21/tox.ini new/pbr-0.5.23/tox.ini --- old/pbr-0.5.21/tox.ini 2013-08-04 20:40:40.000000000 +0200 +++ new/pbr-0.5.23/tox.ini 2013-10-30 22:02:32.000000000 +0100 @@ -1,7 +1,11 @@ [tox] -envlist = py26,py27,py33,pep8 +minversion = 1.6 +skipsdist = True +envlist = py26,py27,py33,pypy,pep8 [testenv] +usedevelop = True +install_command = pip install {opts} {packages} setenv = VIRTUAL_ENV={envdir} LANG=en_US.UTF-8 LANGUAGE=en_US:en @@ -30,5 +34,6 @@ commands = {posargs} [flake8] +ignore = H803 exclude = .venv,.tox,dist,doc,*.egg,build show-source = true ++++++ rpmlintrc ++++++ # It's just the testsuite: addFilter("E: devel-file-in-non-devel-package") -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
