Skip to content

Commit 145909b

Browse files
committed
Avoid impossible impossible minversion requirement
Fixes: #2414
1 parent f7f5d68 commit 145909b

File tree

3 files changed

+13
-1
lines changed

3 files changed

+13
-1
lines changed

docs/changelog/2414.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Avoid impossible minversion version requirements. - by :user:`ssbarnea`.

src/tox/provision.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,14 @@ def provision(state: State) -> int | bool:
7575

7676
def add_tox_requires_min_version(requires: list[Requirement]) -> list[Requirement]:
7777
min_version: Version = state.conf.core["min_version"]
78+
# If own version can be a development one or a pre-release, we need to
79+
# to only use its base_version for requirements, or pip will never be
80+
# able to find a version that is compatible with the requirement.
81+
# See https://github.com/tox-dev/tox/issues/2414
82+
if min_version.is_devrelease or min_version.is_prerelease: # noqa: SC200
83+
# So we build a PEP 440 version out of the base ones.
84+
# https://peps.python.org/pep-0440/#implicit-pre-release-number
85+
min_version = Version(min_version.base_version + "a0")
7886
requires.append(Requirement(f"tox >= {min_version.public}"))
7987
return requires
8088

tests/test_provision.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import pytest
1414
from filelock import FileLock
1515
from packaging.requirements import Requirement
16+
from packaging.version import Version
1617

1718
from tox import __version__
1819
from tox.pytest import Index, IndexServer, MonkeyPatch, TempPathFactory, ToxProjectCreator
@@ -188,5 +189,7 @@ def test_provision_no_recreate_json(tox_project: ToxProjectCreator) -> None:
188189
assert msg in result.out
189190
with (project.path / "out.json").open() as file_handler:
190191
requires = json.load(file_handler)
191-
version = __version__.split("+")[0]
192+
# __version__ could be something like 4.0.0b3.dev23+g50e62f93 so we still # noqa: SC100
193+
# need to sanitize it to keep the base and add "a0" # noqa: SC100
194+
version = Version(__version__).base_version + "a0"
192195
assert requires == {"minversion": version, "requires": ["p", f"tox>={version}"]}

0 commit comments

Comments
 (0)