1
1
Fork 0
mirror of https://github.com/pypa/pip synced 2023-12-13 21:30:23 +01:00

fix merge_config_settings

This commit is contained in:
q0w 2023-03-26 16:08:50 +03:00
parent bbab400ba6
commit 9d160aac76
2 changed files with 20 additions and 6 deletions

View file

@ -27,6 +27,7 @@ from typing import (
Iterable,
Iterator,
List,
Mapping,
Optional,
TextIO,
Tuple,
@ -742,17 +743,25 @@ class ConfiguredBuildBackendHookCaller(BuildBackendHookCaller):
def merge_config_settings(
reqs_settings: Dict[str, Union[str, List[str]]],
cli_settings: Dict[str, Union[str, List[str]]],
reqs_settings: Mapping[str, Union[str, List[str]]],
cli_settings: Mapping[str, Union[str, List[str]]],
) -> Dict[str, Union[str, List[str]]]:
dd: Dict[str, Union[str, List[str]]] = {}
for d in (reqs_settings, cli_settings):
for k, v in d.items():
if k in dd:
if isinstance(dd[k], list):
dd[k].append(v)
value = dd[k]
if isinstance(value, list):
if isinstance(v, list):
value.extend(v)
else:
value.append(v)
else:
dd[k] = [dd[k], v]
if isinstance(v, str):
value = [value, v]
else:
value = [value, *v]
dd[k] = value
else:
dd[k] = v
return dd

View file

@ -204,11 +204,16 @@ def test_merge_cli_reqs_config_settings(script: PipTestEnvironment) -> None:
"reqs.txt",
"--config-settings",
"FOO=FOOBAR",
"--config-settings",
"FOO=BARFOO",
)
script.assert_installed(foo="1.0")
config = script.site_packages_path / "config.json"
with open(config, "rb") as f:
assert json.load(f) == {"FOO": ["HELLO", "BAR", "FOOBAR"], "BAZ": "BAR"}
assert json.load(f) == {
"FOO": ["HELLO", "BAR", "FOOBAR", "BARFOO"],
"BAZ": "BAR",
}
def test_cli_config_settings_reqs(script: PipTestEnvironment) -> None: