Imported Upstream version 59.1.1 upstream/59.1.1
authorJinWang An <jinwang.an@samsung.com>
Mon, 27 Mar 2023 08:02:38 +0000 (17:02 +0900)
committerJinWang An <jinwang.an@samsung.com>
Mon, 27 Mar 2023 08:02:38 +0000 (17:02 +0900)
.bumpversion.cfg
CHANGES.rst
pkg_resources/__init__.py
pkg_resources/tests/test_resources.py
pytest.ini
setup.cfg
setuptools/config.py
setuptools/package_index.py

index 03facc28b7a566e3a2953e43ab1e358f3c1b346b..c7a9e9c589509a98f49591801a4f6de9b47e0c91 100644 (file)
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 59.1.0
+current_version = 59.1.1
 commit = True
 tag = True
 
index 73f243c70d690b280184c63c722132042b984765..b87e4363a230de1a1c0e4247d1095cad1257ebe1 100644 (file)
@@ -1,3 +1,12 @@
+v59.1.1
+-------
+
+
+Misc
+^^^^
+* #2885: Fixed errors when encountering LegacyVersions.
+
+
 v59.1.0
 -------
 
index 4aece3c44fdecda1cdcc32b0e744cb318459dfb2..c615bc09653732b42a3c54b5abc00184c2a26cfb 100644 (file)
@@ -2015,7 +2015,7 @@ def _by_version_descending(names):
 
     >>> names = 'bar', 'foo', 'Python-2.7.10.egg', 'Python-2.7.2.egg'
     >>> _by_version_descending(names)
-    ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'foo', 'bar']
+    ['Python-2.7.10.egg', 'Python-2.7.2.egg', 'bar', 'foo']
     >>> names = 'Setuptools-1.2.3b1.egg', 'Setuptools-1.2.3.egg'
     >>> _by_version_descending(names)
     ['Setuptools-1.2.3.egg', 'Setuptools-1.2.3b1.egg']
@@ -2023,13 +2023,22 @@ def _by_version_descending(names):
     >>> _by_version_descending(names)
     ['Setuptools-1.2.3.post1.egg', 'Setuptools-1.2.3b1.egg']
     """
+    def try_parse(name):
+        """
+        Attempt to parse as a version or return a null version.
+        """
+        try:
+            return packaging.version.Version(name)
+        except Exception:
+            return packaging.version.Version('0')
+
     def _by_version(name):
         """
         Parse each component of the filename
         """
         name, ext = os.path.splitext(name)
         parts = itertools.chain(name.split('-'), [ext])
-        return [packaging.version.parse(part) for part in parts]
+        return [try_parse(part) for part in parts]
 
     return sorted(names, key=_by_version, reverse=True)
 
index 965a7c008975a5902b5052e0ca44d8da33308cf3..107dda7babc2348d1f6bd606c378dbe85074a7b7 100644 (file)
@@ -703,7 +703,7 @@ class TestParsing:
         )
 
     def test_local_version(self):
-        req, = parse_requirements('foo==1.0.org1')
+        req, = parse_requirements('foo==1.0+org1')
 
     def test_spaces_between_multiple_versions(self):
         req, = parse_requirements('foo>=1.0, <3')
index 975baf68ca3e90bdbe1388aeff6f7760b25720c5..8cc1052d1256c4025c15f315f59f6a7e2ac324a9 100644 (file)
@@ -34,7 +34,6 @@ filterwarnings=
 
        # https://github.com/pypa/setuptools/issues/2497
        ignore:.* is an invalid version and will not be supported::pkg_resources
-       ignore:Creating a LegacyVersion has been deprecated
 
        # https://github.com/pypa/setuptools/pull/2865#issuecomment-965700112
        # ideally would apply to Python 3.10+ when
index cb7281e0525a5abe29c4009139bddf8a4a221f6b..30f06b800a022da55315491317d66c394dcdf677 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,6 +1,6 @@
 [metadata]
 name = setuptools
-version = 59.1.0
+version = 59.1.1
 author = Python Packaging Authority
 author_email = distutils-sig@python.org
 description = Easily download, build, install, upgrade, and uninstall Python packages
index e3e44c25b8c9deae33144ef101f2b49f2d301f5f..b4e968e5cae9c32b6aa270e9cbdce1b598efa1b6 100644 (file)
@@ -13,7 +13,7 @@ from glob import iglob
 import contextlib
 
 from distutils.errors import DistutilsOptionError, DistutilsFileError
-from setuptools.extern.packaging.version import LegacyVersion, parse
+from setuptools.extern.packaging.version import Version, InvalidVersion
 from setuptools.extern.packaging.specifiers import SpecifierSet
 
 
@@ -585,7 +585,9 @@ class ConfigMetadataHandler(ConfigHandler):
             version = version.strip()
             # Be strict about versions loaded from file because it's easy to
             # accidentally include newlines and other unintended content
-            if isinstance(parse(version), LegacyVersion):
+            try:
+                Version(version)
+            except InvalidVersion:
                 tmpl = (
                     'Version loaded from {value} does not '
                     'comply with PEP 440: {version}'
index d818f44ade082e2e11a3f954ee28bf046ba5cf2d..270e7f3c91bb1a4e21502d9450471d658eb57c49 100644 (file)
@@ -21,7 +21,7 @@ import setuptools
 from pkg_resources import (
     CHECKOUT_DIST, Distribution, BINARY_DIST, normalize_path, SOURCE_DIST,
     Environment, find_distributions, safe_name, safe_version,
-    to_filename, Requirement, DEVELOP_DIST, EGG_DIST,
+    to_filename, Requirement, DEVELOP_DIST, EGG_DIST, parse_version,
 )
 from distutils import log
 from distutils.errors import DistutilsError
@@ -294,6 +294,14 @@ class PackageIndex(Environment):
         self.to_scan = []
         self.opener = urllib.request.urlopen
 
+    def add(self, dist):
+        # ignore invalid versions
+        try:
+            parse_version(dist.version)
+        except Exception:
+            return
+        return super().add(dist)
+
     # FIXME: 'PackageIndex.process_url' is too complex (14)
     def process_url(self, url, retrieve=False):  # noqa: C901
         """Evaluate a URL as a possible download, and maybe retrieve it"""