From 9d00ec6123ed3033a207ac79df6777410ccfc388 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 05:06:40 +0300 Subject: [PATCH 01/12] Override toxworkdir with --workdir. --- docs/changelog/2654.bugfix.rst | 1 + src/tox/config/sets.py | 4 ++++ tests/config/test_sets.py | 8 ++++++++ 3 files changed, 13 insertions(+) create mode 100644 docs/changelog/2654.bugfix.rst 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 From 52f01f61e6f8e83fe6d2af631558d2b293f531de Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 05:16:06 +0300 Subject: [PATCH 02/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index 80f69871b..13d1a73da 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -176,6 +176,6 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: def test_config_work_dir(tox_project: ToxProjectCreator) -> None: project = tox_project({"tox.ini": "[tox]\ntoxworkdir=/tmp/foo"}) - work_dir_flag = "/tmp/bar" + work_dir_flag = "a" 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 + assert f"work_dir = {os.path.join(project.path, work_dir_flag,'.tox')}{os.linesep}" in result.out From 8a200e25671d98531d4298c2845724a55f61b674 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 05:23:55 +0300 Subject: [PATCH 03/12] Override toxworkdir with --workdir. --- src/tox/config/sets.py | 2 +- tests/config/test_sets.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/tox/config/sets.py b/src/tox/config/sets.py index 94214a9ce..6f114dd49 100644 --- a/src/tox/config/sets.py +++ b/src/tox/config/sets.py @@ -192,7 +192,7 @@ 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 + return self._conf.work_dir if self._conf.work_dir is not None and self._conf.options.work_dir else value self.add_config( keys=["work_dir", "toxworkdir"], diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index 13d1a73da..794d55a28 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -1,6 +1,5 @@ from __future__ import annotations -import os from collections import OrderedDict from pathlib import Path from typing import Callable, Dict, Optional, Set, TypeVar @@ -174,8 +173,9 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: 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 = "a" - result = project.run("c", "-k", "toxworkdir", "--core", "--workdir", work_dir_flag) - assert f"work_dir = {os.path.join(project.path, work_dir_flag,'.tox')}{os.linesep}" in result.out +@pytest.mark.parametrize("work_dir", ["a", ""]) +def test_config_work_dir(tox_project: ToxProjectCreator, work_dir) -> None: + project = tox_project({"tox.ini": "[tox]\ntoxworkdir=b"}) + result = project.run("c", "-k", "toxworkdir", "--core", *(["--workdir", work_dir] if work_dir else [])) + expected = Path(project.path, work_dir) if work_dir else result.state.conf.core["toxworkdir"] + assert expected == result.state.conf.core["toxworkdir"] From b1ddaae1647022cae2c3b35cfde850202e0da7ca Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 05:53:14 +0300 Subject: [PATCH 04/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index 794d55a28..9916e99f2 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -176,6 +176,6 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: @pytest.mark.parametrize("work_dir", ["a", ""]) def test_config_work_dir(tox_project: ToxProjectCreator, work_dir) -> None: project = tox_project({"tox.ini": "[tox]\ntoxworkdir=b"}) - result = project.run("c", "-k", "toxworkdir", "--core", *(["--workdir", work_dir] if work_dir else [])) + result = project.run("c", *(["--workdir", work_dir] if work_dir else [])) expected = Path(project.path, work_dir) if work_dir else result.state.conf.core["toxworkdir"] assert expected == result.state.conf.core["toxworkdir"] From def7a065fe8f186e29cf202604b7f38994f4e753 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 05:54:31 +0300 Subject: [PATCH 05/12] Override toxworkdir with --workdir. --- src/tox/config/sets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tox/config/sets.py b/src/tox/config/sets.py index 6f114dd49..1b4cb8e63 100644 --- a/src/tox/config/sets.py +++ b/src/tox/config/sets.py @@ -192,7 +192,7 @@ 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.work_dir is not None and self._conf.options.work_dir else value + return self._conf.work_dir if self._conf.work_dir and self._conf.options.work_dir else value self.add_config( keys=["work_dir", "toxworkdir"], From 0b544912ff4a64c9ee8c9368346f35019ef003aa Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 05:55:41 +0300 Subject: [PATCH 06/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index 9916e99f2..ba098b5e8 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -174,7 +174,7 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: @pytest.mark.parametrize("work_dir", ["a", ""]) -def test_config_work_dir(tox_project: ToxProjectCreator, work_dir) -> None: +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", work_dir] if work_dir else [])) expected = Path(project.path, work_dir) if work_dir else result.state.conf.core["toxworkdir"] From 7df60d064e5cb49a99e47deb67425af57acd464b Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 05:58:13 +0300 Subject: [PATCH 07/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index ba098b5e8..c90820d90 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -177,5 +177,5 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: 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", work_dir] if work_dir else [])) - expected = Path(project.path, work_dir) if work_dir else result.state.conf.core["toxworkdir"] + expected = Path(project.path, work_dir) if work_dir else Path("b") assert expected == result.state.conf.core["toxworkdir"] From 05b2564b7aa66edbc51ca2fee7d27ff25285d34b Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 06:13:02 +0300 Subject: [PATCH 08/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index c90820d90..a6486ba1c 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -178,4 +178,4 @@ 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", work_dir] if work_dir else [])) expected = Path(project.path, work_dir) if work_dir else Path("b") - assert expected == result.state.conf.core["toxworkdir"] + assert expected == result.state.conf.core["work_dir"] From b37e565866f56f9cadfc301ee988948d4275198f Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 06:18:30 +0300 Subject: [PATCH 09/12] Override toxworkdir with --workdir. --- src/tox/config/sets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tox/config/sets.py b/src/tox/config/sets.py index 1b4cb8e63..98a31251f 100644 --- a/src/tox/config/sets.py +++ b/src/tox/config/sets.py @@ -192,7 +192,7 @@ 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.work_dir and self._conf.options.work_dir else value + return self._conf.work_dir if self._conf.options.work_dir else value self.add_config( keys=["work_dir", "toxworkdir"], From f23e42fed2d9f8cfe2bd98a41acb7b8f2253e7c3 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 06:24:28 +0300 Subject: [PATCH 10/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index a6486ba1c..9d2408ce0 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -173,9 +173,9 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: assert env_set["set_env"] -@pytest.mark.parametrize("work_dir", ["a", ""]) -def test_config_work_dir(tox_project: ToxProjectCreator, work_dir: str) -> None: +@pytest.mark.parametrize("work_dir", [Path("a"), None]) +def test_config_work_dir(tox_project: ToxProjectCreator, work_dir: Path | None) -> None: project = tox_project({"tox.ini": "[tox]\ntoxworkdir=b"}) - result = project.run("c", *(["--workdir", work_dir] if work_dir else [])) + result = project.run("c", *(["--workdir", str(work_dir)] if work_dir else [])) expected = Path(project.path, work_dir) if work_dir else Path("b") assert expected == result.state.conf.core["work_dir"] From 8877dcdc85b17f71c7d78cbe3ef908f6dcf63dc1 Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 06:25:36 +0300 Subject: [PATCH 11/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index 9d2408ce0..73c2b6cf6 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -177,5 +177,5 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: def test_config_work_dir(tox_project: ToxProjectCreator, work_dir: Path | None) -> None: project = tox_project({"tox.ini": "[tox]\ntoxworkdir=b"}) result = project.run("c", *(["--workdir", str(work_dir)] if work_dir else [])) - expected = Path(project.path, work_dir) if work_dir else Path("b") + expected = project.path / work_dir if work_dir else Path("b") assert expected == result.state.conf.core["work_dir"] From f88f7132905317d0203f6e0bd0aca7b9189b976b Mon Sep 17 00:00:00 2001 From: q0w <43147888+q0w@users.noreply.github.com> Date: Mon, 26 Dec 2022 06:50:03 +0300 Subject: [PATCH 12/12] Override toxworkdir with --workdir. --- tests/config/test_sets.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/config/test_sets.py b/tests/config/test_sets.py index 73c2b6cf6..f739b074f 100644 --- a/tests/config/test_sets.py +++ b/tests/config/test_sets.py @@ -173,9 +173,9 @@ def test_set_env_raises_on_non_str(mocker: MockerFixture) -> None: assert env_set["set_env"] -@pytest.mark.parametrize("work_dir", [Path("a"), None]) -def test_config_work_dir(tox_project: ToxProjectCreator, work_dir: Path | None) -> None: +@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(work_dir)] if work_dir else [])) + 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"]