diff --git a/docs/changelog/2414.bugfix.rst b/docs/changelog/2414.bugfix.rst new file mode 100644 index 000000000..118094ea0 --- /dev/null +++ b/docs/changelog/2414.bugfix.rst @@ -0,0 +1 @@ +Avoid impossible minversion version requirements. - by :user:`ssbarnea`. diff --git a/src/tox/provision.py b/src/tox/provision.py index 95273fe4a..46ca26637 100644 --- a/src/tox/provision.py +++ b/src/tox/provision.py @@ -75,6 +75,11 @@ def provision(state: State) -> int | bool: def add_tox_requires_min_version(requires: list[Requirement]) -> list[Requirement]: min_version: Version = state.conf.core["min_version"] + # If own version can be a development one or a pre-release, we need to only use its base_version for + # requirements, or pip will never be able to find a version that is compatible with the requirement. + if min_version.is_devrelease or min_version.is_prerelease: + # Earliest possible pre-release number for current base version. + min_version = Version(f"{min_version.base_version}a0") requires.append(Requirement(f"tox >= {min_version.public}")) return requires diff --git a/tests/test_provision.py b/tests/test_provision.py index 811ac152f..f22d12795 100644 --- a/tests/test_provision.py +++ b/tests/test_provision.py @@ -13,6 +13,7 @@ import pytest from filelock import FileLock from packaging.requirements import Requirement +from packaging.version import Version from tox import __version__ from tox.pytest import Index, IndexServer, MonkeyPatch, TempPathFactory, ToxProjectCreator @@ -188,5 +189,6 @@ def test_provision_no_recreate_json(tox_project: ToxProjectCreator) -> None: assert msg in result.out with (project.path / "out.json").open() as file_handler: requires = json.load(file_handler) - version = __version__.split("+")[0] + # __version__ could be something like 4.0.0rc1.dev1+? so we still need to sanitize it to keep the base and add "a0" + version = f"{Version(__version__).base_version}a0" assert requires == {"minversion": version, "requires": ["p", f"tox>={version}"]} diff --git a/whitelist.txt b/whitelist.txt index 7bd825949..438805295 100644 --- a/whitelist.txt +++ b/whitelist.txt @@ -1,8 +1,10 @@ +0rc1 0x3 10ms 1s 2s 5s +a0 abi addinivalue addnodes @@ -48,9 +50,11 @@ dep deps desc dest +dev1 devenv devnull devpi +devrelease dirname distinfo distlib @@ -152,6 +156,7 @@ pos posargs posix prepend +prerelease prereleases prj prog