summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernát Gábor <gaborjbernat@gmail.com>2022-12-08 08:07:09 -0800
committerGitHub <noreply@github.com>2022-12-08 08:07:09 -0800
commit31ad830867490e7b69a65605d919104f8b18fb7d (patch)
tree5eb16a20045704b7bb69eda0c1f70cf6f988a974
parent267d3275ad929b12e951dc8a6d2b73aa3e61b168 (diff)
downloadtox-git-31ad830867490e7b69a65605d919104f8b18fb7d.tar.gz
Ensure change_dir is created before running commands (#2643)
Resolves https://github.com/tox-dev/tox/issues/2620
-rw-r--r--docs/changelog/2620.bugfix.rst1
-rw-r--r--src/tox/session/cmd/run/single.py1
-rw-r--r--tests/tox_env/test_tox_env_api.py7
3 files changed, 9 insertions, 0 deletions
diff --git a/docs/changelog/2620.bugfix.rst b/docs/changelog/2620.bugfix.rst
new file mode 100644
index 00000000..ba4c5bd5
--- /dev/null
+++ b/docs/changelog/2620.bugfix.rst
@@ -0,0 +1 @@
+Ensure :ref:`change_dir` is created if does not exist before executing :ref:`commands` - by :user:`gaborbernat`.
diff --git a/src/tox/session/cmd/run/single.py b/src/tox/session/cmd/run/single.py
index 9cc3e45e..9ef909d1 100644
--- a/src/tox/session/cmd/run/single.py
+++ b/src/tox/session/cmd/run/single.py
@@ -71,6 +71,7 @@ def run_commands(tox_env: RunToxEnv, no_test: bool) -> tuple[int, list[Outcome]]
from tox.plugin.manager import MANAGER # importing this here to avoid circular import
chdir: Path = tox_env.conf["change_dir"]
+ chdir.mkdir(exist_ok=True, parents=True)
ignore_errors: bool = tox_env.conf["ignore_errors"]
MANAGER.tox_before_run_commands(tox_env)
status_pre, status_main, status_post = -1, -1, -1
diff --git a/tests/tox_env/test_tox_env_api.py b/tests/tox_env/test_tox_env_api.py
index c5542dbc..2c467bb6 100644
--- a/tests/tox_env/test_tox_env_api.py
+++ b/tests/tox_env/test_tox_env_api.py
@@ -86,3 +86,10 @@ def test_tox_env_pass_env_match_ignore_case(char: str, glob: str) -> None:
with patch("os.environ", {"A1": "1", "a2": "2", "A2": "3", "B": "4"}):
env = ToxEnv._load_pass_env([f"{char}{glob}"])
assert env == {"A1": "1", "a2": "2", "A2": "3"}
+
+
+def test_change_dir_is_created_if_not_exist(tox_project: ToxProjectCreator) -> None:
+ prj = tox_project({"tox.ini": "[testenv]\npackage=skip\nchange_dir=a{/}b\ncommands=python --version"})
+ result_first = prj.run("r")
+ result_first.assert_success()
+ assert (prj.path / "a" / "b").exists()