diff options
author | V3n3RiX <venerix@koprulu.sector> | 2024-01-17 20:06:58 +0000 |
---|---|---|
committer | V3n3RiX <venerix@koprulu.sector> | 2024-01-17 20:06:58 +0000 |
commit | 08c5e4df7a4b66ba8dbb827ca2e3a973d4f19ab0 (patch) | |
tree | 347af25df153363454776e1fe95fc4e8100a7e7d /dev-python/pip | |
parent | fc6e577018dec28e18904f9ad5c1417976e3c728 (diff) |
gentoo auto-resync : 17:01:2024 - 20:06:58
Diffstat (limited to 'dev-python/pip')
-rw-r--r-- | dev-python/pip/Manifest | 3 | ||||
-rw-r--r-- | dev-python/pip/files/pip-23.3.2-setuptools-69.0.3.patch | 383 | ||||
-rw-r--r-- | dev-python/pip/pip-23.3.2-r1.ebuild (renamed from dev-python/pip/pip-23.3.2.ebuild) | 7 |
3 files changed, 390 insertions, 3 deletions
diff --git a/dev-python/pip/Manifest b/dev-python/pip/Manifest index c2e6ac192707..4dbfa06e57e3 100644 --- a/dev-python/pip/Manifest +++ b/dev-python/pip/Manifest @@ -1,5 +1,6 @@ AUX pip-23.1-no-coverage.patch 1836 BLAKE2B f8c95ed26d5a7cba2a516b8d134ddd9901fd7d39dc8bf174397ab2afab33e93c4af342195b5b4d7b0aedc642493f1ed2ee474c74e16e285f335dcdcf531b1777 SHA512 c63929cc5324b2a741a4c1ebb4990c376eb6a4c0f39370e456b674ce3cfbdf10471ec48cf9368fccba9264fd9d4a5667988116163e73772496f28d52986ff111 AUX pip-23.3.1-no-color.patch 1767 BLAKE2B b81a4b814e2e84e7c0424870d1a86ba7fde91400bfad127c696112544b294623ba9d580f503f01a8399a569a9a5880d38d1d09c98b9364c9b59915adb3a9b453 SHA512 c89be77fbd8049a1e6fd12ef4227926ff641c1797f91bbe91b6152016a1e7dff5e323d8ff0961948225ef854d52de972f74c8e37f48e8aee78e529f9ec8b3b3f +AUX pip-23.3.2-setuptools-69.0.3.patch 15433 BLAKE2B 9240c660580d595a182e6082446b7275c7f7b918589f731215a30b326a962668710a4aaa57877ccbeb48912a76182df9b2eb44e0868cff41e83326bd30273263 SHA512 952c30c62517eb0e60c7798d5a18fb20fe91e92816b552772a9334ed6f55d53b08f68c29c9eed30f59ce8265ce01eba8b28ea1f94c329c912f61f7afbaa2bff7 DIST pip-23.3.2.gh.tar.gz 9397451 BLAKE2B 65e656cf3e7c3ab48b5cfa48f105cae158068f3daee497edfb93e34887afa134b2cfea73574947ca22ec2664dd814034166301fb0f70322ca92852a68052be40 SHA512 976c6ab9959805f4d20d4bdedb4dabc95dd55f1ec78773f63f738599bbe44e766ad3a1394bee052a2c2386826d67686ad456726373345ba9e0d555fd251dff09 -EBUILD pip-23.3.2.ebuild 4257 BLAKE2B 2571d1af8e66e2737fc537c2657af1fbcd2f5d8f7f8a91439b1184a2363d2372de4b921b08a479347e2dc90f0f929d81d0ec4ade96b782bfbfdefa6e3aee8594 SHA512 35ff231ab4002b02fae043e3e2f8267f02820b6c63d5ebc7c78e28101b72cb63c436726c272027ffb80ab04eaf11304203919c1f572902a913b8262c5810691c +EBUILD pip-23.3.2-r1.ebuild 4330 BLAKE2B 5cc4dfd26bb1df712b6099df54e9871c0b3e65c4ca57b2c864d1fb18821d0a69de4a53335cbbf8938f8cd5d4a587471bf1ac1d52276940e4189eb51ae18ba651 SHA512 6c75f4c7190ad43571250300782da6e1835f37841ba47d1510daf5e213670ff7e9c97f5377384d04603e2d44ccba1d29fc7c86269e6b353e2e3899614a493e68 MISC metadata.xml 392 BLAKE2B 94ea3de1220cb9ca64ae1186597789cc83a54adfe44695932c07dd5065df0e5f9ee5078a495e3a12563b36809d781d8ab86bb6c92c485c023199d92547b74f27 SHA512 603199f6547105f3bb64f4fcaf004e9ef62fa2e0f8ec6eab56078119684b0f5119161e0f164fe02b2cf6dd6b115588c9ef77d727eeb6d138e281f1cb0bcb5de9 diff --git a/dev-python/pip/files/pip-23.3.2-setuptools-69.0.3.patch b/dev-python/pip/files/pip-23.3.2-setuptools-69.0.3.patch new file mode 100644 index 000000000000..26d358da9534 --- /dev/null +++ b/dev-python/pip/files/pip-23.3.2-setuptools-69.0.3.patch @@ -0,0 +1,383 @@ +From a11f98c107cae60c82c480d3208c34656a22fa19 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= <stephane.bidoul@gmail.com> +Date: Sun, 14 Jan 2024 12:54:21 +0100 +Subject: [PATCH 1/2] Change .egg-link search algorithm to support setuptools + >= 69 + +--- + src/pip/_internal/utils/egg_link.py | 28 ++++++++++++++++++---------- + 1 file changed, 18 insertions(+), 10 deletions(-) + +diff --git a/src/pip/_internal/utils/egg_link.py b/src/pip/_internal/utils/egg_link.py +index eb57ed151..4a384a636 100644 +--- a/src/pip/_internal/utils/egg_link.py ++++ b/src/pip/_internal/utils/egg_link.py +@@ -15,24 +15,31 @@ __all__ = [ + ] + + +-def _egg_link_name(raw_name: str) -> str: ++def _egg_link_names(raw_name: str) -> List[str]: + """ + Convert a Name metadata value to a .egg-link name, by applying + the same substitution as pkg_resources's safe_name function. + Note: we cannot use canonicalize_name because it has a different logic. ++ ++ We also look for the raw name (without normalization) as setuptools 69 changed ++ the way it names .egg-link files (https://github.com/pypa/setuptools/issues/4167). + """ +- return re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link" ++ return [ ++ re.sub("[^A-Za-z0-9.]+", "-", raw_name) + ".egg-link", ++ f"{raw_name}.egg-link", ++ ] + + + def egg_link_path_from_sys_path(raw_name: str) -> Optional[str]: + """ + Look for a .egg-link file for project name, by walking sys.path. + """ +- egg_link_name = _egg_link_name(raw_name) ++ egg_link_names = _egg_link_names(raw_name) + for path_item in sys.path: +- egg_link = os.path.join(path_item, egg_link_name) +- if os.path.isfile(egg_link): +- return egg_link ++ for egg_link_name in egg_link_names: ++ egg_link = os.path.join(path_item, egg_link_name) ++ if os.path.isfile(egg_link): ++ return egg_link + return None + + +@@ -64,9 +71,10 @@ def egg_link_path_from_location(raw_name: str) -> Optional[str]: + sites.append(user_site) + sites.append(site_packages) + +- egg_link_name = _egg_link_name(raw_name) ++ egg_link_names = _egg_link_names(raw_name) + for site in sites: +- egglink = os.path.join(site, egg_link_name) +- if os.path.isfile(egglink): +- return egglink ++ for egg_link_name in egg_link_names: ++ egglink = os.path.join(site, egg_link_name) ++ if os.path.isfile(egglink): ++ return egglink + return None +-- +2.43.0 + +From 6fdd838c59d92ea435766f452da515f234a438ed Mon Sep 17 00:00:00 2001 +From: Richard Si <sichard26@gmail.com> +Date: Mon, 1 Jan 2024 17:19:45 -0500 +Subject: [PATCH 2/2] Fix tests broken by Setuptools 69.0.3 which now preserves + underscores in egg_info + +More test suite fixes for setuptools 69 compatibility +--- + tests/functional/test_check.py | 20 ++++++++++++--- + tests/functional/test_freeze.py | 22 +++++++---------- + tests/functional/test_install.py | 2 +- + tests/functional/test_install_reqs.py | 2 +- + tests/functional/test_install_vcs_git.py | 2 +- + tests/functional/test_new_resolver.py | 13 +++++++--- + tests/functional/test_show.py | 19 ++++++++++++--- + tests/lib/__init__.py | 31 ++++++++++++++++++------ + 8 files changed, 75 insertions(+), 36 deletions(-) + +diff --git a/tests/functional/test_check.py b/tests/functional/test_check.py +index e2b1c60ef..79b6df39c 100644 +--- a/tests/functional/test_check.py ++++ b/tests/functional/test_check.py +@@ -119,7 +119,10 @@ def test_check_complicated_name_missing(script: PipTestEnvironment) -> None: + + # Without dependency + result = script.pip("install", "--no-index", package_a_path, "--no-deps") +- assert "Successfully installed package-A-1.0" in result.stdout, str(result) ++ assert ( ++ "Successfully installed package_A-1.0" in result.stdout ++ or "Successfully installed package-A-1.0" in result.stdout ++ ), str(result) + + result = script.pip("check", expect_error=True) + expected_lines = ("package-a 1.0 requires dependency-b, which is not installed.",) +@@ -142,7 +145,10 @@ def test_check_complicated_name_broken(script: PipTestEnvironment) -> None: + + # With broken dependency + result = script.pip("install", "--no-index", package_a_path, "--no-deps") +- assert "Successfully installed package-A-1.0" in result.stdout, str(result) ++ assert ( ++ "Successfully installed package_A-1.0" in result.stdout ++ or "Successfully installed package-A-1.0" in result.stdout ++ ), str(result) + + result = script.pip( + "install", +@@ -175,7 +181,10 @@ def test_check_complicated_name_clean(script: PipTestEnvironment) -> None: + ) + + result = script.pip("install", "--no-index", package_a_path, "--no-deps") +- assert "Successfully installed package-A-1.0" in result.stdout, str(result) ++ assert ( ++ "Successfully installed package_A-1.0" in result.stdout ++ or "Successfully installed package-A-1.0" in result.stdout ++ ), str(result) + + result = script.pip( + "install", +@@ -203,7 +212,10 @@ def test_check_considers_conditional_reqs(script: PipTestEnvironment) -> None: + ) + + result = script.pip("install", "--no-index", package_a_path, "--no-deps") +- assert "Successfully installed package-A-1.0" in result.stdout, str(result) ++ assert ( ++ "Successfully installed package_A-1.0" in result.stdout ++ or "Successfully installed package-A-1.0" in result.stdout ++ ), str(result) + + result = script.pip("check", expect_error=True) + expected_lines = ("package-a 1.0 requires dependency-b, which is not installed.",) +diff --git a/tests/functional/test_freeze.py b/tests/functional/test_freeze.py +index 9a5937df3..a8e6c038c 100644 +--- a/tests/functional/test_freeze.py ++++ b/tests/functional/test_freeze.py +@@ -221,12 +221,10 @@ def test_freeze_editable_not_vcs(script: PipTestEnvironment) -> None: + # We need to apply os.path.normcase() to the path since that is what + # the freeze code does. + expected = textwrap.dedent( +- """\ +- ...# Editable install with no version control (version-pkg==0.1) +- -e {} +- ...""".format( +- os.path.normcase(pkg_path) +- ) ++ f"""\ ++ ...# Editable install with no version control (version...pkg==0.1) ++ -e {os.path.normcase(pkg_path)} ++ ...""" + ) + _check_output(result.stdout, expected) + +@@ -248,12 +246,10 @@ def test_freeze_editable_git_with_no_remote( + # We need to apply os.path.normcase() to the path since that is what + # the freeze code does. + expected = textwrap.dedent( +- """\ +- ...# Editable Git install with no remote (version-pkg==0.1) +- -e {} +- ...""".format( +- os.path.normcase(pkg_path) +- ) ++ f"""\ ++ ...# Editable Git install with no remote (version...pkg==0.1) ++ -e {os.path.normcase(pkg_path)} ++ ...""" + ) + _check_output(result.stdout, expected) + +@@ -489,7 +485,7 @@ def test_freeze_git_remote(script: PipTestEnvironment) -> None: + expected = os.path.normcase( + textwrap.dedent( + f""" +- ...# Editable Git...(version-pkg...)... ++ ...# Editable Git...(version...pkg...)... + # '{other_remote}' + -e {repo_dir}... + """ +diff --git a/tests/functional/test_install.py b/tests/functional/test_install.py +index 140061a17..4b0a4abdf 100644 +--- a/tests/functional/test_install.py ++++ b/tests/functional/test_install.py +@@ -358,7 +358,7 @@ def test_basic_install_editable_from_svn(script: PipTestEnvironment) -> None: + checkout_path = _create_test_package(script.scratch_path) + repo_url = _create_svn_repo(script.scratch_path, checkout_path) + result = script.pip("install", "-e", "svn+" + repo_url + "#egg=version-pkg") +- result.assert_installed("version-pkg", with_files=[".svn"]) ++ result.assert_installed("version_pkg", with_files=[".svn"]) + + + def _test_install_editable_from_git(script: PipTestEnvironment) -> None: +diff --git a/tests/functional/test_install_reqs.py b/tests/functional/test_install_reqs.py +index f649be000..4e3b3e653 100644 +--- a/tests/functional/test_install_reqs.py ++++ b/tests/functional/test_install_reqs.py +@@ -300,7 +300,7 @@ def test_install_local_editable_with_subdirectory(script: PipTestEnvironment) -> + ), + ) + +- result.assert_installed("version-subpkg", sub_dir="version_subdir") ++ result.assert_installed("version_subpkg", sub_dir="version_subdir") + + + @pytest.mark.network +diff --git a/tests/functional/test_install_vcs_git.py b/tests/functional/test_install_vcs_git.py +index 2abc7aa0f..e59b269a6 100644 +--- a/tests/functional/test_install_vcs_git.py ++++ b/tests/functional/test_install_vcs_git.py +@@ -449,7 +449,7 @@ def test_git_with_ambiguous_revs(script: PipTestEnvironment) -> None: + assert "Could not find a tag or branch" not in result.stdout + # it is 'version-pkg' instead of 'version_pkg' because + # egg-link name is version-pkg.egg-link because it is a single .py module +- result.assert_installed("version-pkg", with_files=[".git"]) ++ result.assert_installed("version_pkg", with_files=[".git"]) + + + def test_editable__no_revision(script: PipTestEnvironment) -> None: +diff --git a/tests/functional/test_new_resolver.py b/tests/functional/test_new_resolver.py +index feae58a9c..c0abec686 100644 +--- a/tests/functional/test_new_resolver.py ++++ b/tests/functional/test_new_resolver.py +@@ -5,6 +5,7 @@ import textwrap + from typing import TYPE_CHECKING, Callable, Dict, List, Tuple + + import pytest ++from packaging.utils import canonicalize_name + + from tests.conftest import ScriptFactory + from tests.lib import ( +@@ -27,9 +28,13 @@ def assert_editable(script: PipTestEnvironment, *args: str) -> None: + # This simply checks whether all of the listed packages have a + # corresponding .egg-link file installed. + # TODO: Implement a more rigorous way to test for editable installations. +- egg_links = {f"{arg}.egg-link" for arg in args} +- assert egg_links <= set( +- os.listdir(script.site_packages_path) ++ egg_links = {f"{canonicalize_name(arg)}.egg-link" for arg in args} ++ actual_egg_links = { ++ f"{canonicalize_name(p.stem)}.egg-link" ++ for p in script.site_packages_path.glob("*.egg-link") ++ } ++ assert ( ++ egg_links <= actual_egg_links + ), f"{args!r} not all found in {script.site_packages_path!r}" + + +@@ -1847,7 +1852,7 @@ def test_new_resolver_succeeds_on_matching_constraint_and_requirement( + + script.assert_installed(test_pkg="0.1.0") + if editable: +- assert_editable(script, "test-pkg") ++ assert_editable(script, "test_pkg") + + + def test_new_resolver_applies_url_constraint_to_dep(script: PipTestEnvironment) -> None: +diff --git a/tests/functional/test_show.py b/tests/functional/test_show.py +index b8ec0510a..05fccbbe3 100644 +--- a/tests/functional/test_show.py ++++ b/tests/functional/test_show.py +@@ -277,7 +277,10 @@ def test_show_required_by_packages_basic( + lines = result.stdout.splitlines() + + assert "Name: simple" in lines +- assert "Required-by: requires-simple" in lines ++ assert ( ++ "Required-by: requires_simple" in lines ++ or "Required-by: requires-simple" in lines ++ ) + + + def test_show_required_by_packages_capitalized( +@@ -294,7 +297,10 @@ def test_show_required_by_packages_capitalized( + lines = result.stdout.splitlines() + + assert "Name: simple" in lines +- assert "Required-by: Requires-Capitalized" in lines ++ assert ( ++ "Required-by: Requires_Capitalized" in lines ++ or "Required-by: Requires-Capitalized" in lines ++ ) + + + def test_show_required_by_packages_requiring_capitalized( +@@ -314,8 +320,13 @@ def test_show_required_by_packages_requiring_capitalized( + lines = result.stdout.splitlines() + print(lines) + +- assert "Name: Requires-Capitalized" in lines +- assert "Required-by: requires-requires-capitalized" in lines ++ assert ( ++ "Name: Requires_Capitalized" in lines or "Name: Requires-Capitalized" in lines ++ ) ++ assert ( ++ "Required-by: requires_requires_capitalized" in lines ++ or "Required-by: requires-requires-capitalized" in lines ++ ) + + + def test_show_skip_work_dir_pkg(script: PipTestEnvironment) -> None: +diff --git a/tests/lib/__init__.py b/tests/lib/__init__.py +index d27c02e25..414926d12 100644 +--- a/tests/lib/__init__.py ++++ b/tests/lib/__init__.py +@@ -41,6 +41,7 @@ from pip._internal.models.search_scope import SearchScope + from pip._internal.models.selection_prefs import SelectionPreferences + from pip._internal.models.target_python import TargetPython + from pip._internal.network.session import PipSession ++from pip._internal.utils.egg_link import _egg_link_names + from tests.lib.venv import VirtualEnvironment + from tests.lib.wheel import make_wheel + +@@ -305,6 +306,12 @@ class TestPipResult: + def files_deleted(self) -> FoundFiles: + return FoundFiles(self._impl.files_deleted) + ++ def _get_egg_link_path_created(self, egg_link_paths: List[str]) -> Optional[str]: ++ for egg_link_path in egg_link_paths: ++ if egg_link_path in self.files_created: ++ return egg_link_path ++ return None ++ + def assert_installed( + self, + pkg_name: str, +@@ -320,7 +327,7 @@ class TestPipResult: + e = self.test_env + + if editable: +- pkg_dir = e.venv / "src" / pkg_name.lower() ++ pkg_dir = e.venv / "src" / canonicalize_name(pkg_name) + # If package was installed in a sub directory + if sub_dir: + pkg_dir = pkg_dir / sub_dir +@@ -329,22 +336,30 @@ class TestPipResult: + pkg_dir = e.site_packages / pkg_name + + if use_user_site: +- egg_link_path = e.user_site / f"{pkg_name}.egg-link" ++ egg_link_paths = [ ++ e.user_site / egg_link_name ++ for egg_link_name in _egg_link_names(pkg_name) ++ ] + else: +- egg_link_path = e.site_packages / f"{pkg_name}.egg-link" ++ egg_link_paths = [ ++ e.site_packages / egg_link_name ++ for egg_link_name in _egg_link_names(pkg_name) ++ ] + ++ egg_link_path_created = self._get_egg_link_path_created(egg_link_paths) + if without_egg_link: +- if egg_link_path in self.files_created: ++ if egg_link_path_created: + raise TestFailure( +- f"unexpected egg link file created: {egg_link_path!r}\n{self}" ++ f"unexpected egg link file created: {egg_link_path_created!r}\n" ++ f"{self}" + ) + else: +- if egg_link_path not in self.files_created: ++ if not egg_link_path_created: + raise TestFailure( +- f"expected egg link file missing: {egg_link_path!r}\n{self}" ++ f"expected egg link file missing: {egg_link_paths!r}\n{self}" + ) + +- egg_link_file = self.files_created[egg_link_path] ++ egg_link_file = self.files_created[egg_link_path_created] + egg_link_contents = egg_link_file.bytes.replace(os.linesep, "\n") + + # FIXME: I don't understand why there's a trailing . here +-- +2.43.0 + diff --git a/dev-python/pip/pip-23.3.2.ebuild b/dev-python/pip/pip-23.3.2-r1.ebuild index 0b448915d1fb..be6f9d444a4f 100644 --- a/dev-python/pip/pip-23.3.2.ebuild +++ b/dev-python/pip/pip-23.3.2-r1.ebuild @@ -10,7 +10,7 @@ PYTHON_TESTED=( python3_{10..11} ) PYTHON_COMPAT=( "${PYTHON_TESTED[@]}" python3_12 pypy3 ) PYTHON_REQ_USE="ssl(+),threads(+)" -inherit bash-completion-r1 distutils-r1 multiprocessing +inherit bash-completion-r1 distutils-r1 DESCRIPTION="The PyPA recommended tool for installing Python packages" HOMEPAGE=" @@ -59,6 +59,7 @@ python_prepare_all() { local PATCHES=( "${FILESDIR}/pip-23.1-no-coverage.patch" "${FILESDIR}/pip-23.3.1-no-color.patch" + "${FILESDIR}/${P}-setuptools-69.0.3.patch" ) distutils-r1_python_prepare_all @@ -117,7 +118,9 @@ python_test() { local -x SETUPTOOLS_USE_DISTUTILS=stdlib local -x PIP_DISABLE_PIP_VERSION_CHECK=1 - epytest -m "not network" -n "$(makeopts_jobs)" + local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 + local EPYTEST_XDIST=1 + epytest -m "not network" } python_install_all() { |