[PackageKit] Fix several reported problems with the offline-update funtionality.
Richard Hughes
rhughes at fedoraproject.org
Tue Jul 10 17:25:29 UTC 2012
commit 47ea9a0363b17be8293c11e4c508097ea4697460
Author: Richard Hughes <richard at hughsie.com>
Date: Tue Jul 10 18:23:48 2012 +0100
Fix several reported problems with the offline-update funtionality.
PackageKit-0.8.1-master.patch | 292 +++++++++++++++++++++++++++++++++++++++++
PackageKit.spec | 5 +-
2 files changed, 296 insertions(+), 1 deletions(-)
---
diff --git a/PackageKit-0.8.1-master.patch b/PackageKit-0.8.1-master.patch
index 1cff6e5..c333f1e 100644
--- a/PackageKit-0.8.1-master.patch
+++ b/PackageKit-0.8.1-master.patch
@@ -1204,3 +1204,295 @@ index ae40281..36972be 100644
pk_offline_update_reboot ();
g_free (packages_data);
g_strfreev (package_ids);
+commit e5e2ec784248a5ee15be98dbfe2e6d12bd5ec63a
+Author: Richard Hughes <richard at hughsie.com>
+Date: Tue Jul 10 11:00:56 2012 +0100
+
+ Never run any plugins for simulated actions
+
+diff --git a/src/pk-transaction.c b/src/pk-transaction.c
+index b5292fc..a29eb82 100644
+--- a/src/pk-transaction.c
++++ b/src/pk-transaction.c
+@@ -944,6 +944,14 @@ pk_transaction_plugin_phase (PkTransaction *transaction,
+ if (transaction->priv->plugins == NULL)
+ goto out;
+
++ /* never run any plugins for simulate actions */
++ if (pk_bitfield_contain (transaction->priv->cached_transaction_flags,
++ PK_TRANSACTION_FLAG_ENUM_SIMULATE)) {
++ g_debug ("not running plugin function %s as simulating",
++ function);
++ return;
++ }
++
+ /* run each plugin */
+ for (i=0; i<transaction->priv->plugins->len; i++) {
+ plugin = g_ptr_array_index (transaction->priv->plugins, i);
+commit 10e2461115adb7ecd9ab37c64b54484eea17e5ae
+Author: Richard Hughes <richard at hughsie.com>
+Date: Tue Jul 10 12:46:01 2012 +0100
+
+ Run any methods that implement pk_plugin_state_changed() when the daemon state changes
+
+ This can happen if any native tool is run on the command line.
+
+diff --git a/src/pk-engine.c b/src/pk-engine.c
+index bd845d1..4844355 100644
+--- a/src/pk-engine.c
++++ b/src/pk-engine.c
+@@ -58,6 +58,7 @@
+
+ static void pk_engine_finalize (GObject *object);
+ static void pk_engine_set_locked (PkEngine *engine, gboolean is_locked);
++static void pk_engine_plugin_phase (PkEngine *engine, PkPluginPhase phase);
+
+ #define PK_ENGINE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PK_TYPE_ENGINE, PkEnginePrivate))
+
+@@ -379,6 +380,9 @@ pk_engine_state_changed_cb (gpointer data)
+
+ g_return_val_if_fail (PK_IS_ENGINE (engine), FALSE);
+
++ /* run the plugin hook */
++ pk_engine_plugin_phase (engine, PK_PLUGIN_PHASE_STATE_CHANGED);
++
+ /* if network is not up, then just reschedule */
+ state = pk_network_get_network_state (engine->priv->network);
+ if (state == PK_NETWORK_ENUM_OFFLINE) {
+@@ -1042,6 +1046,9 @@ pk_engine_plugin_phase (PkEngine *engine,
+ case PK_PLUGIN_PHASE_DESTROY:
+ function = "pk_plugin_destroy";
+ break;
++ case PK_PLUGIN_PHASE_STATE_CHANGED:
++ function = "pk_plugin_state_changed";
++ break;
+ default:
+ g_assert_not_reached ();
+ break;
+diff --git a/src/pk-plugin.h b/src/pk-plugin.h
+index bf13711..8c4ce02 100644
+--- a/src/pk-plugin.h
++++ b/src/pk-plugin.h
+@@ -49,6 +49,7 @@ typedef enum {
+ PK_PLUGIN_PHASE_TRANSACTION_FINISHED_RESULTS, /* finished with some signals */
+ PK_PLUGIN_PHASE_TRANSACTION_FINISHED_END, /* finished with no signals */
+ PK_PLUGIN_PHASE_DESTROY, /* plugin finalized */
++ PK_PLUGIN_PHASE_STATE_CHANGED, /* system state has changed */
+ PK_PLUGIN_PHASE_UNKNOWN
+ } PkPluginPhase;
+
+@@ -65,6 +66,7 @@ typedef void (*PkPluginTransactionFunc) (PkPlugin *plugin,
+ const gchar *pk_plugin_get_description (void);
+ void pk_plugin_initialize (PkPlugin *plugin);
+ void pk_plugin_destroy (PkPlugin *plugin);
++void pk_plugin_state_changed (PkPlugin *plugin);
+ void pk_plugin_transaction_run (PkPlugin *plugin,
+ PkTransaction *transaction);
+ void pk_plugin_transaction_started (PkPlugin *plugin,
+commit 16513d3a3032ca61c8e5e6ade91c64c5fdde8ccc
+Author: Richard Hughes <richard at hughsie.com>
+Date: Tue Jul 10 12:46:37 2012 +0100
+
+ systemd-updates: Remove the prepared-updates file if the daemon state changes
+
+diff --git a/src/plugins/pk-plugin-systemd-updates.c b/src/plugins/pk-plugin-systemd-updates.c
+index b0abc8d..00c099a 100644
+--- a/src/plugins/pk-plugin-systemd-updates.c
++++ b/src/plugins/pk-plugin-systemd-updates.c
+@@ -21,6 +21,7 @@
+
+ #include <config.h>
+ #include <gio/gio.h>
++#include <glib/gstdio.h>
+ #include <pk-plugin.h>
+
+ /**
+@@ -90,6 +91,31 @@ pk_plugin_array_str_exists (GPtrArray *array, const gchar *str)
+ }
+
+ /**
++ * pk_plugin_state_changed:
++ */
++void
++pk_plugin_state_changed (PkPlugin *plugin)
++{
++ gchar *file;
++
++ /* if the state changed because of a yum command that could
++ * have changed the updates list then nuke the prepared-updates
++ * file */
++ file = g_build_filename (LOCALSTATEDIR,
++ "lib",
++ "PackageKit",
++ "prepared-update",
++ NULL);
++ if (g_file_test (file, G_FILE_TEST_EXISTS)) {
++ g_debug ("Removing %s as state has changed", file);
++ g_unlink (file);
++ } else {
++ g_debug ("No %s needed to be deleted", file);
++ }
++ g_free (file);
++}
++
++/**
+ * pk_plugin_transaction_finished_end:
+ */
+ void
+commit 3fde672000e38812dd41e5d50c225b91c3f951fa
+Author: Richard Hughes <richard at hughsie.com>
+Date: Tue Jul 10 13:00:02 2012 +0100
+
+ systemd-updates: Remove the prepared-updates file if GetUpdates() returns no packages
+
+diff --git a/src/plugins/pk-plugin-systemd-updates.c b/src/plugins/pk-plugin-systemd-updates.c
+index 00c099a..de3e491 100644
+--- a/src/plugins/pk-plugin-systemd-updates.c
++++ b/src/plugins/pk-plugin-systemd-updates.c
+@@ -116,11 +116,10 @@ pk_plugin_state_changed (PkPlugin *plugin)
+ }
+
+ /**
+- * pk_plugin_transaction_finished_end:
++ * pk_plugin_transaction_update_packages:
+ */
+-void
+-pk_plugin_transaction_finished_end (PkPlugin *plugin,
+- PkTransaction *transaction)
++static void
++pk_plugin_transaction_update_packages (PkTransaction *transaction)
+ {
+ gboolean ret;
+ gchar **package_ids;
+@@ -130,20 +129,6 @@ pk_plugin_transaction_finished_end (PkPlugin *plugin,
+ GPtrArray *packages;
+ guint i;
+ PkBitfield transaction_flags;
+- PkExitEnum exit_enum;
+- PkResults *results;
+- PkRoleEnum role;
+-
+- /* check the role */
+- role = pk_transaction_get_role (transaction);
+- if (role != PK_ROLE_ENUM_UPDATE_PACKAGES)
+- goto out;
+-
+- /* check for success */
+- results = pk_transaction_get_results (transaction);
+- exit_enum = pk_results_get_exit_code (results);
+- if (exit_enum != PK_EXIT_ENUM_SUCCESS)
+- goto out;
+
+ /* only write the file for only-download */
+ transaction_flags = pk_transaction_get_transaction_flags (transaction);
+@@ -186,3 +171,70 @@ out:
+ g_free (path);
+ return;
+ }
++
++/**
++ * pk_plugin_transaction_get_updates:
++ */
++static void
++pk_plugin_transaction_get_updates (PkTransaction *transaction)
++{
++ gchar *path;
++ GPtrArray *array;
++ PkResults *results;
++
++ results = pk_transaction_get_results (transaction);
++ path = g_build_filename (LOCALSTATEDIR,
++ "lib",
++ "PackageKit",
++ "prepared-update",
++ NULL);
++ array = pk_results_get_package_array (results);
++ if (array->len != 0) {
++ g_debug ("got %i updates, so ignoring %s",
++ array->len, path);
++ goto out;
++ }
++ if (g_file_test (path, G_FILE_TEST_EXISTS)) {
++ g_debug ("Removing %s as no updates", path);
++ g_unlink (path);
++ } else {
++ g_debug ("No %s present, so no need to delete", path);
++ }
++out:
++ g_free (path);
++ g_ptr_array_unref (array);
++}
++
++/**
++ * pk_plugin_transaction_finished_end:
++ */
++void
++pk_plugin_transaction_finished_end (PkPlugin *plugin,
++ PkTransaction *transaction)
++{
++ PkExitEnum exit_enum;
++ PkResults *results;
++ PkRoleEnum role;
++
++ /* check for success */
++ results = pk_transaction_get_results (transaction);
++ exit_enum = pk_results_get_exit_code (results);
++ if (exit_enum != PK_EXIT_ENUM_SUCCESS)
++ goto out;
++
++ /* if we're doing only-download then update prepared-updates */
++ role = pk_transaction_get_role (transaction);
++ if (role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
++ pk_plugin_transaction_update_packages (transaction);
++ goto out;
++ }
++
++ /* if we do get-updates and there's no updates then remove
++ * prepared-updates so the UI doesn't display update & reboot */
++ if (role == PK_ROLE_ENUM_GET_UPDATES) {
++ pk_plugin_transaction_get_updates (transaction);
++ goto out;
++ }
++out:
++ return;
++}
+commit af0443450775a1876aeb4af84595b331bad19640
+Author: Richard Hughes <richard at hughsie.com>
+Date: Tue Jul 10 14:06:55 2012 +0100
+
+ When doing 'pkcon update' allow the user to specify filters but enforce NEWEST
+
+diff --git a/client/pk-console.c b/client/pk-console.c
+index 2d16ff8..377ce28 100644
+--- a/client/pk-console.c
++++ b/client/pk-console.c
+@@ -979,7 +979,7 @@ out:
+ * pk_console_update_system:
+ **/
+ static gboolean
+-pk_console_update_system (GError **error)
++pk_console_update_system (PkBitfield filters, GError **error)
+ {
+ gboolean ret = TRUE;
+ gchar **package_ids = NULL;
+@@ -987,7 +987,10 @@ pk_console_update_system (GError **error)
+ PkResults *results;
+
+ /* get the current updates */
+- results = pk_task_get_updates_sync (PK_TASK (task), 0, cancellable,
++ pk_bitfield_add (filters, PK_FILTER_ENUM_NEWEST);
++ results = pk_task_get_updates_sync (PK_TASK (task),
++ filters,
++ cancellable,
+ (PkProgressCallback) pk_console_progress_cb, NULL,
+ error);
+ if (results == NULL) {
+@@ -1597,7 +1600,7 @@ main (int argc, char *argv[])
+ } else if (strcmp (mode, "update") == 0) {
+ if (value == NULL) {
+ /* do the system update */
+- nowait = !pk_console_update_system (&error);
++ nowait = !pk_console_update_system (filters, &error);
+ } else {
+ nowait = !pk_console_update_packages (argv+2, &error);
+ }
diff --git a/PackageKit.spec b/PackageKit.spec
index 0d2a68b..18dfa0e 100644
--- a/PackageKit.spec
+++ b/PackageKit.spec
@@ -3,7 +3,7 @@
Summary: Package management service
Name: PackageKit
Version: 0.8.1
-Release: 6%{?dist}
+Release: 7%{?dist}
License: GPLv2+ and LGPLv2+
URL: http://www.packagekit.org
Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.xz
@@ -472,6 +472,9 @@ update-mime-database %{_datadir}/mime &> /dev/null || :
%{_libdir}/pkgconfig/packagekit-plugin.pc
%changelog
+* Tue Jul 09 2012 Richard Hughes <rhughes at redhat.com> - 0.8.1-7
+- Fix several reported problems with the offline-update funtionality.
+
* Mon Jul 09 2012 Richard Hughes <rhughes at redhat.com> - 0.8.1-6
- Fix several reported problems with the offline-update funtionality.
More information about the scm-commits
mailing list