From 566ac16bfb0cbeaacf7760bd945be3dfe2f39988 Mon Sep 17 00:00:00 2001 From: Sorin Sbarnea Date: Sat, 26 Nov 2022 16:36:50 +0000 Subject: [PATCH 1/3] Avoid impossible impossible minversion requirement Fixes: #2414 --- docs/changelog/2414.bugfix.rst | 1 + src/tox/provision.py | 5 +++++ tests/test_provision.py | 5 ++++- whitelist.txt | 5 +++++ 4 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 docs/changelog/2414.bugfix.rst 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..4c51fc587 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..c0c2f1cb7 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,7 @@ 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 From 8cc0025e8b21643c86940962370eed31be65a19f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Sat, 26 Nov 2022 10:49:16 -0800 Subject: [PATCH 2/3] PR Feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bernát Gábor --- tests/test_provision.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tests/test_provision.py b/tests/test_provision.py index c0c2f1cb7..f22d12795 100644 --- a/tests/test_provision.py +++ b/tests/test_provision.py @@ -189,7 +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__ could be something like 4.0.0rc1.dev1+... so we still - # need to sanitize it to keep the base and add "a0" + # __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}"]} From 890adcc712fb7292ccec407462a947ce30c2998c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Sat, 26 Nov 2022 10:49:53 -0800 Subject: [PATCH 3/3] PR Feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bernát Gábor --- src/tox/provision.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tox/provision.py b/src/tox/provision.py index 4c51fc587..46ca26637 100644 --- a/src/tox/provision.py +++ b/src/tox/provision.py @@ -78,7 +78,7 @@ def add_tox_requires_min_version(requires: list[Requirement]) -> list[Requiremen # 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 + # 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