diff --git a/sdk_container/src/third_party/portage-stable/dev-python/pip/Manifest b/sdk_container/src/third_party/portage-stable/dev-python/pip/Manifest index 5b892dfc3c..91bf1f520d 100644 --- a/sdk_container/src/third_party/portage-stable/dev-python/pip/Manifest +++ b/sdk_container/src/third_party/portage-stable/dev-python/pip/Manifest @@ -1,3 +1,4 @@ DIST pip-24.1.gh.tar.gz 9188658 BLAKE2B 4a43ff0199d811dd30461e376f655a447f3f706a48dd97fe1d0ccf630f558e72209ccd06d98949a1541cd6b2942a816db23ce8aaa7fbbf9aef429502fb91ab92 SHA512 c60ab329fe91202ff64b5f0f90209085fbf8db0f0a05f0703f952ad69e39e2e3edb5dadc006a3f317cdd4ba4fb5abe56dfbd22792249a2d139702eec272186d1 DIST pip-25.0.1.gh.tar.gz 9224526 BLAKE2B db729b8c75d8e15c6fed1dbc9e08adc4e82114f2bbd953859ec03c7948e521629afd8cea6adb08110b987d6adf48fd600a59a3bcc27774db61ea92675ad90d42 SHA512 a6850c8567082bbf98483a45e523c4de12132136d2b0aa388ac619c02ffd0c8f6aea7d727f7d84167dadec5f1e56dd478b2233b0caa5d9b3e5cadc9e1f3dc12c +DIST pip-25.1.1.gh.tar.gz 9219969 BLAKE2B eb443451deeb71888c2fc56ac5c8cb2d0515ec0efff975fab98cfa65d1fc5e66948243b3acebf1f4b0446e46082abb9fd350816579a4f5af1292c160490ce930 SHA512 ce61c9861265139b3c5ea9be9dc246097cd75c21687cf8301f80a377d02420c4524f0d6307d2ca0232ff8715b1105343bcfdb9cac6b69503780ab2c4645558dc DIST pip-25.1.gh.tar.gz 9220205 BLAKE2B 3e719b180dd4f039a1bf15cdd2686fdc270e842e4b9ab416306bf9ea40c037541df05af78239fe067dfa3edc27b7370ea04c1d9cec43cc6cfd2f9e8f347f41ee SHA512 d6b93aeabe6a4e046caf85c028fca380936ab65cb3c5028a7fa7dbc61cef2cf7d0c46c499fe548dc0af8f7bc30f7ecace8f257b20a60c0cc905b531f193b5a9d diff --git a/sdk_container/src/third_party/portage-stable/dev-python/pip/files/pip-25.1-tomli-dep.patch b/sdk_container/src/third_party/portage-stable/dev-python/pip/files/pip-25.1-tomli-dep.patch new file mode 100644 index 0000000000..780d9a84ad --- /dev/null +++ b/sdk_container/src/third_party/portage-stable/dev-python/pip/files/pip-25.1-tomli-dep.patch @@ -0,0 +1,76 @@ +From 23d20ea18ab4e43a4a4cb2b721d818a8dcd62542 Mon Sep 17 00:00:00 2001 +From: Eli Schwartz +Date: Mon, 28 Apr 2025 11:42:02 -0400 +Subject: [PATCH] Fix new dependency-groups feature to use the stdlib tomllib + where possible + +Previously, commit 88c9f31ad8a5ffe0bb31ab500b8ddd1b9ff6a5dd modified pip +to use the stdlib on versions of python where this module is in the +stdlib. As justified there: + +Although a tomli copy is vendored, doing this conditional import allows: +- automatically upgrading the code, when the time comes to drop py3.10 + support + +- slightly simplifying debundling support, as it's no longer necessary + to depend on a tomli(-wheel)? package on sufficiently newer versions + of python. + +https://github.com/pypa/pip/pull/13065 added a new feature, including a +vendored "dependency_groups" library that likewise supports using the +stdlib tomllib via `dependency_groups/_toml_compat.py`. But the code in +pip itself to use dependency_groups manually loads pyproject.toml and +passes it to dependency_groups, and fails to use the same compatibility +dispatch as both the pre-existing pip code and dependency_groups itself. + +Add back the conditional logic. +--- + news/13356.vendor.rst | 1 + + src/pip/_internal/req/req_dependency_group.py | 11 ++++++++--- + tests/unit/test_req_dependency_group.py | 2 +- + 3 files changed, 10 insertions(+), 4 deletions(-) + create mode 100644 news/13356.vendor.rst + +diff --git a/src/pip/_internal/req/req_dependency_group.py b/src/pip/_internal/req/req_dependency_group.py +index 8f124de5b81..e81dd45522a 100644 +--- a/src/pip/_internal/req/req_dependency_group.py ++++ b/src/pip/_internal/req/req_dependency_group.py +@@ -1,6 +1,11 @@ ++import sys + from typing import Any, Dict, Iterable, Iterator, List, Tuple + +-from pip._vendor import tomli ++if sys.version_info >= (3, 11): ++ import tomllib ++else: ++ from pip._vendor import tomli as tomllib ++ + from pip._vendor.dependency_groups import DependencyGroupResolver + + from pip._internal.exceptions import InstallationError +@@ -65,10 +70,10 @@ def _load_pyproject(path: str) -> Dict[str, Any]: + """ + try: + with open(path, "rb") as fp: +- return tomli.load(fp) ++ return tomllib.load(fp) + except FileNotFoundError: + raise InstallationError(f"{path} not found. Cannot resolve '--group' option.") +- except tomli.TOMLDecodeError as e: ++ except tomllib.TOMLDecodeError as e: + raise InstallationError(f"Error parsing {path}: {e}") from e + except OSError as e: + raise InstallationError(f"Error reading {path}: {e}") from e +diff --git a/tests/unit/test_req_dependency_group.py b/tests/unit/test_req_dependency_group.py +index b596f6fc5d7..1b180f8d7f8 100644 +--- a/tests/unit/test_req_dependency_group.py ++++ b/tests/unit/test_req_dependency_group.py +@@ -120,7 +120,7 @@ def epipe_toml_load(*args: Any, **kwargs: Any) -> None: + raise OSError(errno.EPIPE, "Broken pipe") + + monkeypatch.setattr( +- "pip._internal.req.req_dependency_group.tomli.load", epipe_toml_load ++ "pip._internal.req.req_dependency_group.tomllib.load", epipe_toml_load + ) + + with pytest.raises(InstallationError, match=r"Error reading pyproject\.toml"): diff --git a/sdk_container/src/third_party/portage-stable/dev-python/pip/pip-25.1.ebuild b/sdk_container/src/third_party/portage-stable/dev-python/pip/pip-25.1-r1.ebuild similarity index 98% rename from sdk_container/src/third_party/portage-stable/dev-python/pip/pip-25.1.ebuild rename to sdk_container/src/third_party/portage-stable/dev-python/pip/pip-25.1-r1.ebuild index 0ae9fd71e7..f85c41d9f5 100644 --- a/sdk_container/src/third_party/portage-stable/dev-python/pip/pip-25.1.ebuild +++ b/sdk_container/src/third_party/portage-stable/dev-python/pip/pip-25.1-r1.ebuild @@ -53,7 +53,7 @@ BDEPEND=" test? ( $(python_gen_cond_dep ' dev-python/ensurepip-setuptools - completion.bash || die + "${EPYTHON}" -c "${pipcmd}" completion --zsh > completion.zsh || die +} + +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 + tests/functional/test_config_settings.py::test_backend_sees_config_via_sdist + tests/functional/test_install.py::test_double_install_fail + tests/functional/test_install.py::test_install_sdist_links + tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed + tests/functional/test_lock.py::test_lock_archive + tests/functional/test_lock.py::test_lock_vcs + # broken by system site-packages use + tests/functional/test_freeze.py::test_freeze_with_setuptools + tests/functional/test_pip_runner_script.py::test_runner_work_in_environments_with_no_pip + tests/functional/test_uninstall.py::test_basic_uninstall_distutils + tests/unit/test_base_command.py::test_base_command_global_tempdir_cleanup + tests/unit/test_base_command.py::test_base_command_local_tempdir_cleanup + tests/unit/test_base_command.py::test_base_command_provides_tempdir_helpers + # broken by unbundling + "tests/functional/test_debug.py::test_debug[vendored library versions:]" + tests/functional/test_debug.py::test_debug__library_versions + tests/functional/test_python_option.py::test_python_interpreter + tests/functional/test_uninstall.py::test_uninstall_non_local_distutils + ) + local EPYTEST_IGNORE=( + # requires proxy.py + tests/functional/test_proxy.py + ) + + case ${EPYTHON} in + pypy3*) + EPYTEST_DESELECT+=( + # unexpected tempfiles? + tests/functional/test_install_config.py::test_do_not_prompt_for_authentication + tests/functional/test_install_config.py::test_prompt_for_authentication + ) + ;; + esac + + if ! has_version "dev-python/cryptography[${PYTHON_USEDEP}]"; then + EPYTEST_DESELECT+=( + tests/functional/test_install.py::test_install_sends_client_cert + tests/functional/test_install_config.py::test_do_not_prompt_for_authentication + tests/functional/test_install_config.py::test_prompt_for_authentication + tests/functional/test_install_config.py::test_prompt_for_keyring_if_needed + ) + fi + + local -x PIP_DISABLE_PIP_VERSION_CHECK=1 + local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 + local EPYTEST_XDIST=1 + # rerunfailures because test suite breaks if packages are installed + # in parallel + epytest -m "not network" -o tmp_path_retention_policy=all \ + -p rerunfailures --reruns=5 --use-venv +} + +python_install_all() { + local DOCS=( AUTHORS.txt docs/html/**/*.rst ) + distutils-r1_python_install_all + + newbashcomp completion.bash pip + newzshcomp completion.zsh _pip +}