Skip to content

Commit 55a7b66

Browse files
authored
Fix provisioning (#2750)
1 parent 9972a82 commit 55a7b66

File tree

3 files changed

+10
-11
lines changed

3 files changed

+10
-11
lines changed

src/tox/provision.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def provision(state: State) -> int | bool:
6262
keys=["min_version", "minversion"],
6363
of_type=Version,
6464
# do not include local version specifier (because it's not allowed in version spec per PEP-440)
65-
default=Version("4.0"),
65+
default=None, # type: ignore # Optional[Version] translates to object
6666
desc="Define the minimal tox version required to run",
6767
)
6868
state.conf.core.add_config(
@@ -72,10 +72,10 @@ def provision(state: State) -> int | bool:
7272
desc="Name of the virtual environment used to provision a tox.",
7373
)
7474

75-
def add_tox_requires_min_version(requires: list[Requirement]) -> list[Requirement]:
75+
def add_tox_requires_min_version(reqs: list[Requirement]) -> list[Requirement]:
7676
min_version: Version = state.conf.core["min_version"]
77-
requires.append(Requirement(f"tox >= {min_version}"))
78-
return requires
77+
reqs.append(Requirement(f"tox{f'>={min_version}' if min_version else ''}"))
78+
return reqs
7979

8080
state.conf.core.add_config(
8181
keys="requires",
@@ -113,8 +113,9 @@ def add_tox_requires_min_version(requires: list[Requirement]) -> list[Requiremen
113113
msg = f"provisioning explicitly disabled within {sys.executable}, but {miss_msg}"
114114
if isinstance(no_provision, str):
115115
msg += f" and wrote to {no_provision}"
116+
min_version = str(next(i.specifier for i in requires if i.name == "tox")).split("=")
116117
requires_dict = {
117-
"minversion": str(next(i.specifier for i in requires if i.name == "tox")).split("=")[1],
118+
"minversion": min_version[1] if len(min_version) >= 2 else None,
118119
"requires": [str(i) for i in requires],
119120
}
120121
Path(no_provision).write_text(json.dumps(requires_dict, indent=4))

src/tox/session/env_select.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -232,11 +232,9 @@ def _finalize_config(self) -> None:
232232
def _build_run_env(self, name: str) -> RunToxEnv | None:
233233
if self._provision is not None and self._provision[0] is False and name == self._provision[1]:
234234
return None
235-
env_conf = self._state.conf.get_env(
236-
name,
237-
package=False,
238-
loaders=[self._provision[2]] if self._provision is not None and self._provision[1] == name else None,
239-
)
235+
env_conf = self._state.conf.get_env(name, package=False)
236+
if self._provision is not None and self._provision[1] == name:
237+
env_conf.loaders.insert(0, self._provision[2])
240238
desc = "the tox execute used to evaluate this environment"
241239
env_conf.add_config(keys="runner", desc=desc, of_type=str, default=self._state.conf.options.default_runner)
242240
runner = REGISTER.runner(cast(str, env_conf["runner"]))

tests/test_provision.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,4 +186,4 @@ def test_provision_no_recreate_json(tox_project: ToxProjectCreator) -> None:
186186
assert msg in result.out
187187
with (project.path / "out.json").open() as file_handler:
188188
requires = json.load(file_handler)
189-
assert requires == {"minversion": "4.0", "requires": ["p", "tox>=4.0"]}
189+
assert requires == {"minversion": None, "requires": ["p", "tox"]}

0 commit comments

Comments
 (0)