Blob Blame History Raw
From 94a074b9747a437c478e388dc76ed90d06d8a666 Mon Sep 17 00:00:00 2001
From: Daniel Mach <dmach@redhat.com>
Date: Wed, 5 Jun 2019 08:29:03 +0200
Subject: [PATCH] [history] Don't store failed transactions as succeeded.

---
 dnf/base.py       |  7 ++++---
 dnf/db/history.py | 16 ++++++++++------
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/dnf/base.py b/dnf/base.py
index 7a388ec..add6403 100644
--- a/dnf/base.py
+++ b/dnf/base.py
@@ -987,15 +987,16 @@ class Base(object):
             # particular element failed and if not, decide that is the
             # case.
             failed = [el for el in self._ts if el.Failed()]
-            if len(failed) > 0:
+            if failed:
                 for te in failed:
                     te_nevra = dnf.util._te_nevra(te)
                     for tsi in self._transaction:
                         if str(tsi) == te_nevra:
                             tsi.state = libdnf.transaction.TransactionItemState_ERROR
 
                 errstring = _('Errors occurred during transaction.')
                 logger.debug(errstring)
+                self.history.end(rpmdbv)
             else:
                 login = dnf.util.get_effective_login()
                 msg = _("Failed to obtain the transaction lock "
@@ -1006,7 +1007,7 @@ class Base(object):
         else:
             if self._record_history():
                 herrors = [ucd(x) for x in errors]
-                self.history.end(rpmdbv, 2, errors=herrors)
+                self.history.end(rpmdbv)
 
             logger.critical(_("Transaction couldn't start:"))
             for e in errors:
@@ -1069,7 +1070,7 @@ class Base(object):
             count = display_banner(tsi.pkg, count)
 
         rpmdbv = rpmdb_sack._rpmdb_version()
-        self.history.end(rpmdbv, 0)
+        self.history.end(rpmdbv)
 
         timer()
         self._trans_success = True
diff --git a/dnf/db/history.py b/dnf/db/history.py
index dc9c53b..7f22f97 100644
--- a/dnf/db/history.py
+++ b/dnf/db/history.py
@@ -486,22 +486,26 @@ class SwdbInterface(object):
             self.swdb.log_error(self._tid, error)
     '''
 
-    # TODO: rename to end_transaction?
-    def end(self, end_rpmdb_version="", return_code=0, errors=None):
-        assert return_code or not errors
-        # TODO: fix return_code
-        return_code = not bool(return_code)
+    def end(self, end_rpmdb_version="", return_code=None, errors=None):
         if not hasattr(self, '_tid'):
             return  # Failed at beg() time
 
+        if return_code is None:
+            # return_code/state auto-detection
+            return_code = libdnf.transaction.TransactionState_DONE
+            for tsi in self.rpm:
+                if tsi.state == libdnf.transaction.TransactionItemState_ERROR:
+                    return_code = libdnf.transaction.TransactionState_ERROR
+                    break
+
         for file_descriptor, line in self._output:
             self.swdb.addConsoleOutputLine(file_descriptor, line)
         self._output = []
 
         self.swdb.endTransaction(
             int(time.time()),
             str(end_rpmdb_version),
-            bool(return_code)
+            return_code,
         )
 
         # Closing and cleanup is done in the close() method.
--
libgit2 0.27.8