Skip to content

Commit cbd67ad

Browse files
aklajnertssbarnea
authored andcommitted
Respect attempts to change PATH via setenv (tox-dev#1563)
1 parent e610abd commit cbd67ad

File tree

4 files changed

+27
-1
lines changed

4 files changed

+27
-1
lines changed

CONTRIBUTORS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Alexander Schepanovski
44
Alexandre Conrad
55
Allan Feldman
66
Andrii Soldatenko
7+
Andrzej Klajnert
78
Anthon van der Neuth
89
Anthony Sottile
910
Anudit Nagar

docs/changelog/1423.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Respect attempts to change `PATH` via `setenv`. - by :user:`aklajnert`

src/tox/venv.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -557,7 +557,8 @@ def _pcall(
557557
# construct environment variables
558558
env.pop("VIRTUALENV_PYTHON", None)
559559
bin_dir = str(self.envconfig.envbindir)
560-
env["PATH"] = os.pathsep.join([bin_dir, os.environ["PATH"]])
560+
path = self.envconfig.setenv.get("PATH") or os.environ["PATH"]
561+
env["PATH"] = os.pathsep.join([bin_dir, path])
561562
reporter.verbosity2("setting PATH={}".format(env["PATH"]))
562563

563564
# get command

tests/unit/test_venv.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,3 +1096,26 @@ def test_create_download(mocksession, newconfig, download):
10961096
else:
10971097
assert "--no-download" in map(str, args)
10981098
mocksession._clearmocks()
1099+
1100+
1101+
def test_path_change(tmpdir, mocksession, newconfig, monkeypatch):
1102+
config = newconfig(
1103+
[],
1104+
"""\
1105+
[testenv:python]
1106+
setenv =
1107+
PATH = {env:PATH}{:}{toxinidir}/bin
1108+
""",
1109+
)
1110+
pkg = tmpdir.ensure("package.tar.gz")
1111+
mocksession._clearmocks()
1112+
mocksession.new_config(config)
1113+
venv = mocksession.getvenv("python")
1114+
installpkg(venv, pkg)
1115+
venv.test()
1116+
1117+
pcalls = mocksession._pcalls
1118+
for x in pcalls:
1119+
path = x.env["PATH"]
1120+
assert os.environ["PATH"] in path
1121+
assert path.endswith(str(venv.envconfig.config.toxinidir) + "/bin")

0 commit comments

Comments
 (0)