summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/changelog/2649.bugfix.rst1
-rw-r--r--src/tox/session/cmd/run/single.py1
-rw-r--r--src/tox/tox_env/python/runner.py8
-rw-r--r--tests/tox_env/python/test_python_runner.py12
4 files changed, 22 insertions, 0 deletions
diff --git a/docs/changelog/2649.bugfix.rst b/docs/changelog/2649.bugfix.rst
new file mode 100644
index 00000000..04874165
--- /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 9ef909d1..15c4b614 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 040110f7..d02881c9 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.errors import Skip
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 @@ class PythonRun(Python, RunToxEnv):
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 93d5e497..eca65b2d 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