[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [discover/Plasma/5.12] libdiscover/backends/PackageKitBackend: Abort transaction on PackageKit error
From:       Aleix Pol <null () kde ! org>
Date:       2018-05-28 16:06:06
Message-ID: E1fNKes-0003St-Sw () code ! kde ! org
[Download RAW message or body]

Git commit c0277f806a6eab8e9850e4d022ebc0419dd8efc1 by Aleix Pol, on behalf of \
Antonio Rojas. Committed on 28/05/2018 at 16:05.
Pushed by apol into branch 'Plasma/5.12'.

Abort transaction on PackageKit errors

If PackageKit throws an error, abort the transaction instead of finishing it anyway \
(potentially breaking the user's installation). This is far from ideal, but prevents \
Discover from performing destructive operations while the PackageKit issues are fixed

BUG: 394327
Differential Revision: https://phabricator.kde.org/D13119

M  +6    -2    libdiscover/backends/PackageKitBackend/PKTransaction.cpp

https://commits.kde.org/discover/c0277f806a6eab8e9850e4d022ebc0419dd8efc1

diff --git a/libdiscover/backends/PackageKitBackend/PKTransaction.cpp \
b/libdiscover/backends/PackageKitBackend/PKTransaction.cpp index 135c628c..a8d2036e \
                100644
--- a/libdiscover/backends/PackageKitBackend/PKTransaction.cpp
+++ b/libdiscover/backends/PackageKitBackend/PKTransaction.cpp
@@ -134,6 +134,7 @@ void PKTransaction::cleanup(PackageKit::Transaction::Exit exit, \
uint runtime)  {
     Q_UNUSED(runtime)
     const bool cancel = !m_proceedFunctions.isEmpty() || exit == \
PackageKit::Transaction::ExitCancelled; +    const bool failed = exit == \
                PackageKit::Transaction::ExitFailed;
     const bool simulate = m_trans->transactionFlags() & \
PackageKit::Transaction::TransactionFlagSimulate;  
     disconnect(m_trans, nullptr, this, nullptr);
@@ -141,7 +142,7 @@ void PKTransaction::cleanup(PackageKit::Transaction::Exit exit, \
uint runtime)  
     const auto backend = qobject_cast<PackageKitBackend*>(resource()->backend());
 
-    if (!cancel && simulate) {
+    if (!cancel && !failed && simulate) {
         auto packagesToRemove = \
m_newPackageStates.value(PackageKit::Transaction::InfoRemoving);  \
QMutableListIterator<QString> i(packagesToRemove);  QSet<AbstractResource*> \
removedResources; @@ -172,7 +173,10 @@ void \
PKTransaction::cleanup(PackageKit::Transaction::Exit exit, uint runtime)  }
 
     this->submitResolve();
-    setStatus(Transaction::CancelledStatus);
+    if (failed)
+        setStatus(Transaction::DoneWithErrorStatus);
+    else
+        setStatus(Transaction::CancelledStatus);
 }
 
 void PKTransaction::processProceedFunction()


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic