!223 [sync] PR-222: dnf:Remove --duplicates and --oldinstallonly exit with 0 when nothing to remove and Add all candidates for reinstall to solver

From: @openeuler-sync-bot 
Reviewed-by: @anonymous_z 
Signed-off-by: @anonymous_z
This commit is contained in:
openeuler-ci-bot 2024-06-17 11:37:25 +00:00 committed by Gitee
commit 916ff75f16
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
4 changed files with 145 additions and 1 deletions

View File

@ -0,0 +1,73 @@
From 96f8d79c37e119ff56f730797865121b63241a6b Mon Sep 17 00:00:00 2001
From: Jaroslav Mracek <jmracek@redhat.com>
Date: Thu, 15 Feb 2024 11:28:59 +0100
Subject: [PATCH] Add all candidates for reinstall to solver
Resolves: https://issues.redhat.com/browse/RHEL-25005
Conflict:NA
Reference:https://github.com/rpm-software-management/dnf/commit/96f8d79c37e119ff56f730797865121b63241a6b
---
dnf/base.py | 9 ++++++---
dnf/query.py | 5 ++++-
tests/test_queries.py | 7 ++++++-
3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/dnf/base.py b/dnf/base.py
index 9b59b9d7e5..552d53f4c7 100644
--- a/dnf/base.py
+++ b/dnf/base.py
@@ -2336,19 +2336,22 @@ def reinstall(self, pkg_spec, old_reponame=None, new_reponame=None,
if not installed_pkgs:
raise dnf.exceptions.PackagesNotInstalledError(
- 'no package matched', pkg_spec, available_nevra2pkg.values())
+ 'no package matched', pkg_spec, available_q.run())
cnt = 0
clean_deps = self.conf.clean_requirements_on_remove
+ strict = self.conf.strict
for installed_pkg in installed_pkgs:
try:
- available_pkg = available_nevra2pkg[ucd(installed_pkg)]
+ available_pkgs = available_nevra2pkg[ucd(installed_pkg)]
except KeyError:
if not remove_na:
continue
self._goal.erase(installed_pkg, clean_deps=clean_deps)
else:
- self._goal.install(available_pkg)
+ sltr = dnf.selector.Selector(self.sack)
+ sltr.set(pkg=available_pkgs)
+ self._goal.install(select=sltr, optional=(not strict))
cnt += 1
if cnt == 0:
diff --git a/dnf/query.py b/dnf/query.py
index ab4139bf9a..02e631a6ec 100644
--- a/dnf/query.py
+++ b/dnf/query.py
@@ -43,4 +43,7 @@ def _by_provides(sack, patterns, ignore_case=False, get_query=False):
return q.run()
def _per_nevra_dict(pkg_list):
- return {ucd(pkg):pkg for pkg in pkg_list}
+ nevra_dic = {}
+ for pkg in pkg_list:
+ nevra_dic.setdefault(ucd(pkg), []).append(pkg)
+ return nevra_dic
diff --git a/tests/test_queries.py b/tests/test_queries.py
index cdcb7ca453..e025300879 100644
--- a/tests/test_queries.py
+++ b/tests/test_queries.py
@@ -128,4 +128,9 @@ def test_per_nevra_dict(self):
dct = dnf.query._per_nevra_dict(pkgs)
self.assertCountEqual(dct.keys(),
["lotus-3-16.x86_64", "lotus-3-16.i686"])
- self.assertCountEqual(dct.values(), pkgs)
+ test_list = []
+ for list_items in dct.values():
+ for item in list_items:
+ test_list.append(item)
+
+ self.assertCountEqual(test_list, pkgs)

View File

@ -0,0 +1,32 @@
From 720338fed8124b120b56cc99cc0b13dfe48ffe95 Mon Sep 17 00:00:00 2001
From: Pavla Kratochvilova <pkratoch@redhat.com>
Date: Fri, 5 Apr 2024 14:42:38 +0200
Subject: [PATCH] remove --duplicates: when no duplicates, exit with 0
(RHEL-6424)
If no duplicates are present, then the command succesfully removed all
duplicates and should exit with 0 and write the message to stdout
instead of stderr.
Resolves: https://issues.redhat.com/browse/RHEL-6424
Conflict:NA
Reference:https://github.com/rpm-software-management/dnf/commit/720338fed8124b120b56cc99cc0b13dfe48ffe95
---
dnf/cli/commands/remove.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dnf/cli/commands/remove.py b/dnf/cli/commands/remove.py
index e455ba6e61..af9622fdef 100644
--- a/dnf/cli/commands/remove.py
+++ b/dnf/cli/commands/remove.py
@@ -92,7 +92,8 @@ def run(self):
instonly = self.base._get_installonly_query(q.installed())
dups = q.duplicated().difference(instonly)
if not dups:
- raise dnf.exceptions.Error(_('No duplicated packages found for removal.'))
+ logger.info(_('No duplicated packages found for removal.'))
+ return
for (name, arch), pkgs_list in dups._na_dict().items():
if len(pkgs_list) < 2:

View File

@ -0,0 +1,30 @@
From 87eb5a7a3561381b5ef5e70548f49288251300fc Mon Sep 17 00:00:00 2001
From: Pavla Kratochvilova <pkratoch@redhat.com>
Date: Fri, 5 Apr 2024 14:43:04 +0200
Subject: [PATCH] remove --oldinstallonly: when no old installonly packages,
exit with 0
If no old installonly packages are present, then the command succesfully
removed all of them and should exit with 0 and write the message to
stdout instead of stderr.
Conflict:NA
Reference:https://github.com/rpm-software-management/dnf/commit/87eb5a7a3561381b5ef5e70548f49288251300fc
---
dnf/cli/commands/remove.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/dnf/cli/commands/remove.py b/dnf/cli/commands/remove.py
index af9622fdef..32e78d6d4d 100644
--- a/dnf/cli/commands/remove.py
+++ b/dnf/cli/commands/remove.py
@@ -124,8 +124,7 @@ def run(self):
for pkg in instonly:
self.base.package_remove(pkg)
else:
- raise dnf.exceptions.Error(
- _('No old installonly packages found for removal.'))
+ logger.info(_('No old installonly packages found for removal.'))
return
# Remove groups.

View File

@ -3,7 +3,7 @@
Name: dnf
Version: 4.16.2
Release: 3
Release: 4
Summary: A software package manager that manages packages on Linux distributions.
License: GPL-2.0-or-later AND GPL-1.0-only
URL: https://github.com/rpm-software-management/dnf
@ -25,6 +25,9 @@ Patch6001: 0001-Add-loongarch-architecture-support.patch
%endif
Patch6002: backport-Fix-bash-completion-due-to-sqlite-changes.patch
Patch6003: backport-remove-duplicates-when-no-duplicates-exit-with-0.patch
Patch6004: backport-remove-oldinstallonly-when-no-old-installonly-packages-exit-with-0.patch
Patch6005: backport-Add-all-candidates-for-reinstall-to-solver.patch
BuildArch: noarch
BuildRequires: cmake gettext systemd bash-completion python3-sphinx
@ -252,6 +255,12 @@ popd
%{_mandir}/man8/%{name}-automatic.8*
%changelog
* Mon May 6 2024 hanhuihui <hanhuihui5@huawei.com> - 4.16.2-4
- Type:bugfix
- CVE:NA
- SUG:NA
- DESC:dnf:Remove --duplicates and --oldinstallonly exit with 0 when nothing to remove and Add all candidates for reinstall to solver
* Mon May 06 2024 huangwenhua <huangwenhua@kylinos.cn> - 4.16.2-3
- Type:bugfix
- CVE:NA