From c9af1fdcf521a19a83682ea97a60a781d4c58ddb Mon Sep 17 00:00:00 2001 From: Technofab Date: Sat, 17 Jun 2023 15:01:11 +0200 Subject: [PATCH] chore: force looseversion when it is used on either old or new --- requirements/pypi.txt | 10 ++-------- src/bumpver/cli.py | 8 +++++++- src/bumpver/version.py | 17 +++++++++-------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/requirements/pypi.txt b/requirements/pypi.txt index 243a810..dbfb1a3 100644 --- a/requirements/pypi.txt +++ b/requirements/pypi.txt @@ -8,16 +8,10 @@ # should see if there is a conda package that suits your needs. pathlib2 -typing; python_version < "3.5" -click<8.0; python_version < "3.6" -click; python_version >= "3.6" +click toml lexid colorama>=0.4 # looseversion is needed to parse non PEP440 versions -looseversion; python_version >= "3.5" - -# setuptools is needed for pkg_resources.parse_version -# Support for Python 2 was dropped with v45 -setuptools<45.0.0; python_version < "3.5" +looseversion diff --git a/src/bumpver/cli.py b/src/bumpver/cli.py index cea9568..c47e800 100755 --- a/src/bumpver/cli.py +++ b/src/bumpver/cli.py @@ -517,7 +517,13 @@ def _is_valid_version(raw_pattern: str, old_version: str, new_version: str) -> b logger.error(f"Invalid version '{new_version}' for pattern '{raw_pattern}'") return False - if version.parse_version(new_version) <= version.parse_version(old_version): + force_loose = not isinstance( + version.parse_version(new_version), type(version.parse_version(old_version)) + ) + if ( + version.parse_version(new_version, force_loose) + <= version.parse_version(old_version, force_loose) + ): logger.error("Invariant violated: New version must be greater than old version ") logger.error(f" Failed Invariant: '{new_version}' > '{old_version}'") logger.error("If the invariant is from vcs tags try '--ignore-vcs-tag' option.") diff --git a/src/bumpver/version.py b/src/bumpver/version.py index 6470a62..6c7e08c 100644 --- a/src/bumpver/version.py +++ b/src/bumpver/version.py @@ -9,17 +9,18 @@ import datetime as dt MaybeInt = typ.Optional[int] -def parse_version(version: str) -> typ.Any: +def parse_version(version: str, loose: bool = False) -> typ.Any: # pylint: disable=import-outside-toplevel; lazy import to speed up --help - try: - import pkg_resources + if not loose: + try: + import pkg_resources + return pkg_resources.parse_version(version) + except (ImportError, ValueError): + pass - return pkg_resources.parse_version(version) - except (ImportError, ValueError): - import looseversion - - return looseversion.LooseVersion(version) + import looseversion + return looseversion.LooseVersion(version) class V1CalendarInfo(typ.NamedTuple):