summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMasen Furer <m_github@0x26.net>2023-01-17 07:13:55 -0800
committerGitHub <noreply@github.com>2023-01-17 07:13:55 -0800
commit2a87375617a228d655b31856c6a39d9957fb9484 (patch)
treeeeee6ae341b10ac92eaf80ad233c7d88983d7a18
parent1ba041908fa9c225840aafa4cbc01fd6521e804b (diff)
downloadtox-git-2a87375617a228d655b31856c6a39d9957fb9484.tar.gz
Provision cwd (#2877)
Fix https://github.com/tox-dev/tox/issues/2876
-rw-r--r--docs/changelog/2876.bugfix.rst7
-rw-r--r--src/tox/provision.py2
-rw-r--r--tests/test_provision.py14
3 files changed, 22 insertions, 1 deletions
diff --git a/docs/changelog/2876.bugfix.rst b/docs/changelog/2876.bugfix.rst
new file mode 100644
index 00000000..94f54756
--- /dev/null
+++ b/docs/changelog/2876.bugfix.rst
@@ -0,0 +1,7 @@
+When executing via the provisioning environment (``.tox`` by default), run
+``tox`` in working directory of the parent process.
+
+Prior to this change (from tox 4.0.0), the provisioned ``tox`` would execute with
+``{tox_root}`` as the working directory, which breaks when a relative path is
+passed to ``-c`` or ``--conf`` and ``tox`` is executed in a working directory
+other than ``{tox_root}`` - by :user:`masenf`.
diff --git a/src/tox/provision.py b/src/tox/provision.py
index 9b1aeba5..e67121bd 100644
--- a/src/tox/provision.py
+++ b/src/tox/provision.py
@@ -150,5 +150,5 @@ def run_provision(name: str, state: State) -> int:
raise HandledError(f"cannot provision tox environment {tox_env.conf['env_name']} because {exception}")
args: list[str] = [str(env_python), "-m", "tox"]
args.extend(state.args)
- outcome = tox_env.execute(cmd=args, stdin=StdinSource.user_only(), show=True, run_id="provision")
+ outcome = tox_env.execute(cmd=args, stdin=StdinSource.user_only(), show=True, run_id="provision", cwd=Path.cwd())
return cast(int, outcome.exit_code)
diff --git a/tests/test_provision.py b/tests/test_provision.py
index 91d7689d..4a5bc1a2 100644
--- a/tests/test_provision.py
+++ b/tests/test_provision.py
@@ -212,3 +212,17 @@ def test_provision_plugin_runner_in_provision(tox_project: ToxProjectCreator, tm
proj = tox_project({"tox.ini": "[tox]\nrequires=somepkg123xyz\n[testenv:.tox]\nrunner=example"})
with pytest.raises(KeyError, match="example"):
proj.run("r", "-e", "py", "--result-json", str(log))
+
+
+@pytest.mark.integration()
+@pytest.mark.usefixtures("_pypi_index_self")
+@pytest.mark.parametrize("relative_path", [True, False], ids=["relative", "absolute"])
+def test_provision_conf_file(tox_project: ToxProjectCreator, tmp_path: Path, relative_path: bool) -> None:
+ ini = "[tox]\nrequires = demo-pkg-inline\nskipsdist=true\n"
+ project = tox_project({"tox.ini": ini}, prj_path=tmp_path / "sub")
+ if relative_path:
+ conf_path = os.path.join(project.path.name, "tox.ini")
+ else:
+ conf_path = str(project.path / "tox.ini")
+ result = project.run("c", "--conf", conf_path, "-e", "py", from_cwd=tmp_path)
+ result.assert_success()