diff options
-rw-r--r-- | docs/changelog/2259.bugfix.rst | 2 | ||||
-rw-r--r-- | src/tox/tox_env/api.py | 3 | ||||
-rw-r--r-- | src/tox/tox_env/python/virtual_env/api.py | 6 | ||||
-rw-r--r-- | tests/session/cmd/test_sequential.py | 20 |
4 files changed, 31 insertions, 0 deletions
diff --git a/docs/changelog/2259.bugfix.rst b/docs/changelog/2259.bugfix.rst new file mode 100644 index 00000000..324b8e50 --- /dev/null +++ b/docs/changelog/2259.bugfix.rst @@ -0,0 +1,2 @@ +Insert ``TOX_WORK_DIR``, ``TOX_ENV_NAME``, ``TOX_ENV_DIR`` and ``VIRTUAL_ENV`` environment variables for each tox +environments environment variables to keep contract with tox version 3 - by :user:`gaborbernat`. diff --git a/src/tox/tox_env/api.py b/src/tox/tox_env/api.py index 1dc7650f..42b71daf 100644 --- a/src/tox/tox_env/api.py +++ b/src/tox/tox_env/api.py @@ -308,6 +308,9 @@ class ToxEnv(ABC): result["PATH"] = self._make_path() for key in set_env: result[key] = set_env.load(key) + result["TOX_ENV_NAME"] = self.name + result["TOX_WORK_DIR"] = str(self.core["work_dir"]) + result["TOX_ENV_DIR"] = str(self.conf["env_dir"]) return result @staticmethod diff --git a/src/tox/tox_env/python/virtual_env/api.py b/src/tox/tox_env/python/virtual_env/api.py index 8f14baf4..ad22fc66 100644 --- a/src/tox/tox_env/python/virtual_env/api.py +++ b/src/tox/tox_env/python/virtual_env/api.py @@ -161,3 +161,9 @@ class VirtualEnv(Python, ABC): @property def runs_on_platform(self) -> str: return sys.platform + + @property + def environment_variables(self) -> dict[str, str]: + environment_variables = super().environment_variables + environment_variables["VIRTUAL_ENV"] = str(self.conf["env_dir"]) + return environment_variables diff --git a/tests/session/cmd/test_sequential.py b/tests/session/cmd/test_sequential.py index 7c51dde8..ea925f8a 100644 --- a/tests/session/cmd/test_sequential.py +++ b/tests/session/cmd/test_sequential.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import os import re import sys from pathlib import Path @@ -417,3 +418,22 @@ def test_sequential_clears_pkg_at_most_once(tox_project: ToxProjectCreator, demo project = tox_project({"tox.ini": ""}) result = project.run("r", "--root", str(demo_pkg_inline), "-e", "a,b", "-r") result.assert_success() + + +def test_sequential_inserted_env_vars(tox_project: ToxProjectCreator, demo_pkg_inline: Path) -> None: + ini = """ + [testenv] + commands=python -c 'import os; [print(f"{k}={v}") for k, v in os.environ.items() if \ + k.startswith("TOX_") or k == "VIRTUAL_ENV"]' + """ + project = tox_project({"tox.ini": ini}) + result = project.run("r", "--root", str(demo_pkg_inline)) + result.assert_success() + + assert re.search(f"TOX_PACKAGE={re.escape(str(project.path))}.*.tar.gz{os.linesep}", result.out) + assert f"TOX_ENV_NAME=py{os.linesep}" in result.out + work_dir = project.path / ".tox" / "4" + assert f"TOX_WORK_DIR={work_dir}{os.linesep}" in result.out + env_dir = work_dir / "py" + assert f"TOX_ENV_DIR={env_dir}{os.linesep}" in result.out + assert f"VIRTUAL_ENV={env_dir}{os.linesep}" in result.out |