diff --git a/docs/changelog/2654.bugfix.rst b/docs/changelog/2654.bugfix.rst new file mode 100644 index 000000000..2ec0e4d4a --- /dev/null +++ b/docs/changelog/2654.bugfix.rst @@ -0,0 +1 @@ +Override toxworkdir with --workdir. diff --git a/src/tox/config/sets.py b/src/tox/config/sets.py index e07f4bd40..98a31251f 100644 --- a/src/tox/config/sets.py +++ b/src/tox/config/sets.py @@ -191,10 +191,14 @@ def register_config(self) -> None: def work_dir_builder(conf: Config, env_name: str | None) -> Path: # noqa: U100 return (conf.work_dir if conf.work_dir is not None else cast(Path, self["tox_root"])) / ".tox" + def work_dir_post_process(value: Path) -> Path: + return self._conf.work_dir if self._conf.options.work_dir else value + self.add_config( keys=["work_dir", "toxworkdir"], of_type=Path, default=work_dir_builder, + post_process=work_dir_post_process, desc="working directory", ) self.add_config( diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index 0faa68acd..f739b074f 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -171,3 +171,11 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: env_set.loaders.insert(0, MemoryLoader(set_env=1)) with pytest.raises(TypeError, match="1"): assert env_set["set_env"] + + +@pytest.mark.parametrize("work_dir", ["a", ""]) +def test_config_work_dir(tox_project: ToxProjectCreator, work_dir: str) -> None: + project = tox_project({"tox.ini": "[tox]\ntoxworkdir=b"}) + result = project.run("c", *(["--workdir", str(project.path / work_dir)] if work_dir else [])) + expected = project.path / work_dir if work_dir else Path("b") + assert expected == result.state.conf.core["work_dir"]