Last active
November 13, 2023 11:42
-
-
Save liuyujielol/d6d78d14059ca35637f2042f8d65fb4b to your computer and use it in GitHub Desktop.
nvcmp-import-portage
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| From 5d3ff4305a77290d9d87d8e57941b1edec31fdd8 Mon Sep 17 00:00:00 2001 | |
| From: liuyujielol <2073201758GD@gmail.com> | |
| Date: Mon, 13 Nov 2023 15:59:12 +0800 | |
| Subject: [PATCH] import portage | |
| Signed-off-by: liuyujielol <2073201758GD@gmail.com> | |
| --- | |
| nvchecker/sortversion.py | 11 +++++++++++ | |
| nvchecker/tools.py | 8 +++++++- | |
| tests/test_sortversion.py | 8 ++++++++ | |
| 3 files changed, 26 insertions(+), 1 deletion(-) | |
| diff --git a/nvchecker/sortversion.py b/nvchecker/sortversion.py | |
| index 1a2bc9b..e247262 100644 | |
| --- a/nvchecker/sortversion.py | |
| +++ b/nvchecker/sortversion.py | |
| @@ -19,6 +19,16 @@ except ImportError: | |
| raise NotImplementedError("Using vercmp but pyalpm can not be imported!") | |
| vercmp_available = False | |
| +try: | |
| + from functools import cmp_to_key | |
| + from portage import versions | |
| + evercmp = cmp_to_key(versions.vercmp) | |
| + evercmp_available = True | |
| +except ImportError: | |
| + def evercmp(k): | |
| + raise NotImplementedError("Using evercmp but portage can not be imported!") | |
| + evercmp_available = False | |
| + | |
| try: | |
| from awesomeversion import AwesomeVersion | |
| awesomeversion_available = True | |
| @@ -30,5 +40,6 @@ except ImportError: | |
| sort_version_keys = { | |
| "parse_version": parse_version, | |
| "vercmp": vercmp, | |
| + "evercmp": evercmp, | |
| "awesomeversion": AwesomeVersion, | |
| } | |
| diff --git a/nvchecker/tools.py b/nvchecker/tools.py | |
| index 0c6b615..6676a6b 100644 | |
| --- a/nvchecker/tools.py | |
| +++ b/nvchecker/tools.py | |
| @@ -4,10 +4,12 @@ | |
| import sys | |
| import argparse | |
| + | |
| import structlog | |
| import json | |
| from . import core | |
| +from portage.versions import ververify | |
| logger = structlog.get_logger(logger_name=__name__) | |
| @@ -78,7 +80,7 @@ def cmp() -> None: | |
| parser.add_argument('-a', '--all', action='store_true', | |
| help="Include unchanged versions.") | |
| parser.add_argument('-s', '--sort', | |
| - choices=('parse_version', 'vercmp', 'awesomeversion', 'none'), | |
| + choices=('parse_version', 'vercmp', "evercmp" ,'awesomeversion', 'none'), | |
| default='parse_version', | |
| help='Version compare method to backwards the arrow ' | |
| '(default: parse_version)') | |
| @@ -116,6 +118,10 @@ def cmp() -> None: | |
| } | |
| if oldver is not None and newver is not None: | |
| + if args.sort == "evercmp": | |
| + ververify(oldver, 0) | |
| + ververify(newver, 0) | |
| + | |
| if oldver == newver: | |
| diff['delta'] = 'equal' | |
| diff --git a/tests/test_sortversion.py b/tests/test_sortversion.py | |
| index 6fd1d1d..4716510 100644 | |
| --- a/tests/test_sortversion.py | |
| +++ b/tests/test_sortversion.py | |
| @@ -3,6 +3,7 @@ import pytest | |
| from nvchecker.sortversion import ( | |
| parse_version, | |
| vercmp, vercmp_available, | |
| + evercmp, evercmp_available, | |
| AwesomeVersion, awesomeversion_available, | |
| ) | |
| @@ -21,3 +22,10 @@ def test_awesomeversion(): | |
| assert AwesomeVersion("v6.0") < AwesomeVersion("6.1") | |
| assert AwesomeVersion("v6.0") > AwesomeVersion("v6.0b0") | |
| +@pytest.mark.skipif(not evercmp_available, | |
| + reason="needs portage") | |
| +def test_evercmp(): | |
| + assert evercmp("1.1a") < evercmp("1.1b") | |
| + assert evercmp("2.2.0") < evercmp("2.2.0_p20231016") | |
| + assert evercmp("6.0") < evercmp("6.1_rc1") | |
| + #assert evercmp("v6.0") < evercmp("v6.1_rc1") # fail | |
| -- | |
| 2.42.1 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment