Backport fixes for RHBZ#1642796 from upstream master
This commit is contained in:
parent
2824499cf3
commit
3d652110f3
@ -0,0 +1,177 @@
|
|||||||
|
From d2fd9ee7e3cf31d7c90c7f8202de5c360c3511a4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jaroslav Mracek <jmracek@redhat.com>
|
||||||
|
Date: Tue, 6 Nov 2018 15:38:00 +0100
|
||||||
|
Subject: [PATCH] Set tsi state if multiple pkgs have same nevra (RhBug:1642796)
|
||||||
|
|
||||||
|
---
|
||||||
|
dnf/yum/rpmtrans.py | 80 ++++++++++++++++++++++++++++++++++++++++----------------------------------------
|
||||||
|
1 file changed, 40 insertions(+), 40 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/dnf/yum/rpmtrans.py b/dnf/yum/rpmtrans.py
|
||||||
|
index 9a80ab6..f8b76a7 100644
|
||||||
|
--- a/dnf/yum/rpmtrans.py
|
||||||
|
+++ b/dnf/yum/rpmtrans.py
|
||||||
|
@@ -217,22 +217,23 @@ class RPMTransaction(object):
|
||||||
|
|
||||||
|
if hasattr(cbkey, "pkg"):
|
||||||
|
tsi = cbkey
|
||||||
|
- return tsi.pkg, tsi.action, tsi
|
||||||
|
+ return [tsi]
|
||||||
|
|
||||||
|
te = self._te_list[self._te_index]
|
||||||
|
te_nevra = dnf.util._te_nevra(te)
|
||||||
|
- if self._tsi_cache is not None:
|
||||||
|
- if str(self._tsi_cache) == te_nevra:
|
||||||
|
- return self._tsi_cache.pkg, self._tsi_cache.action, self._tsi_cache
|
||||||
|
-
|
||||||
|
+ if self._tsi_cache:
|
||||||
|
+ if str(self._tsi_cache[0]) == te_nevra:
|
||||||
|
+ return self._tsi_cache
|
||||||
|
+ items = []
|
||||||
|
for tsi in self.base.transaction:
|
||||||
|
if tsi.action == libdnf.transaction.TransactionItemAction_REINSTALL:
|
||||||
|
# skip REINSTALL in order to return REINSTALLED
|
||||||
|
continue
|
||||||
|
if str(tsi) == te_nevra:
|
||||||
|
- self._tsi_cache = tsi
|
||||||
|
- return tsi.pkg, tsi.action, tsi
|
||||||
|
-
|
||||||
|
+ items.append(tsi)
|
||||||
|
+ if items:
|
||||||
|
+ self._tsi_cache = items
|
||||||
|
+ return items
|
||||||
|
raise RuntimeError("TransactionItem not found for key: %s" % cbkey)
|
||||||
|
|
||||||
|
def callback(self, what, amount, total, key, client_data):
|
||||||
|
@@ -292,13 +293,14 @@ class RPMTransaction(object):
|
||||||
|
self._te_index = index
|
||||||
|
self.complete_actions += 1
|
||||||
|
if not self.test:
|
||||||
|
- _, _, tsi = self._extract_cbkey(key)
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
for display in self.displays:
|
||||||
|
- display.filelog(tsi.pkg, tsi.action)
|
||||||
|
+ display.filelog(transaction_list[0].pkg, transaction_list[0].action)
|
||||||
|
|
||||||
|
def _instOpenFile(self, key):
|
||||||
|
self.lastmsg = None
|
||||||
|
- pkg, _, _ = self._extract_cbkey(key)
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ pkg = transaction_list[0].pkg
|
||||||
|
rpmloc = pkg.localPkg()
|
||||||
|
try:
|
||||||
|
self.fd = open(rpmloc)
|
||||||
|
@@ -312,15 +314,16 @@ class RPMTransaction(object):
|
||||||
|
return self.fd.fileno()
|
||||||
|
|
||||||
|
def _instCloseFile(self, key):
|
||||||
|
- _, _, tsi = self._extract_cbkey(key)
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
self.fd.close()
|
||||||
|
self.fd = None
|
||||||
|
|
||||||
|
if self.test or not self.trans_running:
|
||||||
|
return
|
||||||
|
-
|
||||||
|
- if tsi.state == libdnf.transaction.TransactionItemState_UNKNOWN:
|
||||||
|
- tsi.state = libdnf.transaction.TransactionItemState_DONE
|
||||||
|
+ for tsi in transaction_list:
|
||||||
|
+ if tsi.state == libdnf.transaction.TransactionItemState_UNKNOWN:
|
||||||
|
+ tsi.state = libdnf.transaction.TransactionItemState_DONE
|
||||||
|
+ break
|
||||||
|
|
||||||
|
for display in self.displays:
|
||||||
|
display.filelog(tsi.pkg, tsi.action)
|
||||||
|
@@ -333,27 +336,28 @@ class RPMTransaction(object):
|
||||||
|
display.progress(None, action, None, None, None, None)
|
||||||
|
|
||||||
|
def _instProgress(self, amount, total, key):
|
||||||
|
- _, _, tsi = self._extract_cbkey(key)
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ pkg = transaction_list[0].pkg
|
||||||
|
+ action = transaction_list[0].action
|
||||||
|
for display in self.displays:
|
||||||
|
- display.progress(
|
||||||
|
- tsi.pkg, tsi.action, amount, total, self.complete_actions,
|
||||||
|
- self.total_actions)
|
||||||
|
+ display.progress(pkg, action, amount, total, self.complete_actions, self.total_actions)
|
||||||
|
|
||||||
|
def _uninst_start(self, key):
|
||||||
|
self.total_removed += 1
|
||||||
|
|
||||||
|
def _uninst_progress(self, amount, total, key):
|
||||||
|
- _, _, tsi = self._extract_cbkey(key)
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ pkg = transaction_list[0].pkg
|
||||||
|
+ action = transaction_list[0].action
|
||||||
|
for display in self.displays:
|
||||||
|
- display.progress(
|
||||||
|
- tsi.pkg, tsi.action, amount, total, self.complete_actions,
|
||||||
|
- self.total_actions)
|
||||||
|
+ display.progress(pkg, action, amount, total, self.complete_actions, self.total_actions)
|
||||||
|
|
||||||
|
def _unInstStop(self, key):
|
||||||
|
- _, _, tsi = self._extract_cbkey(key)
|
||||||
|
-
|
||||||
|
- if tsi.state == libdnf.transaction.TransactionItemState_UNKNOWN:
|
||||||
|
- tsi.state = libdnf.transaction.TransactionItemState_DONE
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ for tsi in transaction_list:
|
||||||
|
+ if tsi.state == libdnf.transaction.TransactionItemState_UNKNOWN:
|
||||||
|
+ tsi.state = libdnf.transaction.TransactionItemState_DONE
|
||||||
|
+ break
|
||||||
|
|
||||||
|
for display in self.displays:
|
||||||
|
display.filelog(tsi.pkg, tsi.action)
|
||||||
|
@@ -364,31 +368,26 @@ class RPMTransaction(object):
|
||||||
|
self._scriptout()
|
||||||
|
|
||||||
|
def _cpioError(self, key):
|
||||||
|
- # In the case of a remove, we only have a name, not a tsi:
|
||||||
|
- pkg, _, _ = self._extract_cbkey(key)
|
||||||
|
- msg = "Error in cpio payload of rpm package %s" % pkg
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ msg = "Error in cpio payload of rpm package %s" % transaction_list[0].pkg
|
||||||
|
for display in self.displays:
|
||||||
|
display.error(msg)
|
||||||
|
|
||||||
|
def _unpackError(self, key):
|
||||||
|
- pkg, _, tsi = self._extract_cbkey(key)
|
||||||
|
- msg = "Error unpacking rpm package %s" % pkg
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ tsi = transaction_list[0]
|
||||||
|
+ msg = "Error unpacking rpm package %s" % tsi.pkg
|
||||||
|
for display in self.displays:
|
||||||
|
display.error(msg)
|
||||||
|
tsi.state = libdnf.transaction.TransactionItemState_ERROR
|
||||||
|
|
||||||
|
def _scriptError(self, amount, total, key):
|
||||||
|
# "amount" carries the failed scriptlet tag,
|
||||||
|
# "total" carries fatal/non-fatal status
|
||||||
|
scriptlet_name = rpm.tagnames.get(amount, "<unknown>")
|
||||||
|
|
||||||
|
- pkg, _, _ = self._extract_cbkey(key)
|
||||||
|
- if pkg is not None:
|
||||||
|
- name = pkg.name
|
||||||
|
- elif dnf.util.is_string_type(key):
|
||||||
|
- name = key
|
||||||
|
- else:
|
||||||
|
- name = 'None'
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ name = transaction_list[0].pkg.name
|
||||||
|
|
||||||
|
msg = ("Error in %s scriptlet in rpm package %s" % (scriptlet_name, name))
|
||||||
|
|
||||||
|
@@ -401,7 +400,8 @@ class RPMTransaction(object):
|
||||||
|
if key is None and self._te_list == []:
|
||||||
|
pkg = 'None'
|
||||||
|
else:
|
||||||
|
- pkg, _, _ = self._extract_cbkey(key)
|
||||||
|
+ transaction_list = self._extract_cbkey(key)
|
||||||
|
+ pkg = transaction_list[0].pkg
|
||||||
|
complete = self.complete_actions if self.total_actions != 0 and self.complete_actions != 0 \
|
||||||
|
else 1
|
||||||
|
total = self.total_actions if self.total_actions != 0 and self.complete_actions != 0 else 1
|
||||||
|
--
|
||||||
|
libgit2 0.26.7
|
||||||
|
|
6
dnf.spec
6
dnf.spec
@ -73,12 +73,13 @@ It supports RPMs, modules and comps groups & environments.
|
|||||||
|
|
||||||
Name: dnf
|
Name: dnf
|
||||||
Version: 4.0.4
|
Version: 4.0.4
|
||||||
Release: 1%{?dist}
|
Release: 2%{?dist}
|
||||||
Summary: %{pkg_summary}
|
Summary: %{pkg_summary}
|
||||||
# For a breakdown of the licensing, see PACKAGE-LICENSING
|
# For a breakdown of the licensing, see PACKAGE-LICENSING
|
||||||
License: GPLv2+ and GPLv2 and GPL
|
License: GPLv2+ and GPLv2 and GPL
|
||||||
URL: https://github.com/rpm-software-management/dnf
|
URL: https://github.com/rpm-software-management/dnf
|
||||||
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
|
Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz
|
||||||
|
Patch0001: 0001-Set-tsi-state-if-multiple-pkgs-have-same-nevra-RhBug1642796.patch
|
||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
BuildRequires: cmake
|
BuildRequires: cmake
|
||||||
BuildRequires: gettext
|
BuildRequires: gettext
|
||||||
@ -494,6 +495,9 @@ ln -sr %{buildroot}%{confdir}/vars %{buildroot}%{_sysconfdir}/yum/vars
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Nov 07 2018 Jaroslav Mracek <jmracek@redhat.com> - 4.0.4-2
|
||||||
|
- Backport fixes for RHBZ#1642796 from upstream master
|
||||||
|
|
||||||
* Mon Oct 15 2018 Jaroslav Mracek <jmracek@redhat.com> - 4.0.4-1
|
* Mon Oct 15 2018 Jaroslav Mracek <jmracek@redhat.com> - 4.0.4-1
|
||||||
- Update to 4.0.4
|
- Update to 4.0.4
|
||||||
- Add dnssec extension
|
- Add dnssec extension
|
||||||
|
Loading…
Reference in New Issue
Block a user