Skip to content

Instantly share code, notes, and snippets.

@liuyujielol
Last active November 13, 2023 11:42
Show Gist options
  • Select an option

  • Save liuyujielol/d6d78d14059ca35637f2042f8d65fb4b to your computer and use it in GitHub Desktop.

Select an option

Save liuyujielol/d6d78d14059ca35637f2042f8d65fb4b to your computer and use it in GitHub Desktop.
nvcmp-import-portage
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