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..94214a9ce 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 / ".tox" if self._conf.work_dir is not None 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..80f69871b 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -1,5 +1,6 @@ from __future__ import annotations +import os from collections import OrderedDict from pathlib import Path from typing import Callable, Dict, Optional, Set, TypeVar @@ -171,3 +172,10 @@ 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"] + + +def test_config_work_dir(tox_project: ToxProjectCreator) -> None: + project = tox_project({"tox.ini": "[tox]\ntoxworkdir=/tmp/foo"}) + work_dir_flag = "/tmp/bar" + result = project.run("c", "-k", "toxworkdir", "--core", "--workdir", work_dir_flag) + assert f"work_dir = {os.path.join(work_dir_flag,'.tox')}{os.linesep}" in result.out