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 i= t anyway (potentially breaking the user's installation). This is far from ideal, but prevents Discover from performing destructive o= perations 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/lib= discover/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::Ex= it exit, uint runtime) { Q_UNUSED(runtime) const bool cancel =3D !m_proceedFunctions.isEmpty() || exit =3D=3D Pac= kageKit::Transaction::ExitCancelled; + const bool failed =3D exit =3D=3D PackageKit::Transaction::ExitFailed; const bool simulate =3D m_trans->transactionFlags() & PackageKit::Tran= saction::TransactionFlagSimulate; = disconnect(m_trans, nullptr, this, nullptr); @@ -141,7 +142,7 @@ void PKTransaction::cleanup(PackageKit::Transaction::Ex= it exit, uint runtime) = const auto backend =3D qobject_cast(resource()->ba= ckend()); = - if (!cancel && simulate) { + if (!cancel && !failed && simulate) { auto packagesToRemove =3D m_newPackageStates.value(PackageKit::Tra= nsaction::InfoRemoving); QMutableListIterator i(packagesToRemove); QSet removedResources; @@ -172,7 +173,10 @@ void PKTransaction::cleanup(PackageKit::Transaction::E= xit exit, uint runtime) } = this->submitResolve(); - setStatus(Transaction::CancelledStatus); + if (failed) + setStatus(Transaction::DoneWithErrorStatus); + else + setStatus(Transaction::CancelledStatus); } = void PKTransaction::processProceedFunction()