dev-python/pip: Sync with Gentoo

It's from Gentoo commit 603e17596a2000b7a0967370ae8b82c4a06246df.
This commit is contained in:
Flatcar Buildbot 2025-02-25 12:34:17 +01:00 committed by Krzesimir Nowak
parent d527f5c1fb
commit 2aee06f802
2 changed files with 215 additions and 1 deletions

View File

@ -0,0 +1,209 @@
diff --git a/src/pip/_internal/cli/main_parser.py b/src/pip/_internal/cli/main_parser.py
index 5ade356b9..d07dfeab8 100644
--- a/src/pip/_internal/cli/main_parser.py
+++ b/src/pip/_internal/cli/main_parser.py
@@ -80,6 +80,11 @@ def parse_command(args: List[str]) -> Tuple[str, List[str]]:
# --python
if general_options.python and "_PIP_RUNNING_IN_SUBPROCESS" not in os.environ:
+ raise CommandError(
+ "--python option is not supported on Gentoo, as it requires bundled "
+ "dependencies that have been removed to improve security"
+ )
+
# Re-invoke pip using the specified Python interpreter
interpreter = identify_python_interpreter(general_options.python)
if interpreter is None:
diff --git a/src/pip/_internal/commands/debug.py b/src/pip/_internal/commands/debug.py
index 567ca967e..427bfcf04 100644
--- a/src/pip/_internal/commands/debug.py
+++ b/src/pip/_internal/commands/debug.py
@@ -6,7 +6,6 @@ from optparse import Values
from types import ModuleType
from typing import Any, Dict, List, Optional
-import pip._vendor
from pip._vendor.certifi import where
from pip._vendor.packaging.version import parse as parse_version
@@ -192,9 +191,7 @@ class DebugCommand(Command):
show_value("REQUESTS_CA_BUNDLE", os.environ.get("REQUESTS_CA_BUNDLE"))
show_value("CURL_CA_BUNDLE", os.environ.get("CURL_CA_BUNDLE"))
show_value("pip._vendor.certifi.where()", where())
- show_value("pip._vendor.DEBUNDLED", pip._vendor.DEBUNDLED)
-
- show_vendor_versions()
+ show_value("pip._vendor.DEBUNDLED", True)
show_tags(options)
diff --git a/tests/conftest.py b/tests/conftest.py
index d093eea46..bf4d9e782 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -418,6 +418,7 @@ def _common_wheel_editable_install(
)
install_dir = tmpdir_factory.mktemp(package) / "install"
lib_install_dir = install_dir / "lib"
+ return lib_install_dir
bin_install_dir = install_dir / "bin"
with WheelFile.open(wheel_candidates[0]) as source:
install(
diff --git a/tests/functional/test_check.py b/tests/functional/test_check.py
index f50f5593e..c42e88bbe 100644
--- a/tests/functional/test_check.py
+++ b/tests/functional/test_check.py
@@ -10,10 +10,8 @@ from tests.lib import (
def matches_expected_lines(string: str, expected_lines: Collection[str]) -> bool:
# Ignore empty lines
output_lines = list(filter(None, string.splitlines()))
- # We'll match the last n lines, given n lines to match.
- last_few_output_lines = output_lines[-len(expected_lines) :]
# And order does not matter
- return set(last_few_output_lines) == set(expected_lines)
+ return set(expected_lines).issubset(set(output_lines))
def test_basic_check_clean(script: PipTestEnvironment) -> None:
diff --git a/tests/functional/test_freeze.py b/tests/functional/test_freeze.py
index 0a7cedd11..ea2fef37d 100644
--- a/tests/functional/test_freeze.py
+++ b/tests/functional/test_freeze.py
@@ -82,8 +82,8 @@ def test_basic_freeze(script: PipTestEnvironment) -> None:
result = script.pip("freeze", expect_stderr=True)
expected = textwrap.dedent(
"""\
- ...simple==2.0
- simple2==3.0...
+ ...simple==2.0...
+ ...simple2==3.0...
<BLANKLINE>"""
)
_check_output(result.stdout, expected)
@@ -1016,7 +1016,7 @@ def test_freeze_skip_work_dir_pkg(script: PipTestEnvironment) -> None:
# Freeze should not include package simple when run from package directory
result = script.pip("freeze", cwd=pkg_path)
- assert "simple" not in result.stdout
+ assert "\nsimple==" not in result.stdout
def test_freeze_include_work_dir_pkg(script: PipTestEnvironment) -> None:
diff --git a/tests/functional/test_install_check.py b/tests/functional/test_install_check.py
index 8a8a7c93a..bbda083f7 100644
--- a/tests/functional/test_install_check.py
+++ b/tests/functional/test_install_check.py
@@ -57,6 +57,7 @@ def test_check_install_canonicalization(script: PipTestEnvironment) -> None:
)
assert "requires" not in result.stderr
assert result.returncode == 0
+ return
# Double check that all errors are resolved in the end
result = script.pip("check")
diff --git a/tests/functional/test_list.py b/tests/functional/test_list.py
index e611fe7cb..c716f65c5 100644
--- a/tests/functional/test_list.py
+++ b/tests/functional/test_list.py
@@ -1,5 +1,6 @@
import json
import os
+import re
from pathlib import Path
import pytest
@@ -42,8 +43,8 @@ def test_basic_list(simple_script: PipTestEnvironment) -> None:
"""
result = simple_script.pip("list")
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_verbose_flag(simple_script: PipTestEnvironment) -> None:
@@ -55,8 +56,8 @@ def test_verbose_flag(simple_script: PipTestEnvironment) -> None:
assert "Version" in result.stdout, str(result)
assert "Location" in result.stdout, str(result)
assert "Installer" in result.stdout, str(result)
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_columns_flag(simple_script: PipTestEnvironment) -> None:
@@ -67,8 +68,8 @@ def test_columns_flag(simple_script: PipTestEnvironment) -> None:
assert "Package" in result.stdout, str(result)
assert "Version" in result.stdout, str(result)
assert "simple (1.0)" not in result.stdout, str(result)
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_format_priority(simple_script: PipTestEnvironment) -> None:
@@ -80,16 +81,16 @@ def test_format_priority(simple_script: PipTestEnvironment) -> None:
)
assert "simple==1.0" in result.stdout, str(result)
assert "simple2==3.0" in result.stdout, str(result)
- assert "simple 1.0" not in result.stdout, str(result)
- assert "simple2 3.0" not in result.stdout, str(result)
+ assert not re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert not re.search(r"simple2\s+3\.0", result.stdout), str(result)
result = simple_script.pip("list", "--format=freeze", "--format=columns")
assert "Package" in result.stdout, str(result)
assert "Version" in result.stdout, str(result)
assert "simple==1.0" not in result.stdout, str(result)
assert "simple2==3.0" not in result.stdout, str(result)
- assert "simple 1.0" in result.stdout, str(result)
- assert "simple2 3.0" in result.stdout, str(result)
+ assert re.search(r"simple\s+1\.0", result.stdout), str(result)
+ assert re.search(r"simple2\s+3\.0", result.stdout), str(result)
def test_local_flag(simple_script: PipTestEnvironment) -> None:
@@ -125,8 +126,8 @@ def test_multiple_exclude_and_normalization(
assert "Normalizable_Name" in result.stdout
assert "pip" in result.stdout
result = script.pip("list", "--exclude", "normalizablE-namE", "--exclude", "pIp")
- assert "Normalizable_Name" not in result.stdout
- assert "pip" not in result.stdout
+ assert "Normalizable_Name " not in result.stdout
+ assert "pip " not in result.stdout
@pytest.mark.network
diff --git a/tests/lib/venv.py b/tests/lib/venv.py
index fac54d3bd..6bfe3cfdc 100644
--- a/tests/lib/venv.py
+++ b/tests/lib/venv.py
@@ -9,6 +9,7 @@ import venv as _venv
from pathlib import Path
from typing import Dict, Literal, Optional, Union
+import pytest
import virtualenv as _virtualenv
VirtualEnvironmentType = Literal["virtualenv", "venv"]
@@ -35,7 +36,7 @@ class VirtualEnvironment:
self._venv_type = venv_type
else:
self._venv_type = "virtualenv"
- self._user_site_packages = False
+ self._user_site_packages = True
self._template = template
self._sitecustomize: Optional[str] = None
self._update_paths()
@@ -234,6 +235,8 @@ class VirtualEnvironment:
@user_site_packages.setter
def user_site_packages(self, value: bool) -> None:
+ if not value:
+ pytest.skip("Gentoo: skipping due to lack of system site-packages")
self._user_site_packages = value
if self._legacy_virtualenv:
marker = self.lib / "no-global-site-packages.txt"

View File

@ -75,7 +75,7 @@ python_prepare_all() {
local PATCHES=(
"${FILESDIR}/pip-23.1-no-coverage.patch"
# prepare to unbundle dependencies
"${FILESDIR}/pip-24.1-unbundle.patch"
"${FILESDIR}/pip-25.0.1-unbundle.patch"
)
distutils-r1_python_prepare_all
@ -106,6 +106,11 @@ python_compile_all() {
}
python_test() {
if ! has "${EPYTHON}" "${PYTHON_TESTED[@]/_/.}"; then
einfo "Skipping tests on ${EPYTHON}"
return 0
fi
local EPYTEST_DESELECT=(
tests/functional/test_inspect.py::test_inspect_basic
# Internet