diff options
Diffstat (limited to 'dev-python/certifi/files/certifi-3021.3.16-use-importlib.patch')
-rw-r--r-- | dev-python/certifi/files/certifi-3021.3.16-use-importlib.patch | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/dev-python/certifi/files/certifi-3021.3.16-use-importlib.patch b/dev-python/certifi/files/certifi-3021.3.16-use-importlib.patch new file mode 100644 index 000000000000..3028bfcb99cf --- /dev/null +++ b/dev-python/certifi/files/certifi-3021.3.16-use-importlib.patch @@ -0,0 +1,164 @@ +1. https://github.com/tiran/certifi-system-store/commit/6945f34b7be433dbf22946825cdb225d5d2136d5 +2. https://github.com/tiran/certifi-system-store/pull/21 + +Avoid repeated instances of https://bugs.gentoo.org/878045 when a package +has too-strict requirements and then affects other, unrelated Python +packages on the system. + +From 6945f34b7be433dbf22946825cdb225d5d2136d5 Mon Sep 17 00:00:00 2001 +From: Christian Heimes <christian@python.org> +Date: Tue, 16 Mar 2021 16:00:08 +0100 +Subject: [PATCH] Relax patch checks (#13) + +- only check that version matches, not files are identical +- compare base directories with samefile. This fixes a problem with + lib64 symlink in virtual envs. + +Signed-off-by: Christian Heimes <christian@python.org> +--- a/src/certifi/_patch.py ++++ b/src/certifi/_patch.py +@@ -28,7 +28,7 @@ def _patch_dist_info(): + except pkg_resources.DistributionNotFound: + pass + else: +- if os.path.samefile(css_dist.egg_info, certifi_dist.egg_info): ++ if certifi_dist.version == css_dist.version: + return False, css_dist.egg_info, certifi_dist.egg_info + else: + # blow away certifi's dist-info +@@ -55,7 +55,9 @@ def _patch_dist_info(): + certifi_dir = os.path.dirname(os.path.abspath(__file__)) + dist_dir = os.path.abspath(certifi_dist.egg_info) + +- if os.path.dirname(certifi_dir) != os.path.dirname(dist_dir): ++ # compare with samefile instead of string comparison to avoid false ++ # negatives caused by venv lib64 / lib symlinks ++ if not os.path.samefile(os.path.dirname(certifi_dir), os.path.dirname(dist_dir)): + raise RuntimeError( + f"'{certifi_dir} and {dist_dir} have different parent directories." + ) + +From cdec6d20b5d716d9853e72a1519a304070395498 Mon Sep 17 00:00:00 2001 +From: Christian Heimes <christian@python.org> +Date: Wed, 22 Jun 2022 10:08:18 +0200 +Subject: [PATCH] Use importlib on Python 3.8+ + +--- a/setup.cfg ++++ b/setup.cfg +@@ -38,8 +40,9 @@ packages = certifi + include_package_data = True + zip_safe = True + setup_requires = setuptools +-# hack to prevent installation on unsupported platforms Windows and macOS + install_requires = ++ setuptools; python_version < "3.8" ++ # hack to prevent installation on unsupported platforms Windows and macOS + certifi-system-store > 4000; sys_platform == "win32" or sys_platform == "darwin" + python_requires = >=3.6 + +--- a/src/certifi/_patch.py ++++ b/src/certifi/_patch.py +@@ -1,7 +1,31 @@ + import os + import shutil + import sys +-import pkg_resources ++ ++if sys.version_info >= (3, 8): ++ from importlib import metadata ++ ++ PackageNotFoundError = metadata.PackageNotFoundError ++ ++ def _get_distinfo(name): ++ dist = metadata.distribution(name) ++ egg_info = dist._path ++ return dist.version, egg_info ++ ++ def _invalidate_caches(): ++ pass ++ ++else: ++ import pkg_resources ++ ++ PackageNotFoundError = pkg_resources.DistributionNotFound ++ ++ def _get_distinfo(name): ++ dist = pkg_resources.get_distribution(name) ++ return dist.version, dist.egg_info ++ ++ def _invalidate_caches(): ++ pkg_resources.working_set.__init__() + + + def _relsymlink(target, linkname): +@@ -22,22 +46,22 @@ def _relsymlink(target, linkname): + + def _patch_dist_info(): + # distribution object for the canonical project name +- css_dist = pkg_resources.get_distribution("certifi_system_store") ++ css_version, css_egg_info = _get_distinfo("certifi_system_store") + try: +- certifi_dist = pkg_resources.get_distribution("certifi") +- except pkg_resources.DistributionNotFound: ++ certifi_version, certifi_egg_info = _get_distinfo("certifi") ++ except PackageNotFoundError: + pass + else: +- if certifi_dist.version == css_dist.version: +- return False, css_dist.egg_info, certifi_dist.egg_info ++ if certifi_version == css_version: ++ return False, css_egg_info, certifi_egg_info + else: + # blow away certifi's dist-info +- shutil.rmtree(certifi_dist.egg_info) ++ shutil.rmtree(certifi_egg_info) + # reset current working set, so pkg_resources can pick up our hack +- pkg_resources.working_set.__init__() ++ _invalidate_caches() + + # certifi-system-store's dist-info +- abs_css_distinfodir = os.path.abspath(css_dist.egg_info) ++ abs_css_distinfodir = os.path.abspath(css_egg_info) + css_basedir, css_distinfodir = os.path.split(abs_css_distinfodir) + + # certifi's dist-info in same base directory +@@ -48,12 +72,12 @@ def _patch_dist_info(): + _relsymlink(target=abs_css_distinfodir, linkname=abs_certifi_distinfodir) + + # get dist info from refreshed working set +- css_dist = pkg_resources.get_distribution("certifi_system_store") +- certifi_dist = pkg_resources.get_distribution("certifi") ++ css_version, css_egg_info = _get_distinfo("certifi_system_store") ++ certifi_version, certifi_egg_info = _get_distinfo("certifi") + + # check that certifi dist-info is in same site-packages as certifi package + certifi_dir = os.path.dirname(os.path.abspath(__file__)) +- dist_dir = os.path.abspath(certifi_dist.egg_info) ++ dist_dir = os.path.abspath(certifi_egg_info) + + # compare with samefile instead of string comparison to avoid false + # negatives caused by venv lib64 / lib symlinks +@@ -65,17 +89,17 @@ def _patch_dist_info(): + # double check versions + _verify_dist_info() + +- return True, css_dist.egg_info, certifi_dist.egg_info ++ return True, css_egg_info, certifi_egg_info + + + def _verify_dist_info(): +- css_dist = pkg_resources.get_distribution("certifi_system_store") ++ css_version, css_egg_info = _get_distinfo("certifi_system_store") + try: +- certifi_dist = pkg_resources.get_distribution("certifi") +- except pkg_resources.DistributionNotFound as e: ++ certifi_version, certifi_egg_info = _get_distinfo("certifi") ++ except PackageNotFoundError as e: + raise RuntimeError(e) + else: +- if certifi_dist.version != css_dist.version: ++ if certifi_version != css_version: + raise RuntimeError( + f"'certifi.dist-info' is not an alias to " + f"'certifi_system_store.dist-info'. " + |