From d8c4cb0ffa1999b5d6466e0099dab76f242b1ba8 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Fri, 30 Dec 2022 07:41:43 +0300 Subject: [PATCH] Fix --skip-missing-interpreters (#2793) Closes https://github.com/tox-dev/tox/issues/2649 --- docs/changelog/2649.bugfix.rst | 1 + src/tox/session/cmd/run/single.py | 1 + src/tox/tox_env/python/runner.py | 8 ++++++++ tests/tox_env/python/test_python_runner.py | 12 ++++++++++++ 4 files changed, 22 insertions(+) create mode 100644 docs/changelog/2649.bugfix.rst diff --git a/docs/changelog/2649.bugfix.rst b/docs/changelog/2649.bugfix.rst new file mode 100644 index 000000000..048741655 --- /dev/null +++ b/docs/changelog/2649.bugfix.rst @@ -0,0 +1 @@ +Fix ``--skip-missing-interpreters`` behaviour - by :user:`q0w`. diff --git a/src/tox/session/cmd/run/single.py b/src/tox/session/cmd/run/single.py index 9ef909d10..15c4b6142 100644 --- a/src/tox/session/cmd/run/single.py +++ b/src/tox/session/cmd/run/single.py @@ -46,6 +46,7 @@ def _evaluate(tox_env: RunToxEnv, no_test: bool) -> tuple[bool, int, list[Outcom code, outcomes = run_commands(tox_env, no_test) except Skip as exception: LOGGER.warning("skipped because %s", exception) + code = 0 skipped = True except ToxBackendFailed as exception: LOGGER.error("%s", exception) diff --git a/src/tox/tox_env/python/runner.py b/src/tox/tox_env/python/runner.py index 040110f7b..d02881c9c 100644 --- a/src/tox/tox_env/python/runner.py +++ b/src/tox/tox_env/python/runner.py @@ -13,6 +13,7 @@ from tox.tox_env.package import Package from tox.tox_env.python.pip.req_file import PythonDeps +from ...config.loader.str_convert import StrConvert from ..api import ToxEnvCreateArgs from ..runner import RunToxEnv from .api import Python @@ -32,10 +33,17 @@ def register_config(self) -> None: default=PythonDeps("", root), desc="Name of the python dependencies as specified by PEP-440", ) + + def skip_missing_interpreters_post_process(value: bool) -> bool: + if getattr(self.options, "skip_missing_interpreters", "config") != "config": + return StrConvert().to_bool(self.options.skip_missing_interpreters) + return value + self.core.add_config( keys=["skip_missing_interpreters"], default=True, of_type=bool, + post_process=skip_missing_interpreters_post_process, desc="skip running missing interpreters", ) diff --git a/tests/tox_env/python/test_python_runner.py b/tests/tox_env/python/test_python_runner.py index 93d5e4978..eca65b2d9 100644 --- a/tests/tox_env/python/test_python_runner.py +++ b/tests/tox_env/python/test_python_runner.py @@ -1,5 +1,6 @@ from __future__ import annotations +import sys from pathlib import Path import pytest @@ -121,3 +122,14 @@ def test_extras_are_normalized( result = project.run("c", "-e", "py", "--root", str(demo_pkg_inline), "-k", "extras") result.assert_success() assert result.out == f"[testenv:py]\nextras = {used_extra}\n" + + +@pytest.mark.parametrize( + ("config", "cli", "expected"), + [("false", "true", True), ("true", "false", False), ("false", "config", False), ("true", "config", True)], +) +def test_config_skip_missing_interpreters(tox_project: ToxProjectCreator, config: str, cli: str, expected: str) -> None: + py_ver = ".".join(str(i) for i in sys.version_info[0:2]) + project = tox_project({"tox.ini": f"[tox]\nenvlist=py4,py{py_ver}\nskip_missing_interpreters={config}"}) + result = project.run("--skip-missing-interpreters", cli) + assert result.code == 0 if expected else 1