From 347466bf206f946ccd0003200824dea51c6389cb Mon Sep 17 00:00:00 2001 From: JinWang An Date: Mon, 28 Dec 2020 13:46:30 +0900 Subject: [PATCH] Imported Upstream version 5.0.0 --- .zuul.yaml | 13 +++----- ChangeLog | 11 +++++++ PKG-INFO | 4 +-- doc/source/index.rst | 1 + doc/source/user/features.rst | 31 ++++++++++++++++--- doc/source/user/using.rst | 12 +++---- lower-constraints.txt | 2 +- pbr.egg-info/PKG-INFO | 4 +-- pbr.egg-info/SOURCES.txt | 1 + pbr/core.py | 12 +++++++ pbr/packaging.py | 4 ++- pbr/tests/test_hooks.py | 3 ++ pbr/tests/test_packaging.py | 31 +++---------------- ...g-descr-content-type-f9a1003acbb8740f.yaml | 6 ++++ setup.cfg | 2 +- test-requirements.txt | 4 ++- tox.ini | 8 +++-- 17 files changed, 92 insertions(+), 57 deletions(-) create mode 100644 releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml diff --git a/.zuul.yaml b/.zuul.yaml index 0541e40..df57d8d 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -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 --git a/ChangeLog b/ChangeLog index 4f3640d..c431e96 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,10 +1,20 @@ CHANGES ======= +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 +* 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 +25,7 @@ CHANGES * 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 --git a/PKG-INFO b/PKG-INFO index 50d222f..5ecf732 100644 --- a/PKG-INFO +++ b/PKG-INFO @@ -1,14 +1,14 @@ Metadata-Version: 2.1 Name: pbr -Version: 4.3.0 +Version: 5.0.0 Summary: Python Build Reasonableness Home-page: https://docs.openstack.org/pbr/latest/ Author: OpenStack Author-email: openstack-dev@lists.openstack.org License: UNKNOWN +Project-URL: Source Code, https://git.openstack.org/cgit/openstack-dev/pbr/ Project-URL: Documentation, https://docs.openstack.org/pbr/ Project-URL: Bug Tracker, https://bugs.launchpad.net/pbr/ -Project-URL: Source Code, https://git.openstack.org/cgit/openstack-dev/pbr/ Description: Introduction ============ diff --git a/doc/source/index.rst b/doc/source/index.rst index 60cd461..428d835 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -21,6 +21,7 @@ using an install tool such as *pip*. * **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 --git a/doc/source/user/features.rst b/doc/source/user/features.rst index dfbc18b..46c9d03 100644 --- a/doc/source/user/features.rst +++ b/doc/source/user/features.rst @@ -62,7 +62,7 @@ From this, we note a couple of the main features of *pbr*: - 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 @@ probably a good long_description. So we'll just inject the contents of your 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 @@ for your project and will then parse these files, split them up appropriately, 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 `, 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 @@ test files. __ 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 --git a/doc/source/user/using.rst b/doc/source/user/using.rst index b5e28eb..0104640 100644 --- a/doc/source/user/using.rst +++ b/doc/source/user/using.rst @@ -382,20 +382,18 @@ Requirements 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: diff --git a/lower-constraints.txt b/lower-constraints.txt index 44956ce..173a299 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -26,7 +26,7 @@ six==1.10.0 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 --git a/pbr.egg-info/PKG-INFO b/pbr.egg-info/PKG-INFO index 50d222f..5ecf732 100644 --- a/pbr.egg-info/PKG-INFO +++ b/pbr.egg-info/PKG-INFO @@ -1,14 +1,14 @@ Metadata-Version: 2.1 Name: pbr -Version: 4.3.0 +Version: 5.0.0 Summary: Python Build Reasonableness Home-page: https://docs.openstack.org/pbr/latest/ Author: OpenStack Author-email: openstack-dev@lists.openstack.org License: UNKNOWN +Project-URL: Source Code, https://git.openstack.org/cgit/openstack-dev/pbr/ Project-URL: Documentation, https://docs.openstack.org/pbr/ Project-URL: Bug Tracker, https://bugs.launchpad.net/pbr/ -Project-URL: Source Code, https://git.openstack.org/cgit/openstack-dev/pbr/ Description: Introduction ============ diff --git a/pbr.egg-info/SOURCES.txt b/pbr.egg-info/SOURCES.txt index ff5be82..fd66c57 100644 --- a/pbr.egg-info/SOURCES.txt +++ b/pbr.egg-info/SOURCES.txt @@ -95,6 +95,7 @@ playbooks/legacy/pbr-installation-upstream-devstack/post.yaml 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/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 --git a/pbr/core.py b/pbr/core.py index a93253b..0760ab9 100644 --- a/pbr/core.py +++ b/pbr/core.py @@ -103,6 +103,16 @@ def pbr(dist, attr, value): 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 +125,8 @@ def pbr(dist, attr, value): 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 --git a/pbr/packaging.py b/pbr/packaging.py index dc0b60c..d8d3737 100644 --- a/pbr/packaging.py +++ b/pbr/packaging.py @@ -81,14 +81,16 @@ def _any_existing(file_list): 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') diff --git a/pbr/tests/test_hooks.py b/pbr/tests/test_hooks.py index 0fcf96c..3f74790 100644 --- a/pbr/tests/test_hooks.py +++ b/pbr/tests/test_hooks.py @@ -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 @@ class TestHooks(base.BaseTestCase): 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 --git a/pbr/tests/test_packaging.py b/pbr/tests/test_packaging.py index 9bd91ae..d19dd05 100644 --- a/pbr/tests/test_packaging.py +++ b/pbr/tests/test_packaging.py @@ -43,7 +43,6 @@ import email.errors import imp import os import re -import sys import sysconfig import tempfile import textwrap @@ -56,7 +55,7 @@ import testscenarios 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 @@ class TestPackagingWheels(base.BaseTestCase): 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 @@ -549,28 +548,6 @@ class ParseRequirementsTest(base.BaseTestCase): 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 --git a/releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml b/releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml new file mode 100644 index 0000000..5912332 --- /dev/null +++ b/releasenotes/notes/long-descr-content-type-f9a1003acbb8740f.yaml @@ -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 --git a/setup.cfg b/setup.cfg index 8d6451c..ac88d23 100644 --- a/setup.cfg +++ b/setup.cfg @@ -53,7 +53,7 @@ build-dir = doc/build source-dir = doc/source warning-is-error = 1 -[wheel] +[bdist_wheel] universal = 1 [egg_info] diff --git a/test-requirements.txt b/test-requirements.txt index 8fdcb83..70e4ca0 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -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 --git a/tox.ini b/tox.ini index d97e6ff..4d460d8 100644 --- a/tox.ini +++ b/tox.ini @@ -5,11 +5,15 @@ envlist = py{27,35,36},pep8,docs [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 -- 2.34.1