Hello community, here is the log from the commit of package python-pbr for openSUSE:Factory checked in at 2019-03-04 09:11:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pbr (Old) and /work/SRC/openSUSE:Factory/.python-pbr.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-pbr" Mon Mar 4 09:11:30 2019 rev:44 rq:680542 version:5.1.3 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pbr/python-pbr.changes 2019-01-28 20:48:50.737879782 +0100 +++ /work/SRC/openSUSE:Factory/.python-pbr.new.28833/python-pbr.changes 2019-03-04 09:11:31.788696323 +0100 @@ -1,0 +2,13 @@ +Fri Mar 1 14:36:24 UTC 2019 - Ondřej Súkup <[email protected]> + +- update to 5.1.3 +- drop 0001-Skip-test-for-testr-hook-being-installed-when-testr-.patch + new_wheel.patch + * Resolve ``ValueError`` when mapping value contains a literal ``=`` + * ignore –find-links in requirements file + * Do not globally replace path prefix + * Use templates for cover and lower-constraints + * Special case long_description_content_type + * Support wheel 0.32.0+ + +------------------------------------------------------------------- Old: ---- 0001-Skip-test-for-testr-hook-being-installed-when-testr-.patch new_wheel.patch pbr-4.3.0.tar.gz New: ---- pbr-5.1.3.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pbr.spec ++++++ --- /var/tmp/diff_new_pack.dqqesz/_old 2019-03-04 09:11:32.260696244 +0100 +++ /var/tmp/diff_new_pack.dqqesz/_new 2019-03-04 09:11:32.260696244 +0100 @@ -26,15 +26,13 @@ %bcond_with test %endif Name: python-pbr%{psuffix} -Version: 4.3.0 +Version: 5.1.3 Release: 0 Summary: Python Build Reasonableness License: Apache-2.0 Group: Development/Languages/Python URL: http://pypi.python.org/pypi/pbr Source: https://files.pythonhosted.org/packages/source/p/pbr/pbr-%{version}.tar.gz -Patch0: 0001-Skip-test-for-testr-hook-being-installed-when-testr-.patch -Patch1: new_wheel.patch BuildRequires: %{python_module setuptools} BuildRequires: fdupes BuildRequires: python-rpm-macros ++++++ pbr-4.3.0.tar.gz -> pbr-5.1.3.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/.zuul.yaml new/pbr-5.1.3/.zuul.yaml --- old/pbr-4.3.0/.zuul.yaml 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/.zuul.yaml 2019-02-28 19:08:19.000000000 +0100 @@ -105,23 +105,20 @@ - project: templates: + - lib-forward-testing + - lib-forward-testing-python3 + - openstack-cover-jobs + - openstack-lower-constraints-jobs - openstack-python-jobs - openstack-python35-jobs - openstack-python36-jobs - - lib-forward-testing - - lib-forward-testing-python3 - - publish-openstack-docs-pti - periodic-stable-jobs + - publish-openstack-docs-pti check: jobs: - - openstack-tox-lower-constraints - pbr-installation-devstack - pbr-installation-upstream-devstack gate: jobs: - - openstack-tox-lower-constraints - pbr-installation-devstack - pbr-installation-upstream-devstack - post: - jobs: - - openstack-tox-cover diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/AUTHORS new/pbr-5.1.3/AUTHORS --- old/pbr-4.3.0/AUTHORS 2018-10-03 11:37:09.000000000 +0200 +++ new/pbr-5.1.3/AUTHORS 2019-02-28 19:10:35.000000000 +0100 @@ -11,6 +11,7 @@ Attila Fazekas <[email protected]> Ben Nemec <[email protected]> Bhuvan Arumugam <[email protected]> +Brandon LeBlanc <[email protected]> Brant Knudson <[email protected]> Brian Waldon <[email protected]> Cao Xuan Hoang <[email protected]> @@ -104,7 +105,9 @@ Sascha Peilicke <[email protected]> Sean Dague <[email protected]> Sean Dague <[email protected]> +Sean McGinnis <[email protected]> Sergey Lukjanov <[email protected]> +Sorin Sbarnea <[email protected]> Stephen Finucane <[email protected]> Stephen Finucane <[email protected]> Steve Kowalik <[email protected]> @@ -124,6 +127,7 @@ Vincent Untz <[email protected]> Vishvananda Ishaya <[email protected]> Wei Tie <[email protected]> +Will Szumski <[email protected]> YAMAMOTO Takashi <[email protected]> Yaguang Tang <[email protected]> Yuriy Taraday <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/ChangeLog new/pbr-5.1.3/ChangeLog --- old/pbr-4.3.0/ChangeLog 2018-10-03 11:37:09.000000000 +0200 +++ new/pbr-5.1.3/ChangeLog 2019-02-28 19:10:35.000000000 +0100 @@ -1,10 +1,43 @@ CHANGES ======= +5.1.3 +----- + +* Resolve \`\`ValueError\`\` when mapping value contains a literal \`\`=\`\` + +5.1.2 +----- + +* Ignore --find-links in requirements file +* Do not globally replace path prefix +* Change openstack-dev to openstack-discuss + +5.1.1 +----- + +* Fix incorrect use of flake8:noqa +* Correct documentation hyperlink for environment-markers + +5.1.0 +----- + + +5.0.0 +----- + +* Use templates for cover and lower-constraints +* Special case long\_description\_content\_type +* tox: Suppress output +* Support wheel 0.32.0+ + 4.3.0 ----- * Remove my\_ip from generated wsgi script +* Add an option to skip generating RELEASENOTES.rst +* docs: Add docs for reno integration +* Skip test for testr hook being installed when testr is not available * Fix typo in contribution instructions * Add release note for fix to bug 1786306 * Move pbr-installation jobs in-tree @@ -15,6 +48,7 @@ * switch documentation job to new PTI * import zuul job settings from project-config * Ignore Zuul when generating AUTHORS +* packaging: Remove support for pyN requirement files * tox: Re-add cover target 4.2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/PKG-INFO new/pbr-5.1.3/PKG-INFO --- old/pbr-4.3.0/PKG-INFO 2018-10-03 11:37:09.000000000 +0200 +++ new/pbr-5.1.3/PKG-INFO 2019-02-28 19:10:35.000000000 +0100 @@ -1,10 +1,10 @@ Metadata-Version: 2.1 Name: pbr -Version: 4.3.0 +Version: 5.1.3 Summary: Python Build Reasonableness Home-page: https://docs.openstack.org/pbr/latest/ Author: OpenStack -Author-email: [email protected] +Author-email: [email protected] License: UNKNOWN Project-URL: Documentation, https://docs.openstack.org/pbr/ Project-URL: Bug Tracker, https://bugs.launchpad.net/pbr/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/doc/source/index.rst new/pbr-5.1.3/doc/source/index.rst --- old/pbr-4.3.0/doc/source/index.rst 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/doc/source/index.rst 2019-02-28 19:08:19.000000000 +0100 @@ -21,6 +21,7 @@ * **ChangeLog**: Generate ChangeLog from git log * **Manifest**: Generate a sensible manifest from git files and some standard files +* **Release Notes**: Generate a release notes file using reno * **Requirements**: Store your dependencies in a pip requirements file * **long_description**: Use your README file as a long_description * **Smart find_packages**: Smartly find packages under your root package diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/doc/source/user/features.rst new/pbr-5.1.3/doc/source/user/features.rst --- old/pbr-4.3.0/doc/source/user/features.rst 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/doc/source/user/features.rst 2019-02-28 19:08:19.000000000 +0100 @@ -62,7 +62,7 @@ - Extensive use of ``setup.cfg`` for configuration - Automatic package metadata generation (``version``) - Automatic metadata file generation (``AUTHOR``, ``ChangeLog``, - ``MANIFEST.in``) + ``MANIFEST.in``, ``RELEASENOTES.txt``) In addition, there are other things that you don't see here but which *pbr* will do for you: @@ -181,6 +181,10 @@ You can also specify the exact file you want to use using the ``description-file`` parameter. +You can set the ``description-content-type`` to a MIME type that may +help rendering of the description; for example ``text/markdown`` or +``text/x-rst; charset=UTF-8``. + Requirements ~~~~~~~~~~~~ @@ -200,14 +204,16 @@ and inject them into the ``install_requires``, ``tests_require`` and/or ``dependency_links`` arguments to ``setup``. Voila! -You can also have a requirement file for each specific major version of Python. -If you want to have a different package list for Python 3 then just drop a -``requirements-py3.txt`` and it will be used instead. - Finally, it is possible to specify groups of optional dependencies, or :ref:`"extra" requirements <extra-requirements>`, in your ``setup.cfg`` rather than ``setup.py``. +.. versionchanged:: 5.0 + + Previously you could specify requirements for a given major version of + Python using requirments files with a ``-pyN`` suffix. This was deprecated + in 4.0 and removed in 5.0 in favour of environment markers. + Automatic File Generation ------------------------- @@ -253,6 +259,21 @@ __ https://packaging.python.org/tutorials/distributing-packages/#manifest-in +Release Notes +~~~~~~~~~~~~~ + +.. admonition:: Summary + + *pbr* will automatically use *reno* \'s ``build_reno`` setuptools command + to generate a release notes file, if reno is available and configured. + +If using *reno*, you may wish to include a copy of the release notes in your +packages. *reno* provides a ``build_reno`` `setuptools command`__ and, if reno +is present and configured, *pbr* will automatically call this to generate a +release notes file for inclusion in your package. + +__ https://docs.openstack.org/reno/latest/user/setuptools.html + Setup Commands -------------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/doc/source/user/packagers.rst new/pbr-5.1.3/doc/source/user/packagers.rst --- old/pbr-4.3.0/doc/source/user/packagers.rst 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/doc/source/user/packagers.rst 2019-02-28 19:08:19.000000000 +0100 @@ -103,3 +103,20 @@ will cause logic around generating ``ChangeLog`` file using *git* information to be skipped. + +.. _packaging-releasenotes: + +Release Notes +------------- + +*pbr* generates a release notes file, typically called ``RELEASENOTES.rst``, +if `reno`_ is present and configured. You may wish to disable this +functionality. If that is the case setting ``SKIP_GENERATE_RENO`` + +:: + + export SKIP_GENERATE_RENO + +will disable this feature. + +.. _reno: https://docs.openstack.org/reno/latest/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/doc/source/user/using.rst new/pbr-5.1.3/doc/source/user/using.rst --- old/pbr-4.3.0/doc/source/user/using.rst 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/doc/source/user/using.rst 2019-02-28 19:08:19.000000000 +0100 @@ -230,6 +230,13 @@ This can also be configured using the ``SKIP_GENERATE_AUTHORS`` environment variable, as described :ref:`here <packaging-authors-changelog>` +``skip_reno`` + If enabled, *pbr* will not generate a ``RELEASENOTES.txt`` file if `reno`_ is + present and configured. + + This can also be configured using the ``SKIP_GENERATE_RENO`` environment + variable, as described :ref:`here <packaging-releasenotes>`. + ``autodoc_tree_index_modules`` A boolean option controlling whether *pbr* should generate an index of modules using ``sphinx-apidoc``. By default, all files except ``setup.py`` @@ -382,20 +389,18 @@ Requirements files are used in place of the ``install_requires`` and ``extras_require`` attributes. Requirement files should be given one of the -below names. This order is also the order that the requirements are tried in -(where ``N`` is the Python major version number used to install the package): +below names. This order is also the order that the requirements are tried in: -* ``requirements-pyN.txt`` -* ``tools/pip-requires-py3`` * ``requirements.txt`` * ``tools/pip-requires`` Only the first file found is used to install the list of packages it contains. -.. note:: +.. versionchanged:: 5.0 - The ``requirements-pyN.txt`` file is deprecated - ``requirements.txt`` - should be universal. You can use `Environment markers`_ for this purpose. + Previously you could specify requirements for a given major version of + Python using requirements files with a ``-pyN`` suffix. This was deprecated + in 4.0 and removed in 5.0 in favour of environment markers. .. _extra-requirements: @@ -489,3 +494,4 @@ .. _setuptools: http://www.sphinx-doc.org/en/stable/setuptools.html .. _sphinxcontrib-apidoc: https://pypi.org/project/sphinxcontrib-apidoc/ +.. _reno: https://docs.openstack.org/reno/latest/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/lower-constraints.txt new/pbr-5.1.3/lower-constraints.txt --- old/pbr-4.3.0/lower-constraints.txt 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/lower-constraints.txt 2019-02-28 19:08:19.000000000 +0100 @@ -26,7 +26,7 @@ snowballstemmer==1.2.1 Sphinx==1.6.5 sphinxcontrib-websupport==1.0.1 -stestr==2.0.0 +stestr==2.1.0 testrepository==0.0.18 testresources==2.0.0 testscenarios==0.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/core.py new/pbr-5.1.3/pbr/core.py --- old/pbr-4.3.0/pbr/core.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/core.py 2019-02-28 19:08:19.000000000 +0100 @@ -43,13 +43,13 @@ # USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. -from distutils import core -from distutils import errors import logging import os import sys import warnings +from distutils import errors + from pbr import util @@ -57,8 +57,8 @@ string_type = str integer_types = (int,) else: - string_type = basestring # flake8: noqa - integer_types = (int, long) # flake8: noqa + string_type = basestring # noqa + integer_types = (int, long) # noqa def pbr(dist, attr, value): @@ -103,6 +103,15 @@ raise errors.DistutilsSetupError( 'Error parsing %s: %s: %s' % (path, e.__class__.__name__, e)) + # There are some metadata fields that are only supported by + # setuptools and not distutils, and hence are not in + # dist.metadata. We are OK to write these in. For gory details + # see + # https://github.com/pypa/setuptools/pull/1343 + _DISTUTILS_UNSUPPORTED_METADATA = ( + 'long_description_content_type', 'project_urls', 'provides_extras' + ) + # Repeat some of the Distribution initialization code with the newly # provided attrs if attrs: @@ -115,6 +124,8 @@ setattr(dist.metadata, key, val) elif hasattr(dist, key): setattr(dist, key, val) + elif key in _DISTUTILS_UNSUPPORTED_METADATA: + setattr(dist.metadata, key, val) else: msg = 'Unknown distribution option: %s' % repr(key) warnings.warn(msg) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/hooks/files.py new/pbr-5.1.3/pbr/hooks/files.py --- old/pbr-4.3.0/pbr/hooks/files.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/hooks/files.py 2019-02-28 19:08:19.000000000 +0100 @@ -58,8 +58,12 @@ if not target.endswith(os.path.sep): target += os.path.sep for (dirpath, dirnames, fnames) in os.walk(source_prefix): - finished.append( - "%s = " % dirpath.replace(source_prefix, target)) + # As source_prefix is always matched, using replace with a + # a limit of one is always going to replace the path prefix + # and not accidentally replace some text in the middle of + # the path + new_prefix = dirpath.replace(source_prefix, target, 1) + finished.append("%s = " % new_prefix) finished.extend( [" %s" % os.path.join(dirpath, f) for f in fnames]) else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/packaging.py new/pbr-5.1.3/pbr/packaging.py --- old/pbr-4.3.0/pbr/packaging.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/packaging.py 2019-02-28 19:08:19.000000000 +0100 @@ -81,14 +81,16 @@ def get_reqs_from_files(requirements_files): existing = _any_existing(requirements_files) + # TODO(stephenfin): Remove this in pbr 6.0+ deprecated = [f for f in existing if f in PY_REQUIREMENTS_FILES] if deprecated: warnings.warn('Support for \'-pyN\'-suffixed requirements files is ' - 'deprecated in pbr 4.0 and will be removed in 5.0. ' + 'removed in pbr 5.0 and these files are now ignored. ' 'Use environment markers instead. Conflicting files: ' '%r' % deprecated, DeprecationWarning) + existing = [f for f in existing if f not in PY_REQUIREMENTS_FILES] for requirements_file in existing: with open(requirements_file, 'r') as fil: return fil.read().split('\n') @@ -116,7 +118,8 @@ continue # Ignore index URL lines - if re.match(r'^\s*(-i|--index-url|--extra-index-url).*', line): + if re.match(r'^\s*(-i|--index-url|--extra-index-url|--find-links).*', + line): continue # Handle nested requirements files such as: @@ -575,6 +578,13 @@ if hasattr(self, '_has_reno'): return self._has_reno + option_dict = self.distribution.get_option_dict('pbr') + should_skip = options.get_boolean_option(option_dict, 'skip_reno', + 'SKIP_GENERATE_RENO') + if should_skip: + self._has_reno = False + return False + try: # versions of reno witout this module will not have the required # feature, hence the import diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/tests/test_files.py new/pbr-5.1.3/pbr/tests/test_files.py --- old/pbr-4.3.0/pbr/tests/test_files.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/tests/test_files.py 2019-02-28 19:08:19.000000000 +0100 @@ -35,15 +35,20 @@ ]) self.useFixture(pkg_fixture) pkg_etc = os.path.join(pkg_fixture.base, 'etc') + pkg_ansible = os.path.join(pkg_fixture.base, 'ansible', + 'kolla-ansible', 'test') pkg_sub = os.path.join(pkg_etc, 'sub') subpackage = os.path.join( pkg_fixture.base, 'fake_package', 'subpackage') os.makedirs(pkg_sub) os.makedirs(subpackage) + os.makedirs(pkg_ansible) with open(os.path.join(pkg_etc, "foo"), 'w') as foo_file: foo_file.write("Foo Data") with open(os.path.join(pkg_sub, "bar"), 'w') as foo_file: foo_file.write("Bar Data") + with open(os.path.join(pkg_ansible, "baz"), 'w') as baz_file: + baz_file.write("Baz Data") with open(os.path.join(subpackage, "__init__.py"), 'w') as foo_file: foo_file.write("# empty") @@ -76,3 +81,19 @@ self.assertIn( '\netc/pbr/ = \n etc/foo\netc/pbr/sub = \n etc/sub/bar', config['files']['data_files']) + + def test_data_files_globbing_source_prefix_in_directory_name(self): + # We want to test that the string, "docs", is not replaced in a + # subdirectory name, "sub-docs" + config = dict( + files=dict( + data_files="\n share/ansible = ansible/*" + ) + ) + files.FilesConfig(config, 'fake_package').run() + self.assertIn( + '\nshare/ansible/ = ' + '\nshare/ansible/kolla-ansible = ' + '\nshare/ansible/kolla-ansible/test = ' + '\n ansible/kolla-ansible/test/baz', + config['files']['data_files']) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/tests/test_hooks.py new/pbr-5.1.3/pbr/tests/test_hooks.py --- old/pbr-4.3.0/pbr/tests/test_hooks.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/tests/test_hooks.py 2019-02-28 19:08:19.000000000 +0100 @@ -41,7 +41,9 @@ import os from testtools import matchers +from testtools import skipUnless +from pbr import testr_command from pbr.tests import base from pbr.tests import util @@ -66,6 +68,7 @@ assert 'test_hook_1\ntest_hook_2' in stdout assert return_code == 0 + @skipUnless(testr_command.have_testr, "testrepository not available") def test_custom_commands_known(self): stdout, _, return_code = self.run_setup('--help-commands') self.assertFalse(return_code) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/tests/test_packaging.py new/pbr-5.1.3/pbr/tests/test_packaging.py --- old/pbr-4.3.0/pbr/tests/test_packaging.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/tests/test_packaging.py 2019-02-28 19:08:19.000000000 +0100 @@ -43,7 +43,6 @@ import imp import os import re -import sys import sysconfig import tempfile import textwrap @@ -56,7 +55,7 @@ import testtools from testtools import matchers import virtualenv -import wheel.install +from wheel import wheelfile from pbr import git from pbr import packaging @@ -372,13 +371,13 @@ relative_wheel_filename = os.listdir(dist_dir)[0] absolute_wheel_filename = os.path.join( dist_dir, relative_wheel_filename) - wheel_file = wheel.install.WheelFile(absolute_wheel_filename) + wheel_file = wheelfile.WheelFile(absolute_wheel_filename) wheel_name = wheel_file.parsed_filename.group('namever') # Create a directory path to unpack the wheel to self.extracted_wheel_dir = os.path.join(dist_dir, wheel_name) # Extract the wheel contents to the directory we just created - wheel_file.zipfile.extractall(self.extracted_wheel_dir) - wheel_file.zipfile.close() + wheel_file.extractall(self.extracted_wheel_dir) + wheel_file.close() def test_data_directory_has_wsgi_scripts(self): # Build the path to the scripts directory @@ -532,11 +531,13 @@ tempdir = tempfile.mkdtemp() requirements = os.path.join(tempdir, 'requirements.txt') with open(requirements, 'w') as f: - f.write('-i https://myindex.local') - f.write(' --index-url https://myindex.local') - f.write(' --extra-index-url https://myindex.local') + f.write('-i https://myindex.local\n') + f.write(' --index-url https://myindex.local\n') + f.write(' --extra-index-url https://myindex.local\n') + f.write('--find-links https://myindex.local\n') + f.write('arequirement>=1.0\n') result = packaging.parse_requirements([requirements]) - self.assertEqual([], result) + self.assertEqual(['arequirement>=1.0'], result) def test_nested_requirements(self): tempdir = tempfile.mkdtemp() @@ -549,28 +550,6 @@ result = packaging.parse_requirements([requirements]) self.assertEqual(['pbr'], result) - @mock.patch('warnings.warn') - def test_python_version(self, mock_warn): - with open("requirements-py%d.txt" % sys.version_info[0], - "w") as fh: - fh.write("# this is a comment\nfoobar\n# and another one\nfoobaz") - self.assertEqual(['foobar', 'foobaz'], - packaging.parse_requirements()) - mock_warn.assert_called_once_with(mock.ANY, DeprecationWarning) - - @mock.patch('warnings.warn') - def test_python_version_multiple_options(self, mock_warn): - with open("requirements-py1.txt", "w") as fh: - fh.write("thisisatrap") - with open("requirements-py%d.txt" % sys.version_info[0], - "w") as fh: - fh.write("# this is a comment\nfoobar\n# and another one\nfoobaz") - self.assertEqual(['foobar', 'foobaz'], - packaging.parse_requirements()) - # even though we have multiple offending files, this should only be - # called once - mock_warn.assert_called_once_with(mock.ANY, DeprecationWarning) - class ParseRequirementsTestScenarios(base.BaseTestCase): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/tests/test_util.py new/pbr-5.1.3/pbr/tests/test_util.py --- old/pbr-4.3.0/pbr/tests/test_util.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/tests/test_util.py 2019-02-28 19:08:19.000000000 +0100 @@ -23,6 +23,19 @@ from pbr import util +def config_from_ini(ini): + config = {} + if sys.version_info >= (3, 2): + parser = configparser.ConfigParser() + else: + parser = configparser.SafeConfigParser() + ini = textwrap.dedent(six.u(ini)) + parser.readfp(io.StringIO(ini)) + for section in parser.sections(): + config[section] = dict(parser.items(section)) + return config + + class TestExtrasRequireParsingScenarios(base.BaseTestCase): scenarios = [ @@ -64,20 +77,8 @@ {} })] - def config_from_ini(self, ini): - config = {} - if sys.version_info >= (3, 2): - parser = configparser.ConfigParser() - else: - parser = configparser.SafeConfigParser() - ini = textwrap.dedent(six.u(ini)) - parser.readfp(io.StringIO(ini)) - for section in parser.sections(): - config[section] = dict(parser.items(section)) - return config - def test_extras_parsing(self): - config = self.config_from_ini(self.config_text) + config = config_from_ini(self.config_text) kwargs = util.setup_cfg_to_setup_kwargs(config) self.assertEqual(self.expected_extra_requires, @@ -89,3 +90,43 @@ def test_invalid_marker_raises_error(self): config = {'extras': {'test': "foo :bad_marker>'1.0'"}} self.assertRaises(SyntaxError, util.setup_cfg_to_setup_kwargs, config) + + +class TestMapFieldsParsingScenarios(base.BaseTestCase): + + scenarios = [ + ('simple_project_urls', { + 'config_text': """ + [metadata] + project_urls = + Bug Tracker = https://bugs.launchpad.net/pbr/ + Documentation = https://docs.openstack.org/pbr/ + Source Code = https://git.openstack.org/cgit/openstack-dev/pbr/ + """, # noqa: E501 + 'expected_project_urls': { + 'Bug Tracker': 'https://bugs.launchpad.net/pbr/', + 'Documentation': 'https://docs.openstack.org/pbr/', + 'Source Code': 'https://git.openstack.org/cgit/openstack-dev/pbr/', # noqa: E501 + }, + }), + ('query_parameters', { + 'config_text': """ + [metadata] + project_urls = + Bug Tracker = https://bugs.launchpad.net/pbr/?query=true + Documentation = https://docs.openstack.org/pbr/?foo=bar + Source Code = https://git.openstack.org/cgit/openstack-dev/pbr/commit/?id=hash + """, # noqa: E501 + 'expected_project_urls': { + 'Bug Tracker': 'https://bugs.launchpad.net/pbr/?query=true', + 'Documentation': 'https://docs.openstack.org/pbr/?foo=bar', + 'Source Code': 'https://git.openstack.org/cgit/openstack-dev/pbr/commit/?id=hash', # noqa: E501 + }, + }), + ] + + def test_project_url_parsing(self): + config = config_from_ini(self.config_text) + kwargs = util.setup_cfg_to_setup_kwargs(config) + + self.assertEqual(self.expected_project_urls, kwargs['project_urls']) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr/util.py new/pbr-5.1.3/pbr/util.py --- old/pbr-4.3.0/pbr/util.py 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/pbr/util.py 2019-02-28 19:08:19.000000000 +0100 @@ -56,24 +56,21 @@ # irritating Python bug that can crop up when using ./setup.py test. # See: http://www.eby-sarna.com/pipermail/peak/2010-May/003355.html try: - import multiprocessing # flake8: noqa + import multiprocessing # noqa except ImportError: pass -import logging # flake8: noqa +import logging # noqa +from collections import defaultdict import os import re import sys import traceback -from collections import defaultdict - import distutils.ccompiler -import pkg_resources - -from distutils import log from distutils import errors -from setuptools.command.egg_info import manifest_maker +from distutils import log +import pkg_resources from setuptools import dist as st_dist from setuptools import extension @@ -244,11 +241,11 @@ if hook != 'pbr.hooks.setup_hook'] for hook in setup_hooks: hook_fn = resolve_name(hook) - try : + try: hook_fn(config) except SystemExit: log.error('setup hook %s terminated the installation') - except: + except Exception: e = sys.exc_info()[1] log.error('setup hook %s raised exception: %s\n' % (hook, e)) @@ -288,7 +285,9 @@ def setup_cfg_to_setup_kwargs(config, script_args=()): - """Processes the setup.cfg options and converts them to arguments accepted + """Convert config options to kwargs. + + Processes the setup.cfg options and converts them to arguments accepted by setuptools' setup() function. """ @@ -334,7 +333,7 @@ elif arg in MAP_FIELDS: in_cfg_map = {} for i in split_multiline(in_cfg_value): - k, v = i.split('=') + k, v = i.split('=', 1) in_cfg_map[k.strip()] = v.strip() in_cfg_value = in_cfg_map elif arg in BOOL_FIELDS: @@ -354,12 +353,13 @@ # Split install_requires into package,env_marker tuples # These will be re-assembled later install_requires = [] - requirement_pattern = '(?P<package>[^;]*);?(?P<env_marker>[^#]*?)(?:\s*#.*)?$' + requirement_pattern = ( + r'(?P<package>[^;]*);?(?P<env_marker>[^#]*?)(?:\s*#.*)?$') for requirement in in_cfg_value: m = re.match(requirement_pattern, requirement) requirement_package = m.group('package').strip() env_marker = m.group('env_marker').strip() - install_requires.append((requirement_package,env_marker)) + install_requires.append((requirement_package, env_marker)) all_requirements[''] = install_requires elif arg == 'package_dir': in_cfg_value = {'': in_cfg_value} @@ -414,7 +414,8 @@ # -> {'fred': ['bar'], 'fred:marker':['foo']} if 'extras' in config: - requirement_pattern = '(?P<package>[^:]*):?(?P<env_marker>[^#]*?)(?:\s*#.*)?$' + requirement_pattern = ( + r'(?P<package>[^:]*):?(?P<env_marker>[^#]*?)(?:\s*#.*)?$') extras = config['extras'] # Add contents of test-requirements, if any, into an extra named # 'test' if one does not already exist. @@ -430,7 +431,7 @@ m = re.match(requirement_pattern, requirement) extras_value = m.group('package').strip() env_marker = m.group('env_marker') - extra_requirements.append((extras_value,env_marker)) + extra_requirements.append((extras_value, env_marker)) all_requirements[extra] = extra_requirements # Transform the full list of requirements into: @@ -459,7 +460,7 @@ "Marker evaluation failed, see the following " "error. For more information see: " "http://docs.openstack.org/" - "developer/pbr/compatibility.html#evaluate-marker" + "pbr/latest/user/using.html#environment-markers" ) raise else: @@ -473,9 +474,10 @@ def register_custom_compilers(config): - """Handle custom compilers; this has no real equivalent in distutils, where - additional compilers could only be added programmatically, so we have to - hack it in somehow. + """Handle custom compilers. + + This has no real equivalent in distutils, where additional compilers could + only be added programmatically, so we have to hack it in somehow. """ compilers = has_get_option(config, 'global', 'compilers') @@ -497,7 +499,7 @@ module_name = compiler.__module__ # Note; this *will* override built in compilers with the same name - # TODO: Maybe display a warning about this? + # TODO(embray): Maybe display a warning about this? cc = distutils.ccompiler.compiler_class cc[name] = (module_name, compiler.__name__, desc) @@ -560,13 +562,14 @@ def get_entry_points(config): - """Process the [entry_points] section of setup.cfg to handle setuptools - entry points. This is, of course, not a standard feature of - distutils2/packaging, but as there is not currently a standard alternative - in packaging, we provide support for them. + """Process the [entry_points] section of setup.cfg. + + Processes setup.cfg to handle setuptools entry points. This is, of course, + not a standard feature of distutils2/packaging, but as there is not + currently a standard alternative in packaging, we provide support for them. """ - if not 'entry_points' in config: + if 'entry_points' not in config: return {} return dict((option, split_multiline(value)) @@ -600,9 +603,7 @@ # The following classes are used to hack Distribution.command_options a bit class DefaultGetDict(defaultdict): - """Like defaultdict, but the get() method also sets and returns the default - value. - """ + """Like defaultdict, but get() also sets and returns the default value.""" def get(self, key, default=None): if default is None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr.egg-info/PKG-INFO new/pbr-5.1.3/pbr.egg-info/PKG-INFO --- old/pbr-4.3.0/pbr.egg-info/PKG-INFO 2018-10-03 11:37:09.000000000 +0200 +++ new/pbr-5.1.3/pbr.egg-info/PKG-INFO 2019-02-28 19:10:35.000000000 +0100 @@ -1,10 +1,10 @@ Metadata-Version: 2.1 Name: pbr -Version: 4.3.0 +Version: 5.1.3 Summary: Python Build Reasonableness Home-page: https://docs.openstack.org/pbr/latest/ Author: OpenStack -Author-email: [email protected] +Author-email: [email protected] License: UNKNOWN Project-URL: Documentation, https://docs.openstack.org/pbr/ Project-URL: Bug Tracker, https://bugs.launchpad.net/pbr/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/pbr.egg-info/SOURCES.txt new/pbr-5.1.3/pbr.egg-info/SOURCES.txt --- old/pbr-4.3.0/pbr.egg-info/SOURCES.txt 2018-10-03 11:37:09.000000000 +0200 +++ new/pbr-5.1.3/pbr.egg-info/SOURCES.txt 2019-02-28 19:10:35.000000000 +0100 @@ -95,6 +95,10 @@ playbooks/legacy/pbr-installation-upstream-devstack/run.yaml releasenotes/notes/deprecate-pyN-requirements-364655c38fa5b780.yaml releasenotes/notes/deprecate-testr-nose-integration-56e3e11248d946fc.yaml +releasenotes/notes/fix-global-replace-of-src-prefix-in-glob-eb850b94ca96993e.yaml +releasenotes/notes/fix-mapping-value-explode-with-equal-sign-41bf822fa4dd0e68.yaml +releasenotes/notes/ignore-find-links-07cf54f465aa33a6.yaml +releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml releasenotes/notes/remove-command-hooks-907d9c2325f306ca.yaml releasenotes/notes/support-vcs-uris-with-subdirectories-20ad68b6138f72ca.yaml releasenotes/notes/v_version-457b38c8679c5868.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/releasenotes/notes/fix-global-replace-of-src-prefix-in-glob-eb850b94ca96993e.yaml new/pbr-5.1.3/releasenotes/notes/fix-global-replace-of-src-prefix-in-glob-eb850b94ca96993e.yaml --- old/pbr-4.3.0/releasenotes/notes/fix-global-replace-of-src-prefix-in-glob-eb850b94ca96993e.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/pbr-5.1.3/releasenotes/notes/fix-global-replace-of-src-prefix-in-glob-eb850b94ca96993e.yaml 2019-02-28 19:08:19.000000000 +0100 @@ -0,0 +1,9 @@ +--- +fixes: + - | + Fixes a bug where the directory names of items specified in ``data_files`` + could be renamed if the source prefix glob was contained within the + directory name. See `bug 1810804 + <https://bugs.launchpad.net/pbr/+bug/1810804>`_ for details. For more + information on ``data_files``, see the `distutils documentation + <https://docs.python.org/2/distutils/setupscript.html#installing-additional-files>`_. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/releasenotes/notes/fix-mapping-value-explode-with-equal-sign-41bf822fa4dd0e68.yaml new/pbr-5.1.3/releasenotes/notes/fix-mapping-value-explode-with-equal-sign-41bf822fa4dd0e68.yaml --- old/pbr-4.3.0/releasenotes/notes/fix-mapping-value-explode-with-equal-sign-41bf822fa4dd0e68.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/pbr-5.1.3/releasenotes/notes/fix-mapping-value-explode-with-equal-sign-41bf822fa4dd0e68.yaml 2019-02-28 19:08:19.000000000 +0100 @@ -0,0 +1,7 @@ +--- +fixes: + - | + Fix mapping error on values who contains a literal ``=``. Example when + setup.cfg contains content like the following project urls configuration + "project_urls = Documentation = http://foo.bar/?badge=latest". + https://bugs.launchpad.net/pbr/+bug/1817592 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/releasenotes/notes/ignore-find-links-07cf54f465aa33a6.yaml new/pbr-5.1.3/releasenotes/notes/ignore-find-links-07cf54f465aa33a6.yaml --- old/pbr-4.3.0/releasenotes/notes/ignore-find-links-07cf54f465aa33a6.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/pbr-5.1.3/releasenotes/notes/ignore-find-links-07cf54f465aa33a6.yaml 2019-02-28 19:08:19.000000000 +0100 @@ -0,0 +1,6 @@ +--- +fixes: + - | + PBR now ignores ``--find-links`` in requirements files. This option is not + a valid ``install_requires`` entry for setuptools and thus breaks + PBR-based installs. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml new/pbr-5.1.3/releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml --- old/pbr-4.3.0/releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/pbr-5.1.3/releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml 2019-02-28 19:08:19.000000000 +0100 @@ -0,0 +1,6 @@ +--- +fixes: + - | + The ``description-content-type`` was not being set correctly. It + will now be correctly populated when using ``setuptools`` 39.2.0 + and beyond. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/setup.cfg new/pbr-5.1.3/setup.cfg --- old/pbr-4.3.0/setup.cfg 2018-10-03 11:37:09.000000000 +0200 +++ new/pbr-5.1.3/setup.cfg 2019-02-28 19:10:35.000000000 +0100 @@ -1,7 +1,7 @@ [metadata] name = pbr author = OpenStack -author-email = [email protected] +author-email = [email protected] summary = Python Build Reasonableness description-file = README.rst @@ -53,7 +53,7 @@ source-dir = doc/source warning-is-error = 1 -[wheel] +[bdist_wheel] universal = 1 [egg_info] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/test-requirements.txt new/pbr-5.1.3/test-requirements.txt --- old/pbr-4.3.0/test-requirements.txt 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/test-requirements.txt 2019-02-28 19:08:19.000000000 +0100 @@ -1,15 +1,17 @@ # The order of packages is significant, because pip processes them in the order # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. +wheel>=0.32.0 # MIT fixtures>=3.0.0 # Apache-2.0/BSD hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0 mock>=2.0.0 # BSD six>=1.10.0 # MIT -stestr>=2.0.0 # Apache-2.0 +stestr>=2.1.0 # Apache-2.0 testresources>=2.0.0 # Apache-2.0/BSD testscenarios>=0.4 # Apache-2.0/BSD testtools>=2.2.0 # MIT virtualenv>=14.0.6 # MIT +coverage!=4.4,>=4.0 # Apache-2.0 # optionally exposed by distutils commands sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pbr-4.3.0/tox.ini new/pbr-5.1.3/tox.ini --- old/pbr-4.3.0/tox.ini 2018-10-03 11:34:38.000000000 +0200 +++ new/pbr-5.1.3/tox.ini 2019-02-28 19:08:19.000000000 +0100 @@ -5,11 +5,15 @@ [testenv] usedevelop = True install_command = pip install {opts} {packages} -passenv = PBR_INTEGRATION PIPFLAGS PIPVERSION PBRVERSION REPODIR WHEELHOUSE PROJECTS OS_TEST_TIMEOUT OS_STDOUT_CAPTURE OS_STDERR_CAPTURE +passenv = PBR_INTEGRATION PIPFLAGS PIPVERSION PBRVERSION REPODIR WHEELHOUSE PROJECTS +setenv = + OS_STDOUT_CAPTURE={env:OS_STDOUT_CAPTURE:1} + OS_STDERR_CAPTURE={env:OS_STDERR_CAPTURE:1} + OS_TEST_TIMEOUT={env:OS_TEST_TIMEOUT:60} deps = -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} -r{toxinidir}/test-requirements.txt -commands = stestr run {posargs} +commands = stestr run --suppress-attachments {posargs} [testenv:pep8] basepython = python3
