Support repeated keys in --config-settings
This commit is contained in:
parent
6cbe3a846c
commit
a9868b4795
2 changed files with 87 additions and 1 deletions
76
Support-passing-the-same-key-multiple-times-in-confi.patch
Normal file
76
Support-passing-the-same-key-multiple-times-in-confi.patch
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
From d498b3997167865a42f4c663eac518cae3a0daeb Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Filipe=20La=C3=ADns?= <lains@riseup.net>
|
||||
Date: Fri, 17 Mar 2023 21:23:19 +0000
|
||||
Subject: [PATCH] Support passing the same key multiple times in
|
||||
--config-settings (#11853)
|
||||
|
||||
(cherry picked from commit 1268487cbab1b2ffab881b5961c0476e655b6c88)
|
||||
---
|
||||
news/11681.feature.rst | 4 ++++
|
||||
src/pip/_internal/cli/cmdoptions.py | 8 +++++++-
|
||||
tests/unit/test_pyproject_config.py | 15 ++++++++++++---
|
||||
3 files changed, 23 insertions(+), 4 deletions(-)
|
||||
create mode 100644 news/11681.feature.rst
|
||||
|
||||
diff --git a/news/11681.feature.rst b/news/11681.feature.rst
|
||||
new file mode 100644
|
||||
index 000000000..a0d918b19
|
||||
--- /dev/null
|
||||
+++ b/news/11681.feature.rst
|
||||
@@ -0,0 +1,4 @@
|
||||
+The ``--config-settings``/``-C`` option now supports using the same key multiple
|
||||
+times. When the same key is specified multiple times, all values are passed to
|
||||
+the build backend as a list, as opposed to the previous behavior where pip would
|
||||
+only pass the last value is the same key was used multiple times.
|
||||
diff --git a/src/pip/_internal/cli/cmdoptions.py b/src/pip/_internal/cli/cmdoptions.py
|
||||
index b4e2560de..4179f98a5 100644
|
||||
--- a/src/pip/_internal/cli/cmdoptions.py
|
||||
+++ b/src/pip/_internal/cli/cmdoptions.py
|
||||
@@ -803,7 +803,13 @@ def _handle_config_settings(
|
||||
if dest is None:
|
||||
dest = {}
|
||||
setattr(parser.values, option.dest, dest)
|
||||
- dest[key] = val
|
||||
+ if key in dest:
|
||||
+ if isinstance(dest[key], list):
|
||||
+ dest[key].append(val)
|
||||
+ else:
|
||||
+ dest[key] = [dest[key], val]
|
||||
+ else:
|
||||
+ dest[key] = val
|
||||
|
||||
|
||||
config_settings: Callable[..., Option] = partial(
|
||||
diff --git a/tests/unit/test_pyproject_config.py b/tests/unit/test_pyproject_config.py
|
||||
index 9937f3880..c7e469560 100644
|
||||
--- a/tests/unit/test_pyproject_config.py
|
||||
+++ b/tests/unit/test_pyproject_config.py
|
||||
@@ -1,3 +1,5 @@
|
||||
+from typing import Dict, List
|
||||
+
|
||||
import pytest
|
||||
|
||||
from pip._internal.commands import create_command
|
||||
@@ -36,9 +38,16 @@ def test_set_config_empty_value() -> None:
|
||||
assert options.config_settings == {"x": ""}
|
||||
|
||||
|
||||
-def test_replace_config_value() -> None:
|
||||
+@pytest.mark.parametrize(
|
||||
+ ("passed", "expected"),
|
||||
+ [
|
||||
+ (["x=hello", "x=world"], {"x": ["hello", "world"]}),
|
||||
+ (["x=hello", "x=world", "x=other"], {"x": ["hello", "world", "other"]}),
|
||||
+ ],
|
||||
+)
|
||||
+def test_multiple_config_values(passed: List[str], expected: Dict[str, str]) -> None:
|
||||
i = create_command("install")
|
||||
options, _ = i.parse_args(
|
||||
- ["xxx", "--config-settings", "x=hello", "--config-settings", "x=world"]
|
||||
+ ["xxx", *(f"--config-settings={option}" for option in passed)]
|
||||
)
|
||||
- assert options.config_settings == {"x": "world"}
|
||||
+ assert options.config_settings == expected
|
||||
--
|
||||
2.40.1
|
||||
|
||||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
Name: python-%{srcname}
|
||||
Version: %{base_version}%{?prerel:~%{prerel}}
|
||||
Release: 2%{?dist}
|
||||
Release: 3%{?dist}
|
||||
Summary: A tool for installing and managing Python packages
|
||||
|
||||
# We bundle a lot of libraries with pip, which itself is under MIT license.
|
||||
|
|
@ -90,6 +90,13 @@ Patch: nowarn-pip._internal.main.patch
|
|||
# Upstream issue: https://github.com/pypa/packaging/issues/368
|
||||
Patch: no-version-warning.patch
|
||||
|
||||
# Support passing the same key multiple times in --config-settings
|
||||
# This is needed for pyproject-rpm-macros to have consistent behavior across
|
||||
# Fedora releases.
|
||||
# Based on:
|
||||
# https://github.com/pypa/pip/commit/1268487cbab1b2ffab881b5961c0476e655b6c88
|
||||
Patch: Support-passing-the-same-key-multiple-times-in-confi.patch
|
||||
|
||||
# Downstream only patch
|
||||
# Users might have local installations of pip from using
|
||||
# `pip install --user --upgrade pip` on older/newer versions.
|
||||
|
|
@ -390,6 +397,9 @@ pytest_k='not completion'
|
|||
%{python_wheel_dir}/%{python_wheel_name}
|
||||
|
||||
%changelog
|
||||
* Tue May 30 2023 Maxwell G <maxwell@gtmx.me> - 22.3.1-3
|
||||
- Backport patch to support passing the same key multiple times in --config-settings
|
||||
|
||||
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 22.3.1-2
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue