From 99479342ea9a12e7bf298508e1233c6c3b31373d Mon Sep 17 00:00:00 2001 From: Jakub Kuczys Date: Tue, 27 Dec 2022 23:22:56 +0100 Subject: [PATCH] Fix ordering of 3.0.0.dev1 and 3.0.0a1.dev1 versions (#5932) --- redbot/__init__.py | 10 +++++++++- tests/core/test_version.py | 20 ++++++++++++++++---- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/redbot/__init__.py b/redbot/__init__.py index 04727a960..caed5eddd 100644 --- a/redbot/__init__.py +++ b/redbot/__init__.py @@ -149,12 +149,20 @@ class VersionInfo: ] ] = [] for obj in (self, other): + if ( + obj.releaselevel == obj.FINAL + and obj.post_release is None + and obj.dev_release is not None + ): + releaselevel = -1 + else: + releaselevel = obj._RELEASE_LEVELS.index(obj.releaselevel) tups.append( ( obj.major, obj.minor, obj.micro, - obj._RELEASE_LEVELS.index(obj.releaselevel), + releaselevel, obj.serial if obj.serial is not None else _inf, obj.post_release if obj.post_release is not None else -_inf, obj.dev_release if obj.dev_release is not None else _inf, diff --git a/tests/core/test_version.py b/tests/core/test_version.py index 12c55c749..a978e270a 100644 --- a/tests/core/test_version.py +++ b/tests/core/test_version.py @@ -2,6 +2,7 @@ import importlib.metadata import os import sys from packaging.requirements import Requirement +from packaging.version import Version import pytest @@ -16,10 +17,20 @@ def test_version_working(): # When adding more of these, ensure they are added in ascending order of precedence version_tests = ( + "3.0.0.dev1", + "3.0.0.dev2", + "3.0.0a32.dev12", + "3.0.0a32", "3.0.0a32.post10.dev12", + "3.0.0a32.post10", + "3.0.0b23.dev4", + "3.0.0b23", + "3.0.0b23.post5.dev16", + "3.0.0b23.post5", "3.0.0rc1.dev1", "3.0.0rc1", "3.0.0", + "3.0.0.post1.dev1", "3.0.1.dev1", "3.0.1.dev2+gdbaf31e", "3.0.1.dev2+gdbaf31e.dirty", @@ -37,10 +48,11 @@ def test_version_info_str_parsing(): def test_version_info_lt(): - for next_idx, cur in enumerate(version_tests[:-1], start=1): - cur_test = VersionInfo.from_str(cur) - next_test = VersionInfo.from_str(version_tests[next_idx]) - assert cur_test < next_test + for version_cls in (Version, VersionInfo.from_str): + for next_idx, cur in enumerate(version_tests[:-1], start=1): + cur_test = version_cls(cur) + next_test = version_cls(version_tests[next_idx]) + assert cur_test < next_test def test_version_info_gt():