Hello community,

here is the log from the commit of package python-packaging for 
openSUSE:Factory checked in at 2020-03-27 00:20:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-packaging (Old)
 and      /work/SRC/openSUSE:Factory/.python-packaging.new.3160 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-packaging"

Fri Mar 27 00:20:05 2020 rev:15 rq:783881 version:20.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-packaging/python-packaging.changes        
2020-02-14 16:22:51.807108873 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-packaging.new.3160/python-packaging.changes  
    2020-03-27 00:20:10.172101146 +0100
@@ -1,0 +2,8 @@
+Wed Mar 11 14:37:16 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- Update to 20.3
+  * Fix a bug that caused a 32-bit OS that runs on a 64-bit ARM CPU 
+    (e.g. ARM-v8, aarch64), to report the wrong bitness.
+- Drop already upstreamed patch issue_254.patch
+
+-------------------------------------------------------------------

Old:
----
  issue_254.patch
  packaging-20.1.tar.gz

New:
----
  packaging-20.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-packaging.spec ++++++
--- /var/tmp/diff_new_pack.oUGpiI/_old  2020-03-27 00:20:11.896101982 +0100
+++ /var/tmp/diff_new_pack.oUGpiI/_new  2020-03-27 00:20:11.900101984 +0100
@@ -26,14 +26,13 @@
 %bcond_with test
 %endif
 Name:           python-packaging%{psuffix}
-Version:        20.1
+Version:        20.3
 Release:        0
 Summary:        Core utilities for Python packages
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://github.com/pypa/packaging
 Source:         
https://pypi.io/packages/source/p/packaging/packaging-%{version}.tar.gz
-Patch0:         issue_254.patch
 BuildRequires:  %{python_module six}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
@@ -56,7 +55,6 @@
 
 %prep
 %setup -q -n packaging-%{version}
-%patch0 -p1
 # sdist must provide a packaging.egg-info, used below in install phase
 test -d packaging.egg-info
 

++++++ packaging-20.1.tar.gz -> packaging-20.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/.pre-commit-config.yaml 
new/packaging-20.3/.pre-commit-config.yaml
--- old/packaging-20.1/.pre-commit-config.yaml  2020-01-06 07:17:18.000000000 
+0100
+++ new/packaging-20.3/.pre-commit-config.yaml  2020-01-28 08:07:37.000000000 
+0100
@@ -15,7 +15,7 @@
     args: []
   - id: mypy
     name: mypy for Python 2
-    exclude: '^(docs|tasks|tests)|setup\.py'
+    exclude: '^(docs|tasks|tests)|setup\.py|noxfile\.py'
     args: ['--py2']
 
 - repo: https://github.com/psf/black
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/CHANGELOG.rst 
new/packaging-20.3/CHANGELOG.rst
--- old/packaging-20.1/CHANGELOG.rst    2020-01-24 11:50:30.000000000 +0100
+++ new/packaging-20.3/CHANGELOG.rst    2020-03-05 08:48:02.000000000 +0100
@@ -1,6 +1,17 @@
 Changelog
 ---------
 
+20.3 - 2020-03-05
+~~~~~~~~~~~~~~~~~
+
+* Fix changelog for 20.2.
+
+20.2 - 2020-03-05
+~~~~~~~~~~~~~~~~~
+
+* Fix a bug that caused a 32-bit OS that runs on a 64-bit ARM CPU (e.g. ARM-v8,
+  aarch64), to report the wrong bitness.
+
 20.1 - 2020-01-24
 ~~~~~~~~~~~~~~~~~~~
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/MANIFEST.in 
new/packaging-20.3/MANIFEST.in
--- old/packaging-20.1/MANIFEST.in      2020-01-24 11:45:46.000000000 +0100
+++ new/packaging-20.3/MANIFEST.in      2020-01-27 12:17:06.000000000 +0100
@@ -4,12 +4,12 @@
 include .coveragerc
 include .flake8
 include .pre-commit-config.yaml
-include tox.ini
 
 recursive-include docs *
 recursive-include tests *.py
 recursive-include tests hello-world-*
 
+exclude noxfile.py
 exclude .travis.yml
 exclude dev-requirements.txt
 exclude tests/build-hello-world.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/PKG-INFO new/packaging-20.3/PKG-INFO
--- old/packaging-20.1/PKG-INFO 2020-01-24 11:53:36.945087400 +0100
+++ new/packaging-20.3/PKG-INFO 2020-03-05 08:48:09.689097600 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: packaging
-Version: 20.1
+Version: 20.3
 Summary: Core utilities for Python packages
 Home-page: https://github.com/pypa/packaging
 Author: Donald Stufft and individual contributors
@@ -74,6 +74,17 @@
         Changelog
         ---------
         
+        20.3 - 2020-03-05
+        ~~~~~~~~~~~~~~~~~
+        
+        * Fix changelog for 20.2.
+        
+        20.2 - 2020-03-05
+        ~~~~~~~~~~~~~~~~~
+        
+        * Fix a bug that caused a 32-bit OS that runs on a 64-bit ARM CPU 
(e.g. ARM-v8,
+          aarch64), to report the wrong bitness.
+        
         20.1 - 2020-01-24
         ~~~~~~~~~~~~~~~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/docs/development/getting-started.rst 
new/packaging-20.3/docs/development/getting-started.rst
--- old/packaging-20.1/docs/development/getting-started.rst     2020-01-24 
11:45:46.000000000 +0100
+++ new/packaging-20.3/docs/development/getting-started.rst     2020-01-27 
12:17:06.000000000 +0100
@@ -3,7 +3,7 @@
 
 Working on packaging requires the installation of a small number of
 development dependencies. To see what dependencies are required to
-run the tests manually, please look at the ``tox.ini`` file.
+run the tests manually, please look at the ``noxfile.py`` file.
 
 Running tests
 ~~~~~~~~~~~~~
@@ -16,33 +16,43 @@
 
     $ python -m pytest
     ...
-    62746 passed in 220.43 seconds
+    29204 passed, 4 skipped, 1 xfailed in 83.98 seconds
 
 This runs the tests with the default Python interpreter. This also allows
 you to run select tests instead of the entire test suite.
 
 You can also verify that the tests pass on other supported Python interpreters.
-For this we use `tox`_, which will automatically create a `virtualenv`_ for
+For this we use `nox`_, which will automatically create a `virtualenv`_ for
 each supported Python version and run the tests. For example:
 
 .. code-block:: console
 
-    $ tox
+    $ nox -s tests
     ...
-     py27: commands succeeded
-    ERROR:   pypy: InterpreterNotFound: pypy
-    ERROR:   py34: InterpreterNotFound: python3.4
-    ERROR:   py35: InterpreterNotFound: python3.5
-     py36: commands succeeded
-    ERROR:   py37: InterpreterNotFound: python3.7
-     docs: commands succeeded
-     pep8: commands succeeded
+    nox > Ran multiple sessions:
+    nox > * tests-2.7: success
+    nox > * tests-3.4: skipped
+    nox > * tests-3.5: success
+    nox > * tests-3.6: success
+    nox > * tests-3.7: success
+    nox > * tests-3.8: success
+    nox > * tests-pypy: skipped
+    nox > * tests-pypy3: skipped
 
 You may not have all the required Python versions installed, in which case you
 will see one or more ``InterpreterNotFound`` errors.
 
-If you wish to run just the linting rules, you may use `pre-commit`_.
+Running linters
+~~~~~~~~~~~~~~~
 
+If you wish to run the linting rules, you may use `pre-commit`_ or run
+``nox -s lint``.
+
+.. code-block:: console
+
+    $ nox -s lint
+    ...
+    nox > Session lint was successful.
 
 Building documentation
 ~~~~~~~~~~~~~~~~~~~~~~
@@ -50,20 +60,19 @@
 packaging documentation is stored in the ``docs/`` directory. It is
 written in `reStructured Text`_ and rendered using `Sphinx`_.
 
-Use `tox`_ to build the documentation. For example:
+Use `nox`_ to build the documentation. For example:
 
 .. code-block:: console
 
-    $ tox -e docs
+    $ nox -s docs
     ...
-    docs: commands succeeded
-    congratulations :)
+    nox > Session docs was successful.
 
 The HTML documentation index can now be found at
 ``docs/_build/html/index.html``.
 
 .. _`pytest`: https://pypi.org/project/pytest/
-.. _`tox`: https://pypi.org/project/tox/
+.. _`nox`: https://pypi.org/project/nox/
 .. _`virtualenv`: https://pypi.org/project/virtualenv/
 .. _`pip`: https://pypi.org/project/pip/
 .. _`sphinx`: https://pypi.org/project/Sphinx/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/docs/development/release-process.rst 
new/packaging-20.3/docs/development/release-process.rst
--- old/packaging-20.1/docs/development/release-process.rst     2019-12-11 
10:08:40.000000000 +0100
+++ new/packaging-20.3/docs/development/release-process.rst     2020-03-05 
08:35:23.000000000 +0100
@@ -1,35 +1,21 @@
 Release Process
 ===============
 
-#. Checkout the current ``master`` branch, with a clean working directory.
-#. Modify the ``CHANGELOG.rst`` to include changes made since the last release
-   and update the section header for the new release.
-#. Bump the version in ``packaging/__about__.py``
+#. Checkout the current ``master`` branch.
+#. Install the latest ``nox``::
 
-#. Install the latest ``setuptools``, ``wheel`` and ``twine`` packages
-   from PyPI::
+    $ pip install nox
 
-    $ pip install --upgrade setuptools wheel twine
+#. Run the release automation with the required version number (YY.N)::
 
-#. Ensure no ``dist/`` folder exists and then create the distribution files::
+    $ nox -s release -- YY.N
 
-    $ python setup.py sdist bdist_wheel
-
-#. Check the built distribution files with ``twine``::
-
-    $ twine check dist/*
-
-#. Commit the changes to ``master``.
-
-#. If all goes well, upload the build distribution files::
-
-    $ twine upload dist/*
+#. Notify the other project owners of the release.
 
-#. Create a
-   `release on GitHub <https://github.com/pypa/packaging/releases>`_ and
-   include the artifacts uploaded to PyPI.
+.. note::
 
-#. Bump the version for development in ``packaging/__about__.py`` and
-   ``CHANGELOG.rst``.
+   Access needed for making the release are:
 
-#. Notify the other project owners of the release.
+   - PyPI maintainer (or owner) access to `packaging`
+   - push directly to the `master` branch on the source repository
+   - push tags directly to the source repository
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/packaging-20.1/docs/development/submitting-patches.rst 
new/packaging-20.3/docs/development/submitting-patches.rst
--- old/packaging-20.1/docs/development/submitting-patches.rst  2020-01-24 
11:45:46.000000000 +0100
+++ new/packaging-20.3/docs/development/submitting-patches.rst  2020-01-27 
12:17:06.000000000 +0100
@@ -19,7 +19,7 @@
 ----
 
 This project's source is auto-formatted with |black|. You can check if your
-code meets our requirements by running our linters against it with ``tox -e
+code meets our requirements by running our linters against it with ``nox -s
 lint`` or ``pre-commit run --all-files``.
 
 `Write comments as complete sentences.`_
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/packaging/__about__.py 
new/packaging-20.3/packaging/__about__.py
--- old/packaging-20.1/packaging/__about__.py   2020-01-24 11:52:26.000000000 
+0100
+++ new/packaging-20.3/packaging/__about__.py   2020-03-05 08:48:02.000000000 
+0100
@@ -18,7 +18,7 @@
 __summary__ = "Core utilities for Python packages"
 __uri__ = "https://github.com/pypa/packaging";
 
-__version__ = "20.1"
+__version__ = "20.3"
 
 __author__ = "Donald Stufft and individual contributors"
 __email__ = "[email protected]"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/packaging/tags.py 
new/packaging-20.3/packaging/tags.py
--- old/packaging-20.1/packaging/tags.py        2020-01-24 11:45:51.000000000 
+0100
+++ new/packaging-20.3/packaging/tags.py        2020-02-10 11:39:55.000000000 
+0100
@@ -162,7 +162,7 @@
     # type: (PythonVersion, bool) -> List[str]
     py_version = tuple(py_version)  # To allow for version comparison.
     abis = []
-    version = "{}{}".format(*py_version[:2])
+    version = _version_nodot(py_version[:2])
     debug = pymalloc = ucs4 = ""
     with_debug = _get_config_var("Py_DEBUG", warn)
     has_refcount = hasattr(sys, "gettotalrefcount")
@@ -221,10 +221,7 @@
     if not python_version:
         python_version = sys.version_info[:2]
 
-    if len(python_version) < 2:
-        interpreter = "cp{}".format(python_version[0])
-    else:
-        interpreter = "cp{}{}".format(*python_version[:2])
+    interpreter = "cp{}".format(_version_nodot(python_version[:2]))
 
     if abis is None:
         if len(python_version) > 1:
@@ -252,8 +249,8 @@
     if _abi3_applies(python_version):
         for minor_version in range(python_version[1] - 1, 1, -1):
             for platform_ in platforms:
-                interpreter = "cp{major}{minor}".format(
-                    major=python_version[0], minor=minor_version
+                interpreter = "cp{version}".format(
+                    version=_version_nodot((python_version[0], minor_version))
                 )
                 yield Tag(interpreter, "abi3", platform_)
 
@@ -305,11 +302,11 @@
     all previous versions of that major version.
     """
     if len(py_version) > 1:
-        yield "py{major}{minor}".format(major=py_version[0], 
minor=py_version[1])
+        yield "py{version}".format(version=_version_nodot(py_version[:2]))
     yield "py{major}".format(major=py_version[0])
     if len(py_version) > 1:
         for minor in range(py_version[1] - 1, -1, -1):
-            yield "py{major}{minor}".format(major=py_version[0], minor=minor)
+            yield "py{version}".format(version=_version_nodot((py_version[0], 
minor)))
 
 
 def compatible_tags(
@@ -636,8 +633,11 @@
 def _linux_platforms(is_32bit=_32_BIT_INTERPRETER):
     # type: (bool) -> Iterator[str]
     linux = _normalize_string(distutils.util.get_platform())
-    if linux == "linux_x86_64" and is_32bit:
-        linux = "linux_i686"
+    if is_32bit:
+        if linux == "linux_x86_64":
+            linux = "linux_i686"
+        elif linux == "linux_aarch64":
+            linux = "linux_armv7l"
     manylinux_support = []
     _, arch = linux.split("_", 1)
     if _have_compatible_manylinux_abi(arch):
@@ -704,10 +704,19 @@
     if version:
         version = str(version)
     else:
-        version = "".join(map(str, sys.version_info[:2]))
+        version = _version_nodot(sys.version_info[:2])
     return version
 
 
+def _version_nodot(version):
+    # type: (PythonVersion) -> str
+    if any(v >= 10 for v in version):
+        sep = "_"
+    else:
+        sep = ""
+    return sep.join(map(str, version))
+
+
 def sys_tags(**kwargs):
     # type: (bool) -> Iterator[Tag]
     """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/packaging.egg-info/PKG-INFO 
new/packaging-20.3/packaging.egg-info/PKG-INFO
--- old/packaging-20.1/packaging.egg-info/PKG-INFO      2020-01-24 
11:53:36.000000000 +0100
+++ new/packaging-20.3/packaging.egg-info/PKG-INFO      2020-03-05 
08:48:09.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.1
 Name: packaging
-Version: 20.1
+Version: 20.3
 Summary: Core utilities for Python packages
 Home-page: https://github.com/pypa/packaging
 Author: Donald Stufft and individual contributors
@@ -74,6 +74,17 @@
         Changelog
         ---------
         
+        20.3 - 2020-03-05
+        ~~~~~~~~~~~~~~~~~
+        
+        * Fix changelog for 20.2.
+        
+        20.2 - 2020-03-05
+        ~~~~~~~~~~~~~~~~~
+        
+        * Fix a bug that caused a 32-bit OS that runs on a 64-bit ARM CPU 
(e.g. ARM-v8,
+          aarch64), to report the wrong bitness.
+        
         20.1 - 2020-01-24
         ~~~~~~~~~~~~~~~~~~~
         
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/packaging.egg-info/SOURCES.txt 
new/packaging-20.3/packaging.egg-info/SOURCES.txt
--- old/packaging-20.1/packaging.egg-info/SOURCES.txt   2020-01-24 
11:53:36.000000000 +0100
+++ new/packaging-20.3/packaging.egg-info/SOURCES.txt   2020-03-05 
08:48:09.000000000 +0100
@@ -10,7 +10,6 @@
 README.rst
 setup.cfg
 setup.py
-tox.ini
 docs/Makefile
 docs/changelog.rst
 docs/conf.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/tests/test_tags.py 
new/packaging-20.3/tests/test_tags.py
--- old/packaging-20.1/tests/test_tags.py       2020-01-24 11:45:51.000000000 
+0100
+++ new/packaging-20.3/tests/test_tags.py       2020-02-10 11:39:55.000000000 
+0100
@@ -38,11 +38,6 @@
 
 
 @pytest.fixture
-def is_64bit_os():
-    return platform.architecture()[0] == "64bit"
-
-
[email protected]
 def manylinux_module(monkeypatch):
     monkeypatch.setattr(tags, "_have_compatible_glibc", lambda *args: False)
     module_name = "_manylinux"
@@ -196,10 +191,20 @@
         monkeypatch.setattr(tags, "_get_config_var", lambda var, warn: "NN")
         assert tags.interpreter_version() == "NN"
 
-    def test_sys_version_info(self, monkeypatch):
+    @pytest.mark.parametrize(
+        "version_info,version_str",
+        [
+            ((1, 2, 3), "12"),
+            ((1, 12, 3), "1_12"),
+            ((11, 2, 3), "11_2"),
+            ((11, 12, 3), "11_12"),
+            ((1, 2, 13), "12"),
+        ],
+    )
+    def test_sys_version_info(self, version_info, version_str, monkeypatch):
         monkeypatch.setattr(tags, "_get_config_var", lambda *args, **kwargs: 
None)
-        monkeypatch.setattr(sys, "version_info", ("L", "M", "N"))
-        assert tags.interpreter_version() == "LM"
+        monkeypatch.setattr(sys, "version_info", version_info)
+        assert tags.interpreter_version() == version_str
 
 
 class TestMacOSPlatforms:
@@ -415,19 +420,22 @@
         monkeypatch.setattr(tags, "_glibc_version_string", lambda: None)
         assert not tags._have_compatible_glibc(2, 4)
 
-    def test_linux_platforms_64bit_on_64bit_os(self, is_64bit_os, is_x86, 
monkeypatch):
-        if platform.system() != "Linux" or not is_64bit_os or not is_x86:
-            monkeypatch.setattr(distutils.util, "get_platform", lambda: 
"linux_x86_64")
-            monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda 
*args: False)
-        linux_platform = list(tags._linux_platforms(is_32bit=False))[-1]
-        assert linux_platform == "linux_x86_64"
-
-    def test_linux_platforms_32bit_on_64bit_os(self, is_64bit_os, is_x86, 
monkeypatch):
-        if platform.system() != "Linux" or not is_64bit_os or not is_x86:
-            monkeypatch.setattr(distutils.util, "get_platform", lambda: 
"linux_x86_64")
-            monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda 
*args: False)
-        linux_platform = list(tags._linux_platforms(is_32bit=True))[-1]
-        assert linux_platform == "linux_i686"
+    @pytest.mark.parametrize(
+        "arch,is_32bit,expected",
+        [
+            ("linux-x86_64", False, "linux_x86_64"),
+            ("linux-x86_64", True, "linux_i686"),
+            ("linux-aarch64", False, "linux_aarch64"),
+            ("linux-aarch64", True, "linux_armv7l"),
+        ],
+    )
+    def test_linux_platforms_32_64bit_on_64bit_os(
+        self, arch, is_32bit, expected, monkeypatch
+    ):
+        monkeypatch.setattr(distutils.util, "get_platform", lambda: arch)
+        monkeypatch.setattr(tags, "_is_manylinux_compatible", lambda *args: 
False)
+        linux_platform = list(tags._linux_platforms(is_32bit=is_32bit))[-1]
+        assert linux_platform == expected
 
     def test_linux_platforms_manylinux_unsupported(self, monkeypatch):
         monkeypatch.setattr(distutils.util, "get_platform", lambda: 
"linux_x86_64")
@@ -435,37 +443,43 @@
         linux_platform = list(tags._linux_platforms(is_32bit=False))
         assert linux_platform == ["linux_x86_64"]
 
-    def test_linux_platforms_manylinux1(self, monkeypatch):
+    def test_linux_platforms_manylinux1(self, is_x86, monkeypatch):
         monkeypatch.setattr(
             tags, "_is_manylinux_compatible", lambda name, _: name == 
"manylinux1"
         )
-        if platform.system() != "Linux":
+        if platform.system() != "Linux" or not is_x86:
             monkeypatch.setattr(distutils.util, "get_platform", lambda: 
"linux_x86_64")
+            monkeypatch.setattr(platform, "machine", lambda: "x86_64")
         platforms = list(tags._linux_platforms(is_32bit=False))
-        assert platforms == ["manylinux1_x86_64", "linux_x86_64"]
+        arch = platform.machine()
+        assert platforms == ["manylinux1_" + arch, "linux_" + arch]
 
-    def test_linux_platforms_manylinux2010(self, monkeypatch):
+    def test_linux_platforms_manylinux2010(self, is_x86, monkeypatch):
         monkeypatch.setattr(
             tags, "_is_manylinux_compatible", lambda name, _: name == 
"manylinux2010"
         )
-        if platform.system() != "Linux":
+        if platform.system() != "Linux" or not is_x86:
             monkeypatch.setattr(distutils.util, "get_platform", lambda: 
"linux_x86_64")
+            monkeypatch.setattr(platform, "machine", lambda: "x86_64")
         platforms = list(tags._linux_platforms(is_32bit=False))
-        expected = ["manylinux2010_x86_64", "manylinux1_x86_64", 
"linux_x86_64"]
+        arch = platform.machine()
+        expected = ["manylinux2010_" + arch, "manylinux1_" + arch, "linux_" + 
arch]
         assert platforms == expected
 
-    def test_linux_platforms_manylinux2014(self, monkeypatch):
+    def test_linux_platforms_manylinux2014(self, is_x86, monkeypatch):
         monkeypatch.setattr(
             tags, "_is_manylinux_compatible", lambda name, _: name == 
"manylinux2014"
         )
-        if platform.system() != "Linux":
+        if platform.system() != "Linux" or not is_x86:
             monkeypatch.setattr(distutils.util, "get_platform", lambda: 
"linux_x86_64")
+            monkeypatch.setattr(platform, "machine", lambda: "x86_64")
         platforms = list(tags._linux_platforms(is_32bit=False))
+        arch = platform.machine()
         expected = [
-            "manylinux2014_x86_64",
-            "manylinux2010_x86_64",
-            "manylinux1_x86_64",
-            "linux_x86_64",
+            "manylinux2014_" + arch,
+            "manylinux2010_" + arch,
+            "manylinux1_" + arch,
+            "linux_" + arch,
         ]
         assert platforms == expected
 
@@ -687,7 +701,7 @@
         config = {"Py_DEBUG": 0, "WITH_PYMALLOC": 0, "Py_UNICODE_SIZE": 
unicode_size}
         monkeypatch.setattr(sysconfig, "get_config_var", config.__getitem__)
         monkeypatch.setattr(sys, "maxunicode", maxunicode)
-        base_abi = "cp{}{}".format(version[0], version[1])
+        base_abi = "cp" + tags._version_nodot(version)
         expected = [base_abi + "u" if result else base_abi]
         assert tags._cpython_abis(version) == expected
 
@@ -697,10 +711,42 @@
         result_iterator = tags.cpython_tags(
             (3, 8), ["cp38d", "cp38"], ["plat1", "plat2"]
         )
-        isinstance(result_iterator, collections_abc.Iterator)
+        assert isinstance(result_iterator, collections_abc.Iterator)
 
     def test_all_args(self):
         result_iterator = tags.cpython_tags(
+            (3, 11), ["cp3_11d", "cp3_11"], ["plat1", "plat2"]
+        )
+        result = list(result_iterator)
+        assert result == [
+            tags.Tag("cp3_11", "cp3_11d", "plat1"),
+            tags.Tag("cp3_11", "cp3_11d", "plat2"),
+            tags.Tag("cp3_11", "cp3_11", "plat1"),
+            tags.Tag("cp3_11", "cp3_11", "plat2"),
+            tags.Tag("cp3_11", "abi3", "plat1"),
+            tags.Tag("cp3_11", "abi3", "plat2"),
+            tags.Tag("cp3_11", "none", "plat1"),
+            tags.Tag("cp3_11", "none", "plat2"),
+            tags.Tag("cp3_10", "abi3", "plat1"),
+            tags.Tag("cp3_10", "abi3", "plat2"),
+            tags.Tag("cp39", "abi3", "plat1"),
+            tags.Tag("cp39", "abi3", "plat2"),
+            tags.Tag("cp38", "abi3", "plat1"),
+            tags.Tag("cp38", "abi3", "plat2"),
+            tags.Tag("cp37", "abi3", "plat1"),
+            tags.Tag("cp37", "abi3", "plat2"),
+            tags.Tag("cp36", "abi3", "plat1"),
+            tags.Tag("cp36", "abi3", "plat2"),
+            tags.Tag("cp35", "abi3", "plat1"),
+            tags.Tag("cp35", "abi3", "plat2"),
+            tags.Tag("cp34", "abi3", "plat1"),
+            tags.Tag("cp34", "abi3", "plat2"),
+            tags.Tag("cp33", "abi3", "plat1"),
+            tags.Tag("cp33", "abi3", "plat2"),
+            tags.Tag("cp32", "abi3", "plat1"),
+            tags.Tag("cp32", "abi3", "plat2"),
+        ]
+        result_iterator = tags.cpython_tags(
             (3, 8), ["cp38d", "cp38"], ["plat1", "plat2"]
         )
         result = list(result_iterator)
@@ -726,6 +772,7 @@
             tags.Tag("cp32", "abi3", "plat1"),
             tags.Tag("cp32", "abi3", "plat2"),
         ]
+
         result = list(tags.cpython_tags((3, 3), ["cp33m"], ["plat1", "plat2"]))
         assert result == [
             tags.Tag("cp33", "cp33m", "plat1"),
@@ -740,7 +787,7 @@
 
     def test_python_version_defaults(self):
         tag = next(tags.cpython_tags(abis=["abi3"], platforms=["any"]))
-        interpreter = "cp{}{}".format(*sys.version_info[:2])
+        interpreter = "cp" + tags._version_nodot(sys.version_info[:2])
         assert interpreter == tag.interpreter
 
     def test_abi_defaults(self, monkeypatch):
@@ -750,11 +797,23 @@
         assert tags.Tag("cp38", "abi3", "any") in result
         assert tags.Tag("cp38", "none", "any") in result
 
+    def test_abi_defaults_needs_underscore(self, monkeypatch):
+        monkeypatch.setattr(tags, "_cpython_abis", lambda _1, _2: ["cp3_11"])
+        result = list(tags.cpython_tags((3, 11), platforms=["any"]))
+        assert tags.Tag("cp3_11", "cp3_11", "any") in result
+        assert tags.Tag("cp3_11", "abi3", "any") in result
+        assert tags.Tag("cp3_11", "none", "any") in result
+
     def test_platforms_defaults(self, monkeypatch):
         monkeypatch.setattr(tags, "_platform_tags", lambda: ["plat1"])
         result = list(tags.cpython_tags((3, 8), abis=["whatever"]))
         assert tags.Tag("cp38", "whatever", "plat1") in result
 
+    def test_platforms_defaults_needs_underscore(self, monkeypatch):
+        monkeypatch.setattr(tags, "_platform_tags", lambda: ["plat1"])
+        result = list(tags.cpython_tags((3, 11), abis=["whatever"]))
+        assert tags.Tag("cp3_11", "whatever", "plat1") in result
+
     def test_major_only_python_version(self):
         result = list(tags.cpython_tags((3,), ["abi"], ["plat"]))
         assert result == [
@@ -890,6 +949,51 @@
             tags.Tag("py30", "none", "any"),
         ]
 
+    def test_all_args_needs_underscore(self):
+        result = list(tags.compatible_tags((3, 11), "cp3_11", ["plat1", 
"plat2"]))
+        assert result == [
+            tags.Tag("py3_11", "none", "plat1"),
+            tags.Tag("py3_11", "none", "plat2"),
+            tags.Tag("py3", "none", "plat1"),
+            tags.Tag("py3", "none", "plat2"),
+            tags.Tag("py3_10", "none", "plat1"),
+            tags.Tag("py3_10", "none", "plat2"),
+            tags.Tag("py39", "none", "plat1"),
+            tags.Tag("py39", "none", "plat2"),
+            tags.Tag("py38", "none", "plat1"),
+            tags.Tag("py38", "none", "plat2"),
+            tags.Tag("py37", "none", "plat1"),
+            tags.Tag("py37", "none", "plat2"),
+            tags.Tag("py36", "none", "plat1"),
+            tags.Tag("py36", "none", "plat2"),
+            tags.Tag("py35", "none", "plat1"),
+            tags.Tag("py35", "none", "plat2"),
+            tags.Tag("py34", "none", "plat1"),
+            tags.Tag("py34", "none", "plat2"),
+            tags.Tag("py33", "none", "plat1"),
+            tags.Tag("py33", "none", "plat2"),
+            tags.Tag("py32", "none", "plat1"),
+            tags.Tag("py32", "none", "plat2"),
+            tags.Tag("py31", "none", "plat1"),
+            tags.Tag("py31", "none", "plat2"),
+            tags.Tag("py30", "none", "plat1"),
+            tags.Tag("py30", "none", "plat2"),
+            tags.Tag("cp3_11", "none", "any"),
+            tags.Tag("py3_11", "none", "any"),
+            tags.Tag("py3", "none", "any"),
+            tags.Tag("py3_10", "none", "any"),
+            tags.Tag("py39", "none", "any"),
+            tags.Tag("py38", "none", "any"),
+            tags.Tag("py37", "none", "any"),
+            tags.Tag("py36", "none", "any"),
+            tags.Tag("py35", "none", "any"),
+            tags.Tag("py34", "none", "any"),
+            tags.Tag("py33", "none", "any"),
+            tags.Tag("py32", "none", "any"),
+            tags.Tag("py31", "none", "any"),
+            tags.Tag("py30", "none", "any"),
+        ]
+
     def test_major_only_python_version(self):
         result = list(tags.compatible_tags((3,), "cp33", ["plat"]))
         assert result == [
@@ -911,6 +1015,39 @@
             tags.Tag("py30", "none", "any"),
         ]
 
+    def test_default_python_version_needs_underscore(self, monkeypatch):
+        monkeypatch.setattr(sys, "version_info", (3, 11))
+        result = list(tags.compatible_tags(interpreter="cp3_11", 
platforms=["plat"]))
+        assert result == [
+            tags.Tag("py3_11", "none", "plat"),
+            tags.Tag("py3", "none", "plat"),
+            tags.Tag("py3_10", "none", "plat"),
+            tags.Tag("py39", "none", "plat"),
+            tags.Tag("py38", "none", "plat"),
+            tags.Tag("py37", "none", "plat"),
+            tags.Tag("py36", "none", "plat"),
+            tags.Tag("py35", "none", "plat"),
+            tags.Tag("py34", "none", "plat"),
+            tags.Tag("py33", "none", "plat"),
+            tags.Tag("py32", "none", "plat"),
+            tags.Tag("py31", "none", "plat"),
+            tags.Tag("py30", "none", "plat"),
+            tags.Tag("cp3_11", "none", "any"),
+            tags.Tag("py3_11", "none", "any"),
+            tags.Tag("py3", "none", "any"),
+            tags.Tag("py3_10", "none", "any"),
+            tags.Tag("py39", "none", "any"),
+            tags.Tag("py38", "none", "any"),
+            tags.Tag("py37", "none", "any"),
+            tags.Tag("py36", "none", "any"),
+            tags.Tag("py35", "none", "any"),
+            tags.Tag("py34", "none", "any"),
+            tags.Tag("py33", "none", "any"),
+            tags.Tag("py32", "none", "any"),
+            tags.Tag("py31", "none", "any"),
+            tags.Tag("py30", "none", "any"),
+        ]
+
     def test_default_interpreter(self):
         result = list(tags.compatible_tags((3, 1), platforms=["plat"]))
         assert result == [
@@ -962,14 +1099,10 @@
         result = list(tags.sys_tags())
         assert len(abis) == 1
         assert result[0] == tags.Tag(
-            "cp{major}{minor}".format(
-                major=sys.version_info[0], minor=sys.version_info[1]
-            ),
-            abis[0],
-            platforms[0],
+            "cp" + tags._version_nodot(sys.version_info[:2]), abis[0], 
platforms[0]
         )
         assert result[-1] == tags.Tag(
-            "py{}0".format(sys.version_info[0]), "none", "any"
+            "py" + tags._version_nodot((sys.version_info[0], 0)), "none", "any"
         )
 
     def test_windows_cpython(self, mock_interpreter_name, monkeypatch):
@@ -981,13 +1114,13 @@
         abis = list(tags._cpython_abis(sys.version_info[:2]))
         platforms = list(tags._generic_platforms())
         result = list(tags.sys_tags())
-        interpreter = "cp{major}{minor}".format(
-            major=sys.version_info[0], minor=sys.version_info[1]
-        )
+        interpreter = "cp" + tags._version_nodot(sys.version_info[:2])
         assert len(abis) == 1
         expected = tags.Tag(interpreter, abis[0], platforms[0])
         assert result[0] == expected
-        expected = tags.Tag("py{}0".format(sys.version_info[0]), "none", "any")
+        expected = tags.Tag(
+            "py" + tags._version_nodot((sys.version_info[0], 0)), "none", "any"
+        )
         assert result[-1] == expected
 
     def test_linux_cpython(self, mock_interpreter_name, monkeypatch):
@@ -999,12 +1132,12 @@
         abis = list(tags._cpython_abis(sys.version_info[:2]))
         platforms = list(tags._linux_platforms())
         result = list(tags.sys_tags())
-        expected_interpreter = "cp{major}{minor}".format(
-            major=sys.version_info[0], minor=sys.version_info[1]
-        )
+        expected_interpreter = "cp" + tags._version_nodot(sys.version_info[:2])
         assert len(abis) == 1
         assert result[0] == tags.Tag(expected_interpreter, abis[0], 
platforms[0])
-        expected = tags.Tag("py{}0".format(sys.version_info[0]), "none", "any")
+        expected = tags.Tag(
+            "py" + tags._version_nodot((sys.version_info[0], 0)), "none", "any"
+        )
         assert result[-1] == expected
 
     def test_generic(self, monkeypatch):
@@ -1012,5 +1145,7 @@
         monkeypatch.setattr(tags, "interpreter_name", lambda: "generic")
 
         result = list(tags.sys_tags())
-        expected = tags.Tag("py{}0".format(sys.version_info[0]), "none", "any")
+        expected = tags.Tag(
+            "py" + tags._version_nodot((sys.version_info[0], 0)), "none", "any"
+        )
         assert result[-1] == expected
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/packaging-20.1/tox.ini new/packaging-20.3/tox.ini
--- old/packaging-20.1/tox.ini  2020-01-24 11:45:46.000000000 +0100
+++ new/packaging-20.3/tox.ini  1970-01-01 01:00:00.000000000 +0100
@@ -1,43 +0,0 @@
-[tox]
-envlist = py27,pypy,pypy3,py34,py35,py36,py37,py38,docs,lint
-
-[testenv]
-deps =
-    coverage<5.0.0
-    pretend
-    pytest
-    pip>=9.0.2
-commands =
-    python -m coverage run --source packaging/ -m pytest --strict {posargs} 
tests
-    python -m coverage report -m --fail-under 100
-
-[testenv:pypy]
-commands =
-    pytest --capture=no --strict {posargs} tests
-
-[testenv:pypy3]
-commands =
-    pytest --capture=no --strict {posargs} tests
-
-[testenv:lint]
-basepython=python3
-deps =
-    pre-commit
-    readme_renderer
-    setuptools
-    twine
-    wheel
-commands =
-    pre-commit run --all-files
-    python setup.py --quiet sdist bdist_wheel
-    twine check dist/*
-
-[testenv:docs]
-basepython = python3
-deps =
-    sphinx
-    sphinx_rtd_theme
-commands =
-    sphinx-build -W -b html -d {envtmpdir}/doctrees docs docs/_build/html
-    sphinx-build -W -b latex -d {envtmpdir}/doctrees docs docs/_build/latex
-    sphinx-build -W -b doctest -d {envtmpdir}/doctrees docs docs/_build/html


Reply via email to