From cd7916486e2665d2cd3c9db300f465a35bf21d0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Sun, 11 Dec 2022 10:33:51 -0800 Subject: [PATCH] Fix multiple substitution on factor filtering MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bernát Gábor --- docs/changelog/2650.bugfix.rst | 2 ++ src/tox/config/loader/ini/factor.py | 1 + tests/config/loader/ini/test_factor.py | 8 ++++++++ 3 files changed, 11 insertions(+) create mode 100644 docs/changelog/2650.bugfix.rst diff --git a/docs/changelog/2650.bugfix.rst b/docs/changelog/2650.bugfix.rst new file mode 100644 index 000000000..e69447ce4 --- /dev/null +++ b/docs/changelog/2650.bugfix.rst @@ -0,0 +1,2 @@ +Fix multiple substitution on factor filtering in ``tox.ini`` when multiple factor filters match +- by :user:`gaborbernat`. diff --git a/src/tox/config/loader/ini/factor.py b/src/tox/config/loader/ini/factor.py index 1f5dcfb90..1c6f59fd7 100644 --- a/src/tox/config/loader/ini/factor.py +++ b/src/tox/config/loader/ini/factor.py @@ -21,6 +21,7 @@ def filter_for_env(value: str, name: str | None) -> str: for group in factors: if all((a_name in current) ^ negate for a_name, negate in group): overall.append(content) + break # if any match we use it, and then bail result = "\n".join(overall) return result diff --git a/tests/config/loader/ini/test_factor.py b/tests/config/loader/ini/test_factor.py index 9f60b5814..29c70a482 100644 --- a/tests/config/loader/ini/test_factor.py +++ b/tests/config/loader/ini/test_factor.py @@ -203,3 +203,11 @@ def test_generative_section_name(tox_ini_conf: ToxIniCreator) -> None: env_config.add_config(keys="deps-x", of_type=List[str], default=[], desc="deps") deps = env_config["deps-x"] assert deps == ["flake8"] + + +def test_multiple_factor_match(tox_ini_conf: ToxIniCreator) -> None: + config = tox_ini_conf("[testenv]\nconf = a{,-b}: x") + env_config = config.get_env("a-b") + env_config.add_config(keys="conf", of_type=str, default="", desc="conf") + deps = env_config["conf"] + assert deps == "x"