diff options
author | CoprDistGit <infra@openeuler.org> | 2023-09-19 03:19:34 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-09-19 03:19:34 +0000 |
commit | e9f07e4582f7977395d5c26d41e3fc97ed9e077c (patch) | |
tree | 478a9376a299c9450151b72c29c5c790c1023564 /backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch | |
parent | a4252603249fd648f2870ce2dcbaf86ebcf1f118 (diff) |
automatic import of anacondaopeneuler20.03
Diffstat (limited to 'backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch')
-rw-r--r-- | backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch b/backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch new file mode 100644 index 0000000..447c5b9 --- /dev/null +++ b/backport-Sort-RPM-versions-via-rpm.labelCompare-and-not-via-p.patch @@ -0,0 +1,109 @@ +From 1742188518c9af7e3cd060a26f3a3b1e4cb61e91 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> +Date: Fri, 3 Feb 2023 21:46:15 +0100 +Subject: [PATCH] Sort RPM versions via rpm.labelCompare() and not via + packaging.version.LegacyVersion() + +Packaging 22+ removed the long-deprecated packaging.version.LegacyVersion class. +The packaging.version library is intended to parse Python (PEP 440) versions, +not arbitrary versions and definitively not RPM versions. + +Even if LegacyVersion was still available, it may produce incorrect results +if the version contains ~, ^ or other characters with special meaning in RPM. + +This assumes the Python rpm module is always available. +If that assumption is wrong +the logic from rpm.labelCompare() needs to be reimplemented instead. + +Reference:https://github.com/rhinstaller/anaconda/commit/1742188518c9af7e3cd060a26f3a3b1e4cb61e91 +Conflict:NA +--- + pyanaconda/core/payload.py | 5 +++++ + pyanaconda/modules/payloads/base/utils.py | 13 ++----------- + pyanaconda/modules/storage/checker/utils.py | 4 ++-- + 3 files changed, 9 insertions(+), 13 deletions(-) + +diff --git a/pyanaconda/core/payload.py b/pyanaconda/core/payload.py +index 17277b7..7817150 100644 +--- a/pyanaconda/core/payload.py ++++ b/pyanaconda/core/payload.py +@@ -15,11 +15,16 @@ + # License and may only be used or replicated with the express permission of + # Red Hat, Inc. + # ++from functools import cmp_to_key + from urllib.parse import quote, unquote + ++import rpm ++ + from pyanaconda.core.i18n import _ + from pyanaconda.core.regexes import URL_PARSE + ++rpm_version_key = cmp_to_key(rpm.labelCompare) ++ + + def parse_nfs_url(nfs_url): + """Parse NFS URL into components. +diff --git a/pyanaconda/modules/payloads/base/utils.py b/pyanaconda/modules/payloads/base/utils.py +index 738ae66..5f19b57 100644 +--- a/pyanaconda/modules/payloads/base/utils.py ++++ b/pyanaconda/modules/payloads/base/utils.py +@@ -17,13 +17,11 @@ + # License and may only be used or replicated with the express permission of + # Red Hat, Inc. + # +-import functools + import os + import stat + +-from packaging.version import LegacyVersion as parse_version +- + from pyanaconda.anaconda_loggers import get_module_logger ++from pyanaconda.core.payload import rpm_version_key + log = get_module_logger(__name__) + + +@@ -70,11 +68,4 @@ def get_dir_size(directory): + + def sort_kernel_version_list(kernel_version_list): + """Sort the given kernel version list.""" +- kernel_version_list.sort(key=functools.cmp_to_key(_compare_versions)) +- +- +-def _compare_versions(v1, v2): +- """Compare two version number strings.""" +- first_version = parse_version(v1) +- second_version = parse_version(v2) +- return (first_version > second_version) - (first_version < second_version) ++ kernel_version_list.sort(key=rpm_version_key) +diff --git a/pyanaconda/modules/storage/checker/utils.py b/pyanaconda/modules/storage/checker/utils.py +index 180c351..9ccd398 100644 +--- a/pyanaconda/modules/storage/checker/utils.py ++++ b/pyanaconda/modules/storage/checker/utils.py +@@ -20,7 +20,6 @@ gi.require_version("BlockDev", "2.0") + from gi.repository import BlockDev as blockdev + + from collections import defaultdict +-from packaging.version import LegacyVersion as parse_version + + from blivet import arch, util + from blivet.devicefactory import get_device_type +@@ -34,6 +33,7 @@ from pyanaconda.core.constants import productName, STORAGE_REFORMAT_BLOCKLIST, \ + STORAGE_LUKS2_MIN_RAM, STORAGE_ROOT_DEVICE_TYPES, STORAGE_REQ_PARTITION_SIZES, \ + STORAGE_MUST_NOT_BE_ON_ROOT + from pyanaconda.core.i18n import _ ++from pyanaconda.core.payload import rpm_version_key + from pyanaconda.core.storage import DEVICE_TEXT_MAP + from pyanaconda.modules.storage.platform import platform + +@@ -259,7 +259,7 @@ def _check_opal_firmware_kernel_version(detected_version, required_version): + """ + try: + if detected_version and required_version: +- return parse_version(detected_version) >= parse_version(required_version) ++ return rpm_version_key(detected_version) >= rpm_version_key(required_version) + except Exception as e: # pylint: disable=broad-except + log.warning("Couldn't check the firmware kernel version: %s", str(e)) + +-- +2.23.0
\ No newline at end of file |