File 0015-zypp-only-allow-updates.patch of Package PackageKit
From d3d14631042237bcfe6fb30a60e59bb6d94af425 Mon Sep 17 00:00:00 2001
From: Stephan Kulow <coolo@suse.de>
Date: Thu, 21 Feb 2013 17:40:24 +0100
Subject: [PATCH] zypp: only allow to update candidates (fdo#61231)
---
backends/zypp/pk-backend-zypp.cpp | 18 +++++++++++++++++-
1 files changed, 17 insertions(+), 1 deletions(-)
diff --git a/backends/zypp/pk-backend-zypp.cpp b/backends/zypp/pk-backend-zypp.cpp
index 6df4067..a949de9 100644
--- a/backends/zypp/pk-backend-zypp.cpp
+++ b/backends/zypp/pk-backend-zypp.cpp
@@ -1243,7 +1243,7 @@ zypp_get_updates (PkBackendJob *job, ZYpp::Ptr zypp, set<PoolItem> &candidates)
pi_it_t cb = candidates.begin (), ce = candidates.end (), ci;
for (ci = cb; ci != ce; ++ci) {
if (!isKind<Patch>(ci->resolvable()))
- continue;
+ continue;
Patch::constPtr patch = asKind<Patch>(ci->resolvable());
@@ -3157,7 +3157,23 @@ backend_update_packages_thread (PkBackendJob *job, GVariant *params, gpointer us
for (guint i = 0; package_ids[i]; i++) {
sat::Solvable solvable = zypp_get_package_by_id (package_ids[i]);
+ ui::Selectable::Ptr sel( ui::Selectable::get( solvable ));
+
PoolItem item(solvable);
+ // patches are special - they are not installed and can't have update candidates
+ if (sel->kind() != ResKind::patch) {
+ MIL << "sel " << sel->kind() << " " << sel->ident() << endl;
+ if (sel->installedEmpty()) {
+ zypp_backend_finished_error (job, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "Package %s is not installed", package_ids[i]);
+ return;
+ }
+ item = sel->updateCandidateObj();
+ if (!item) {
+ zypp_backend_finished_error(job, PK_ERROR_ENUM_DEP_RESOLUTION_FAILED, "There is no update candidate for %s", sel->installedObj().satSolvable().asString().c_str());
+ return;
+ }
+ }
+
item.status ().setToBeInstalled (ResStatus::USER);
Patch::constPtr patch = asKind<Patch>(item.resolvable ());
zypp_check_restart (&restart, patch);
--
1.7.1