summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthony Sottile <asottile@umich.edu>2023-05-13 13:51:28 -0400
committerAnthony Sottile <asottile@umich.edu>2023-05-13 13:53:32 -0400
commitf18b5430b18619ade84bd283dadf7790278ffaf8 (patch)
treea8fb08c0313c16bad6952afb66539bbfa93dc22e
parent3238abf7e95fa7c5c041554452f4cee055f6c0d7 (diff)
downloadtox-git-fix-legacy-devenv.tar.gz
fix legacy `tox --devenv venv`fix-legacy-devenv
-rw-r--r--docs/changelog/2925.bugfix.rst1
-rw-r--r--src/tox/session/cmd/legacy.py1
-rw-r--r--src/tox/session/env_select.py5
-rw-r--r--tests/session/cmd/test_legacy.py13
-rw-r--r--tests/session/test_env_select.py11
5 files changed, 28 insertions, 3 deletions
diff --git a/docs/changelog/2925.bugfix.rst b/docs/changelog/2925.bugfix.rst
new file mode 100644
index 00000000..f74003a9
--- /dev/null
+++ b/docs/changelog/2925.bugfix.rst
@@ -0,0 +1 @@
+Fix ``tox --devenv venv`` invocation without ``-e`` - by :user:`asottile`.
diff --git a/src/tox/session/cmd/legacy.py b/src/tox/session/cmd/legacy.py
index e92c3d27..b3327b08 100644
--- a/src/tox/session/cmd/legacy.py
+++ b/src/tox/session/cmd/legacy.py
@@ -105,6 +105,7 @@ def legacy(state: State) -> int:
return list_env(state)
if option.devenv_path:
option.devenv_path = Path(option.devenv_path)
+ option.env = option.env or CliEnv("py")
return devenv(state)
if option.parallel != 0: # only 0 means sequential
return run_parallel(state)
diff --git a/src/tox/session/env_select.py b/src/tox/session/env_select.py
index f091474d..5bb283b3 100644
--- a/src/tox/session/env_select.py
+++ b/src/tox/session/env_select.py
@@ -125,7 +125,6 @@ class EnvSelector:
self.on_empty_fallback_py = True
self._warned_about: set[str] = set() #: shared set of skipped environments that were already warned about
self._state = state
- self._cli_envs: CliEnv | None = getattr(self._state.conf.options, "env", None)
self._defined_envs_: None | dict[str, _ToxEnvInfo] = None
self._pkg_env_counter: Counter[str] = Counter()
from tox.plugin.manager import MANAGER
@@ -139,6 +138,10 @@ class EnvSelector:
tox_env_filter_regex = getattr(state.conf.options, "skip_env", "").strip()
self._filter_re = re.compile(tox_env_filter_regex) if tox_env_filter_regex else None
+ @property
+ def _cli_envs(self) -> CliEnv | None:
+ return getattr(self._state.conf.options, "env", None)
+
def _collect_names(self) -> Iterator[tuple[Iterable[str], bool]]:
""":return: sources of tox environments defined with name and if is marked as target to run"""
if self._provision is not None: # pragma: no branch
diff --git a/tests/session/cmd/test_legacy.py b/tests/session/cmd/test_legacy.py
index 957149b6..1aa7e473 100644
--- a/tests/session/cmd/test_legacy.py
+++ b/tests/session/cmd/test_legacy.py
@@ -78,13 +78,22 @@ def test_legacy_list_all(tox_project: ToxProjectCreator, mocker: MockerFixture,
assert outcome.state.conf.options.show_core is False
-def test_legacy_devenv(tox_project: ToxProjectCreator, mocker: MockerFixture, tmp_path: Path) -> None:
+@pytest.mark.parametrize("args", [(), ("-e", "py")])
+def test_legacy_devenv(
+ tox_project: ToxProjectCreator,
+ mocker: MockerFixture,
+ tmp_path: Path,
+ args: tuple[str, ...],
+) -> None:
devenv = mocker.patch("tox.session.cmd.legacy.devenv")
into = tmp_path / "b"
- outcome = tox_project({"tox.ini": ""}).run("le", "--devenv", str(into), "-e", "py")
+ outcome = tox_project({"tox.ini": ""}).run("le", "--devenv", str(into), *args)
+
+ outcome.state.envs.ensure_only_run_env_is_active()
assert devenv.call_count == 1
+ assert set(outcome.state.conf.options.env) == {"py"}
assert outcome.state.conf.options.devenv_path == into
diff --git a/tests/session/test_env_select.py b/tests/session/test_env_select.py
index 496107a3..e8378fc7 100644
--- a/tests/session/test_env_select.py
+++ b/tests/session/test_env_select.py
@@ -2,7 +2,10 @@ from __future__ import annotations
import pytest
+from tox.config.cli.parse import get_options
from tox.pytest import MonkeyPatch, ToxProjectCreator
+from tox.session.env_select import CliEnv, EnvSelector
+from tox.session.state import State
def test_label_core_can_define(tox_project: ToxProjectCreator) -> None:
@@ -117,3 +120,11 @@ def test_tox_skip_env_logs(tox_project: ToxProjectCreator, monkeypatch: MonkeyPa
outcome = project.run("l", "--no-desc")
outcome.assert_success()
outcome.assert_out_err("ROOT: skip environment mypy, matches filter 'm[y]py'\npy310\npy39\n", "")
+
+
+def test_env_select_lazily_looks_at_envs() -> None:
+ state = State(get_options(), [])
+ env_selector = EnvSelector(state)
+ # late-assigning env should be reflected in env_selector
+ state.conf.options.env = CliEnv("py")
+ assert set(env_selector.iter()) == {"py"}