From 067564a324ae2677d0d92fd036f94e6c07436529 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Wed, 7 Dec 2022 11:16:18 -0800 Subject: [PATCH] Default tox min_version to 4.0 instead of current tox version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bernát Gábor --- docs/changelog/2613.bugfix.rst | 1 + src/tox/provision.py | 10 ++-------- tests/test_provision.py | 19 +++++++------------ 3 files changed, 10 insertions(+), 20 deletions(-) create mode 100644 docs/changelog/2613.bugfix.rst diff --git a/docs/changelog/2613.bugfix.rst b/docs/changelog/2613.bugfix.rst new file mode 100644 index 000000000..ac4dfd255 --- /dev/null +++ b/docs/changelog/2613.bugfix.rst @@ -0,0 +1 @@ + Default tox min_version to 4.0 instead of current tox version - by :user:`gaborbernat`. diff --git a/src/tox/provision.py b/src/tox/provision.py index 46ca26637..529276d59 100644 --- a/src/tox/provision.py +++ b/src/tox/provision.py @@ -21,7 +21,6 @@ from tox.tox_env.errors import Skip from tox.tox_env.python.pip.req_file import PythonDeps from tox.tox_env.python.runner import PythonRun -from tox.version import version as current_version if sys.version_info >= (3, 8): # pragma: no cover (py38+) from importlib.metadata import PackageNotFoundError, distribution @@ -63,7 +62,7 @@ def provision(state: State) -> int | bool: keys=["min_version", "minversion"], of_type=Version, # do not include local version specifier (because it's not allowed in version spec per PEP-440) - default=Version(current_version), + default=Version("4.0"), desc="Define the minimal tox version required to run", ) state.conf.core.add_config( @@ -75,12 +74,7 @@ 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}")) + requires.append(Requirement(f"tox >= {min_version}")) return requires state.conf.core.add_config( diff --git a/tests/test_provision.py b/tests/test_provision.py index ff755ab02..56952a184 100644 --- a/tests/test_provision.py +++ b/tests/test_provision.py @@ -8,15 +8,14 @@ from pathlib import Path from subprocess import check_call from typing import Callable, Iterator +from unittest import mock from zipfile import ZipFile import pytest from devpi_process import Index, IndexServer from filelock import FileLock from packaging.requirements import Requirement -from packaging.version import Version -from tox import __version__ from tox.pytest import MonkeyPatch, TempPathFactory, ToxProjectCreator if sys.version_info >= (3, 8): # pragma: no cover (py38+) @@ -61,14 +60,11 @@ def _make_tox_wheel( pkg_builder: Callable[[Path, Path, list[str], bool], Path], ) -> Path: with elapsed("acquire current tox wheel"): # takes around 3.2s on build - package: Path | None = None - if "TOX_PACKAGE" in os.environ: - env_tox_pkg = Path(os.environ["TOX_PACKAGE"]) # pragma: no cover - if env_tox_pkg.exists() and env_tox_pkg.suffix == ".whl": # pragma: no cover - package = env_tox_pkg # pragma: no cover - if package is None: - # when we don't get a wheel path injected, build it (for example when running from an IDE) - into = tmp_path_factory.mktemp("dist") # pragma: no cover + into = tmp_path_factory.mktemp("dist") # pragma: no cover + from tox.version import version_tuple + + version = f"{version_tuple[0]}.{version_tuple[1]}.{version_tuple[2] +1}" + with mock.patch.dict(os.environ, {"SETUPTOOLS_SCM_PRETEND_VERSION": version}): package = pkg_builder(into, Path(__file__).parents[1], ["wheel"], False) # pragma: no cover return package @@ -189,5 +185,4 @@ 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(__version__).base_version - assert requires == {"minversion": version, "requires": ["p", f"tox>={version}"]} + assert requires == {"minversion": "4.0", "requires": ["p", "tox>=4.0"]}