From c92024ccb5852e4c152e1d96c4b7f2116e42b3c1 Mon Sep 17 00:00:00 2001 From: Richard Hughes Date: Mon, 2 Jul 2012 16:58:33 +0100 Subject: [PATCH] Fix several reported problems with the offline-update funtionality. --- PackageKit-0.8.1-master.patch | 986 +++++++++++++++++++++------------- PackageKit.spec | 5 +- 2 files changed, 607 insertions(+), 384 deletions(-) diff --git a/PackageKit-0.8.1-master.patch b/PackageKit-0.8.1-master.patch index d486aa8..832e17e 100644 --- a/PackageKit-0.8.1-master.patch +++ b/PackageKit-0.8.1-master.patch @@ -132,6 +132,63 @@ index 491f044..896d32b 100755 pct = div * (ts_current - 1) + pct_start + ((div / 100.0) * val) self.base.percentage(pct) +diff --git a/client/pk-console.c b/client/pk-console.c +index ade188e..edbe593 100644 +--- a/client/pk-console.c ++++ b/client/pk-console.c +@@ -978,6 +978,41 @@ out: + } + + /** ++ * pk_console_update_system: ++ **/ ++static gboolean ++pk_console_update_system (GError **error) ++{ ++ gboolean ret = TRUE; ++ gchar **package_ids = NULL; ++ PkPackageSack *sack = NULL; ++ PkResults *results; ++ ++ /* get the current updates */ ++ results = pk_task_get_updates_sync (PK_TASK (task), 0, cancellable, ++ (PkProgressCallback) pk_console_progress_cb, NULL, ++ error); ++ if (results == NULL) { ++ ret = FALSE; ++ goto out; ++ } ++ ++ /* do the async action */ ++ sack = pk_results_get_package_sack (results); ++ package_ids = pk_package_sack_get_ids (sack); ++ pk_task_update_packages_async (PK_TASK(task), package_ids, cancellable, ++ (PkProgressCallback) pk_console_progress_cb, NULL, ++ (GAsyncReadyCallback) pk_console_finished_cb, NULL); ++out: ++ if (sack != NULL) ++ g_object_unref (sack); ++ if (results != NULL) ++ g_object_unref (results); ++ g_strfreev (package_ids); ++ return ret; ++} ++ ++/** + * pk_console_get_requires: + **/ + static gboolean +@@ -1565,9 +1600,7 @@ main (int argc, char *argv[]) + } else if (strcmp (mode, "update") == 0) { + if (value == NULL) { + /* do the system update */ +- pk_task_update_system_async (PK_TASK(task), cancellable, +- (PkProgressCallback) pk_console_progress_cb, NULL, +- (GAsyncReadyCallback) pk_console_finished_cb, NULL); ++ nowait = !pk_console_update_system (&error); + } else { + nowait = !pk_console_update_packages (argv+2, &error); + } diff --git a/contrib/systemd-updates/pk-offline-update.c b/contrib/systemd-updates/pk-offline-update.c index 5d6604d..a6fdaaf 100644 --- a/contrib/systemd-updates/pk-offline-update.c @@ -311,7 +368,7 @@ index b9ae2b8..477552f 100644 } diff --git a/src/pk-transaction.c b/src/pk-transaction.c -index afdd563..c5a29f1 100644 +index afdd563..1818723 100644 --- a/src/pk-transaction.c +++ b/src/pk-transaction.c @@ -689,23 +689,24 @@ pk_transaction_category_cb (PkBackend *backend, @@ -344,14 +401,502 @@ index afdd563..c5a29f1 100644 NULL); } -@@ -1106,14 +1107,75 @@ pk_transaction_set_full_paths (PkTransaction *transaction, +@@ -1058,6 +1059,18 @@ pk_transaction_get_package_ids (PkTransaction *transaction) } /** -+ * pk_transaction_get_existing_prepared_updates: ++ * pk_transaction_get_transaction_flags: ++ * ++ * Returns: transaction flags for the transaction ++ **/ ++PkBitfield ++pk_transaction_get_transaction_flags (PkTransaction *transaction) ++{ ++ g_return_val_if_fail (PK_IS_TRANSACTION (transaction), 0); ++ return transaction->priv->cached_transaction_flags; ++} ++ ++/** + * pk_transaction_set_package_ids: + **/ + void +@@ -1106,40 +1119,6 @@ pk_transaction_set_full_paths (PkTransaction *transaction, + } + + /** +- * pk_transaction_write_prepared_file: +- **/ +-static void +-pk_transaction_write_prepared_file (PkTransaction *transaction) +-{ +- gboolean ret; +- gchar *path; +- GError *error = NULL; +- +- /* not interesting to us */ +- if (transaction->priv->role != PK_ROLE_ENUM_UPDATE_PACKAGES && +- transaction->priv->role != PK_ROLE_ENUM_UPDATE_SYSTEM) { +- return; +- } +- +- /* write filename */ +- path = g_build_filename (LOCALSTATEDIR, +- "lib", +- "PackageKit", +- "prepared-update", +- NULL); +- ret = g_file_set_contents (path, +- pk_role_enum_to_string (transaction->priv->role), +- -1, +- &error); +- if (!ret) { +- g_warning ("failed to write %s: %s", +- path, error->message); +- g_error_free (error); +- } +- g_free (path); +-} +- +-/** + * pk_transaction_finished_cb: + **/ + static void +@@ -1244,13 +1223,6 @@ pk_transaction_finished_cb (PkBackend *backend, PkExitEnum exit_enum, PkTransact + if (exit_enum == PK_EXIT_ENUM_SUCCESS) + pk_transaction_db_action_time_reset (transaction->priv->transaction_db, transaction->priv->role); + +- /* write notification files if anything is pending */ +- if (exit_enum == PK_EXIT_ENUM_SUCCESS && +- pk_bitfield_contain (transaction->priv->cached_transaction_flags, +- PK_TRANSACTION_FLAG_ENUM_ONLY_DOWNLOAD)) { +- pk_transaction_write_prepared_file (transaction); +- } +- + /* did we finish okay? */ + if (exit_enum == PK_EXIT_ENUM_SUCCESS) + pk_transaction_db_set_finished (transaction->priv->transaction_db, transaction->priv->tid, TRUE, time_ms); +@@ -1751,7 +1723,7 @@ pk_transaction_transaction_cb (PkTransactionDb *tdb, + transaction->priv->tid, + PK_DBUS_INTERFACE_TRANSACTION, + "Transaction", +- g_variant_new ("(osbsusus)", ++ g_variant_new ("(osbuusus)", + tid, + timespec, + succeeded, +@@ -2880,6 +2852,21 @@ pk_transaction_obtain_authorization (PkTransaction *transaction, + + g_return_val_if_fail (priv->sender != NULL, FALSE); + ++ /* we don't need to authenticate at all to just download packages */ ++ if (pk_bitfield_contain (transaction->priv->cached_transaction_flags, ++ PK_TRANSACTION_FLAG_ENUM_ONLY_DOWNLOAD)) { ++ g_debug ("No authentication required for only-download"); ++ ret = pk_transaction_commit (transaction); ++ if (!ret) { ++ g_set_error_literal (error, ++ PK_TRANSACTION_ERROR, ++ PK_TRANSACTION_ERROR_COMMIT_FAILED, ++ "Could not commit to a transaction object"); ++ pk_transaction_release_tid (transaction); ++ } ++ goto out; ++ } ++ + /* we should always have subject */ + if (priv->subject == NULL) { + g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_REFUSED_BY_POLICY, +@@ -3029,6 +3016,18 @@ pk_transaction_get_role (PkTransaction *transaction) + } + + /** ++ * pk_transaction_set_role: ++ **/ ++static void ++pk_transaction_set_role (PkTransaction *transaction, PkRoleEnum role) ++{ ++ transaction->priv->role = role; ++ pk_transaction_emit_property_changed (transaction, ++ "Role", ++ g_variant_new_uint32 (role)); ++} ++ ++/** + * pk_transaction_dbus_return: + **/ + static void +@@ -3065,7 +3064,6 @@ pk_transaction_accept_eula (PkTransaction *transaction, + + g_return_if_fail (PK_IS_TRANSACTION (transaction)); + g_return_if_fail (transaction->priv->tid != NULL); +- transaction->priv->role = PK_ROLE_ENUM_ACCEPT_EULA; + + g_variant_get (params, "(&s)", + &eula_id); +@@ -3077,6 +3075,8 @@ pk_transaction_accept_eula (PkTransaction *transaction, + goto out; + } + ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_ACCEPT_EULA); ++ + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, + PK_ROLE_ENUM_ACCEPT_EULA, +@@ -3319,7 +3319,7 @@ pk_transaction_download_packages (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_package_ids = g_strdupv (package_ids); + transaction->priv->cached_directory = g_strdup (directory); +- transaction->priv->role = PK_ROLE_ENUM_DOWNLOAD_PACKAGES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_DOWNLOAD_PACKAGES); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3360,7 +3360,7 @@ pk_transaction_get_categories (PkTransaction *transaction, + goto out; + } + +- transaction->priv->role = PK_ROLE_ENUM_GET_CATEGORIES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_CATEGORIES); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3434,7 +3434,7 @@ pk_transaction_get_depends (PkTransaction *transaction, + transaction->priv->cached_filters = filter; + transaction->priv->cached_package_ids = g_strdupv (package_ids); + transaction->priv->cached_force = recursive; +- transaction->priv->role = PK_ROLE_ENUM_GET_DEPENDS; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_DEPENDS); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3504,7 +3504,7 @@ pk_transaction_get_details (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_package_ids = g_strdupv (package_ids); +- transaction->priv->role = PK_ROLE_ENUM_GET_DETAILS; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_DETAILS); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3545,7 +3545,7 @@ pk_transaction_get_distro_upgrades (PkTransaction *transaction, + } + + /* save so we can run later */ +- transaction->priv->role = PK_ROLE_ENUM_GET_DISTRO_UPGRADES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_DISTRO_UPGRADES); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3613,7 +3613,7 @@ pk_transaction_get_files (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_package_ids = g_strdupv (package_ids); +- transaction->priv->role = PK_ROLE_ENUM_GET_FILES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_FILES); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3659,7 +3659,7 @@ pk_transaction_get_packages (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_filters = filter; +- transaction->priv->role = PK_ROLE_ENUM_GET_PACKAGES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_PACKAGES); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3692,7 +3692,7 @@ pk_transaction_get_old_transactions (PkTransaction *transaction, + + g_debug ("GetOldTransactions method called"); + +- transaction->priv->role = PK_ROLE_ENUM_GET_OLD_TRANSACTIONS; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_OLD_TRANSACTIONS); + pk_transaction_db_get_list (transaction->priv->transaction_db, number); + idle_id = g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction); + g_source_set_name_by_id (idle_id, "[PkTransaction] finished from get-old-transactions"); +@@ -3731,7 +3731,7 @@ pk_transaction_get_repo_list (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_filters = filter; +- transaction->priv->role = PK_ROLE_ENUM_GET_REPO_LIST; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_REPO_LIST); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3806,7 +3806,7 @@ pk_transaction_get_requires (PkTransaction *transaction, + transaction->priv->cached_filters = filter; + transaction->priv->cached_package_ids = g_strdupv (package_ids); + transaction->priv->cached_force = recursive; +- transaction->priv->role = PK_ROLE_ENUM_GET_REQUIRES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_REQUIRES); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -3875,7 +3875,7 @@ pk_transaction_get_update_detail (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_package_ids = g_strdupv (package_ids); +- transaction->priv->role = PK_ROLE_ENUM_GET_UPDATE_DETAIL; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_UPDATE_DETAIL); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -4004,7 +4004,7 @@ pk_transaction_get_updates (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_filters = filter; +- transaction->priv->role = PK_ROLE_ENUM_GET_UPDATES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_UPDATES); + + /* try and reuse cache */ + ret = pk_transaction_try_emit_cache (transaction); +@@ -4166,7 +4166,7 @@ pk_transaction_install_files (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_transaction_flags = transaction_flags; + transaction->priv->cached_full_paths = g_strdupv (full_paths); +- transaction->priv->role = PK_ROLE_ENUM_INSTALL_FILES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_INSTALL_FILES); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -4239,7 +4239,7 @@ pk_transaction_install_packages (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_transaction_flags = transaction_flags; + transaction->priv->cached_package_ids = g_strdupv (package_ids); +- transaction->priv->role = PK_ROLE_ENUM_INSTALL_PACKAGES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_INSTALL_PACKAGES); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -4309,7 +4309,7 @@ pk_transaction_install_signature (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_package_id = g_strdup (package_id); + transaction->priv->cached_key_id = g_strdup (key_id); +- transaction->priv->role = PK_ROLE_ENUM_INSTALL_SIGNATURE; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_INSTALL_SIGNATURE); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -4357,7 +4357,7 @@ pk_transaction_refresh_cache (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_force = force; +- transaction->priv->role = PK_ROLE_ENUM_REFRESH_CACHE; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REFRESH_CACHE); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -4435,7 +4435,7 @@ pk_transaction_remove_packages (PkTransaction *transaction, + transaction->priv->cached_package_ids = g_strdupv (package_ids); + transaction->priv->cached_allow_deps = allow_deps; + transaction->priv->cached_autoremove = autoremove; +- transaction->priv->role = PK_ROLE_ENUM_REMOVE_PACKAGES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REMOVE_PACKAGES); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -4491,7 +4491,7 @@ pk_transaction_repo_enable (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_repo_id = g_strdup (repo_id); + transaction->priv->cached_enabled = enabled; +- transaction->priv->role = PK_ROLE_ENUM_REPO_ENABLE; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REPO_ENABLE); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -4550,7 +4550,7 @@ pk_transaction_repo_set_data (PkTransaction *transaction, + transaction->priv->cached_repo_id = g_strdup (repo_id); + transaction->priv->cached_parameter = g_strdup (parameter); + transaction->priv->cached_value = g_strdup (value); +- transaction->priv->role = PK_ROLE_ENUM_REPO_SET_DATA; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REPO_SET_DATA); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -4630,7 +4630,7 @@ pk_transaction_resolve (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_package_ids = g_strdupv (packages); + transaction->priv->cached_filters = filter; +- transaction->priv->role = PK_ROLE_ENUM_RESOLVE; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_RESOLVE); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -4687,7 +4687,7 @@ pk_transaction_search_details (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_filters = filter; + transaction->priv->cached_values = g_strdupv (values); +- transaction->priv->role = PK_ROLE_ENUM_SEARCH_DETAILS; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_DETAILS); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -4754,7 +4754,7 @@ pk_transaction_search_files (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_filters = filter; + transaction->priv->cached_values = g_strdupv (values); +- transaction->priv->role = PK_ROLE_ENUM_SEARCH_FILE; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_FILE); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -4821,7 +4821,7 @@ pk_transaction_search_groups (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_filters = filter; + transaction->priv->cached_values = g_strdupv (values); +- transaction->priv->role = PK_ROLE_ENUM_SEARCH_GROUP; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_GROUP); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -4877,7 +4877,7 @@ pk_transaction_search_names (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_filters = filter; + transaction->priv->cached_values = g_strdupv (values); +- transaction->priv->role = PK_ROLE_ENUM_SEARCH_NAME; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_NAME); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -5112,7 +5112,7 @@ pk_transaction_update_packages (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_transaction_flags = transaction_flags; + transaction->priv->cached_package_ids = g_strdupv (package_ids); +- transaction->priv->role = PK_ROLE_ENUM_UPDATE_PACKAGES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_UPDATE_PACKAGES); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -5165,7 +5165,7 @@ pk_transaction_update_system (PkTransaction *transaction, + } + + transaction->priv->cached_transaction_flags = transaction_flags; +- transaction->priv->role = PK_ROLE_ENUM_UPDATE_SYSTEM; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_UPDATE_SYSTEM); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -5225,7 +5225,7 @@ pk_transaction_what_provides (PkTransaction *transaction, + transaction->priv->cached_filters = filter; + transaction->priv->cached_values = g_strdupv (values); + transaction->priv->cached_provides = provides; +- transaction->priv->role = PK_ROLE_ENUM_WHAT_PROVIDES; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_WHAT_PROVIDES); + + /* try to commit this */ + ret = pk_transaction_commit (transaction); +@@ -5274,7 +5274,7 @@ pk_transaction_upgrade_system (PkTransaction *transaction, + /* save so we can run later */ + transaction->priv->cached_value = g_strdup (distro_id); + transaction->priv->cached_provides = upgrade_kind; +- transaction->priv->role = PK_ROLE_ENUM_UPGRADE_SYSTEM; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_UPGRADE_SYSTEM); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +@@ -5319,7 +5319,7 @@ pk_transaction_repair_system (PkTransaction *transaction, + + /* save so we can run later */ + transaction->priv->cached_transaction_flags = transaction_flags; +- transaction->priv->role = PK_ROLE_ENUM_REPAIR_SYSTEM; ++ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REPAIR_SYSTEM); + + /* try to get authorization */ + ret = pk_transaction_obtain_authorization (transaction, +diff --git a/src/pk-transaction.h b/src/pk-transaction.h +index 4f247b3..79c68a5 100644 +--- a/src/pk-transaction.h ++++ b/src/pk-transaction.h +@@ -82,6 +82,7 @@ void pk_transaction_set_backend (PkTransaction *transaction, + PkBackend *backend); + PkResults *pk_transaction_get_results (PkTransaction *transaction); + gchar **pk_transaction_get_package_ids (PkTransaction *transaction); ++PkBitfield pk_transaction_get_transaction_flags (PkTransaction *transaction); + void pk_transaction_set_package_ids (PkTransaction *transaction, + gchar **package_ids); + gchar **pk_transaction_get_values (PkTransaction *transaction); +diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am +index c1bf30d..f693c2c 100644 +--- a/src/plugins/Makefile.am ++++ b/src/plugins/Makefile.am +@@ -58,6 +58,7 @@ plugin_LTLIBRARIES = \ + libpk_plugin-update-package-cache.la \ + libpk_plugin-no-update-process.la \ + libpk_plugin-scan-desktop-files.la \ ++ libpk_plugin-systemd-updates.la \ + libpk_plugin-update-check-processes.la \ + libpk_plugin-check-shared-libraries-in-use.la \ + libpk_plugin-clear-system-update.la \ +@@ -68,6 +69,11 @@ libpk_plugin_example_la_LIBADD = $(PK_PLUGIN_LIBS) + libpk_plugin_example_la_LDFLAGS = -module -avoid-version + libpk_plugin_example_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C) + ++libpk_plugin_systemd_updates_la_SOURCES = pk-plugin-systemd-updates.c ++libpk_plugin_systemd_updates_la_LIBADD = $(PK_PLUGIN_LIBS) ++libpk_plugin_systemd_updates_la_LDFLAGS = -module -avoid-version ++libpk_plugin_systemd_updates_la_CFLAGS = $(PK_PLUGIN_CFLAGS) $(WARNINGFLAGS_C) ++ + libpk_plugin_scripts_la_SOURCES = pk-plugin-scripts.c + libpk_plugin_scripts_la_LIBADD = $(PK_PLUGIN_LIBS) + libpk_plugin_scripts_la_LDFLAGS = -module -avoid-version +diff --git a/src/plugins/pk-plugin-clear-firmware-requests.c b/src/plugins/pk-plugin-clear-firmware-requests.c +index 8b4216a..f9326f4 100644 +--- a/src/plugins/pk-plugin-clear-firmware-requests.c ++++ b/src/plugins/pk-plugin-clear-firmware-requests.c +@@ -51,6 +51,8 @@ pk_plugin_transaction_finished_end (PkPlugin *plugin, + + /* clear the firmware requests directory */ + filename = g_build_filename (LOCALSTATEDIR, "run", "PackageKit", "udev", NULL); ++ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) ++ goto out; + g_debug ("clearing udev firmware requests at %s", filename); + ret = pk_directory_remove_contents (filename); + if (!ret) +diff --git a/src/plugins/pk-plugin-systemd-updates.c b/src/plugins/pk-plugin-systemd-updates.c +new file mode 100644 +index 0000000..b0abc8d +--- /dev/null ++++ b/src/plugins/pk-plugin-systemd-updates.c +@@ -0,0 +1,162 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2012 Richard Hughes ++ * ++ * Licensed under the GNU General Public License Version 2 ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ++ */ ++ ++#include ++#include ++#include ++ ++/** ++ * pk_plugin_get_description: ++ */ ++const gchar * ++pk_plugin_get_description (void) ++{ ++ return "A plugin to write the prepared-updates file"; ++} ++ ++/** ++ * pk_plugin_get_existing_prepared_updates: + **/ +static GPtrArray * -+pk_transaction_get_existing_prepared_updates (const gchar *filename) ++pk_plugin_get_existing_prepared_updates (const gchar *filename) +{ + gboolean ret; + gchar **package_ids = NULL; @@ -389,10 +934,10 @@ index afdd563..c5a29f1 100644 +} + +/** -+ * pk_transaction_array_str_exists: ++ * pk_plugin_array_str_exists: + **/ +static gboolean -+pk_transaction_array_str_exists (GPtrArray *array, const gchar *str) ++pk_plugin_array_str_exists (GPtrArray *array, const gchar *str) +{ + guint i; + const gchar *tmp; @@ -405,38 +950,53 @@ index afdd563..c5a29f1 100644 +} + +/** - * pk_transaction_write_prepared_file: - **/ - static void - pk_transaction_write_prepared_file (PkTransaction *transaction) - { - gboolean ret; ++ * pk_plugin_transaction_finished_end: ++ */ ++void ++pk_plugin_transaction_finished_end (PkPlugin *plugin, ++ PkTransaction *transaction) ++{ ++ gboolean ret; + gchar **package_ids; + gchar *packages_str = NULL; - gchar *path; - GError *error = NULL; ++ gchar *path = NULL; ++ GError *error = NULL; + GPtrArray *packages; + guint i; - - /* not interesting to us */ - if (transaction->priv->role != PK_ROLE_ENUM_UPDATE_PACKAGES && -@@ -1121,14 +1183,28 @@ pk_transaction_write_prepared_file (PkTransaction *transaction) - return; - } - -- /* write filename */ ++ 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); ++ if (!pk_bitfield_contain (transaction_flags, ++ PK_TRANSACTION_FLAG_ENUM_ONLY_DOWNLOAD)) ++ return; ++ + /* get the existing prepared updates */ - path = g_build_filename (LOCALSTATEDIR, - "lib", - "PackageKit", - "prepared-update", - NULL); -+ packages = pk_transaction_get_existing_prepared_updates (path); ++ path = g_build_filename (LOCALSTATEDIR, ++ "lib", ++ "PackageKit", ++ "prepared-update", ++ NULL); ++ packages = pk_plugin_get_existing_prepared_updates (path); + + /* add any new ones */ -+ package_ids = transaction->priv->cached_package_ids; ++ package_ids = pk_transaction_get_package_ids (transaction); + for (i = 0; package_ids[i] != NULL; i++) { -+ if (!pk_transaction_array_str_exists (packages, package_ids[i])) { ++ if (!pk_plugin_array_str_exists (packages, package_ids[i])) { + g_ptr_array_add (packages, + g_strdup (package_ids[i])); + } @@ -445,358 +1005,18 @@ index afdd563..c5a29f1 100644 + + /* write filename */ + packages_str = g_strjoinv ("\n", (gchar **) packages->pdata); - ret = g_file_set_contents (path, -- pk_role_enum_to_string (transaction->priv->role), ++ ret = g_file_set_contents (path, + packages_str, - -1, - &error); - if (!ret) { -@@ -1136,6 +1212,7 @@ pk_transaction_write_prepared_file (PkTransaction *transaction) - path, error->message); - g_error_free (error); - } -+ g_free (packages_str); - g_free (path); - } - -@@ -1751,7 +1828,7 @@ pk_transaction_transaction_cb (PkTransactionDb *tdb, - transaction->priv->tid, - PK_DBUS_INTERFACE_TRANSACTION, - "Transaction", -- g_variant_new ("(osbsusus)", -+ g_variant_new ("(osbuusus)", - tid, - timespec, - succeeded, -@@ -2880,6 +2957,21 @@ pk_transaction_obtain_authorization (PkTransaction *transaction, - - g_return_val_if_fail (priv->sender != NULL, FALSE); - -+ /* we don't need to authenticate at all to just download packages */ -+ if (pk_bitfield_contain (transaction->priv->cached_transaction_flags, -+ PK_TRANSACTION_FLAG_ENUM_ONLY_DOWNLOAD)) { -+ g_debug ("No authentication required for only-download"); -+ ret = pk_transaction_commit (transaction); -+ if (!ret) { -+ g_set_error_literal (error, -+ PK_TRANSACTION_ERROR, -+ PK_TRANSACTION_ERROR_COMMIT_FAILED, -+ "Could not commit to a transaction object"); -+ pk_transaction_release_tid (transaction); -+ goto out; -+ } -+ } -+ - /* we should always have subject */ - if (priv->subject == NULL) { - g_set_error (error, PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_REFUSED_BY_POLICY, -@@ -3029,6 +3121,18 @@ pk_transaction_get_role (PkTransaction *transaction) - } - - /** -+ * pk_transaction_set_role: -+ **/ -+static void -+pk_transaction_set_role (PkTransaction *transaction, PkRoleEnum role) -+{ -+ transaction->priv->role = role; -+ pk_transaction_emit_property_changed (transaction, -+ "Role", -+ g_variant_new_uint32 (role)); -+} -+ -+/** - * pk_transaction_dbus_return: - **/ - static void -@@ -3065,7 +3169,6 @@ pk_transaction_accept_eula (PkTransaction *transaction, - - g_return_if_fail (PK_IS_TRANSACTION (transaction)); - g_return_if_fail (transaction->priv->tid != NULL); -- transaction->priv->role = PK_ROLE_ENUM_ACCEPT_EULA; - - g_variant_get (params, "(&s)", - &eula_id); -@@ -3077,6 +3180,8 @@ pk_transaction_accept_eula (PkTransaction *transaction, - goto out; - } - -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_ACCEPT_EULA); -+ - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, - PK_ROLE_ENUM_ACCEPT_EULA, -@@ -3319,7 +3424,7 @@ pk_transaction_download_packages (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_package_ids = g_strdupv (package_ids); - transaction->priv->cached_directory = g_strdup (directory); -- transaction->priv->role = PK_ROLE_ENUM_DOWNLOAD_PACKAGES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_DOWNLOAD_PACKAGES); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3360,7 +3465,7 @@ pk_transaction_get_categories (PkTransaction *transaction, - goto out; - } - -- transaction->priv->role = PK_ROLE_ENUM_GET_CATEGORIES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_CATEGORIES); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3434,7 +3539,7 @@ pk_transaction_get_depends (PkTransaction *transaction, - transaction->priv->cached_filters = filter; - transaction->priv->cached_package_ids = g_strdupv (package_ids); - transaction->priv->cached_force = recursive; -- transaction->priv->role = PK_ROLE_ENUM_GET_DEPENDS; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_DEPENDS); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3504,7 +3609,7 @@ pk_transaction_get_details (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_package_ids = g_strdupv (package_ids); -- transaction->priv->role = PK_ROLE_ENUM_GET_DETAILS; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_DETAILS); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3545,7 +3650,7 @@ pk_transaction_get_distro_upgrades (PkTransaction *transaction, - } - - /* save so we can run later */ -- transaction->priv->role = PK_ROLE_ENUM_GET_DISTRO_UPGRADES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_DISTRO_UPGRADES); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3613,7 +3718,7 @@ pk_transaction_get_files (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_package_ids = g_strdupv (package_ids); -- transaction->priv->role = PK_ROLE_ENUM_GET_FILES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_FILES); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3659,7 +3764,7 @@ pk_transaction_get_packages (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_filters = filter; -- transaction->priv->role = PK_ROLE_ENUM_GET_PACKAGES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_PACKAGES); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3692,7 +3797,7 @@ pk_transaction_get_old_transactions (PkTransaction *transaction, - - g_debug ("GetOldTransactions method called"); - -- transaction->priv->role = PK_ROLE_ENUM_GET_OLD_TRANSACTIONS; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_OLD_TRANSACTIONS); - pk_transaction_db_get_list (transaction->priv->transaction_db, number); - idle_id = g_idle_add ((GSourceFunc) pk_transaction_finished_idle_cb, transaction); - g_source_set_name_by_id (idle_id, "[PkTransaction] finished from get-old-transactions"); -@@ -3731,7 +3836,7 @@ pk_transaction_get_repo_list (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_filters = filter; -- transaction->priv->role = PK_ROLE_ENUM_GET_REPO_LIST; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_REPO_LIST); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3806,7 +3911,7 @@ pk_transaction_get_requires (PkTransaction *transaction, - transaction->priv->cached_filters = filter; - transaction->priv->cached_package_ids = g_strdupv (package_ids); - transaction->priv->cached_force = recursive; -- transaction->priv->role = PK_ROLE_ENUM_GET_REQUIRES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_REQUIRES); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -3875,7 +3980,7 @@ pk_transaction_get_update_detail (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_package_ids = g_strdupv (package_ids); -- transaction->priv->role = PK_ROLE_ENUM_GET_UPDATE_DETAIL; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_UPDATE_DETAIL); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -4004,7 +4109,7 @@ pk_transaction_get_updates (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_filters = filter; -- transaction->priv->role = PK_ROLE_ENUM_GET_UPDATES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_GET_UPDATES); - - /* try and reuse cache */ - ret = pk_transaction_try_emit_cache (transaction); -@@ -4166,7 +4271,7 @@ pk_transaction_install_files (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_transaction_flags = transaction_flags; - transaction->priv->cached_full_paths = g_strdupv (full_paths); -- transaction->priv->role = PK_ROLE_ENUM_INSTALL_FILES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_INSTALL_FILES); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -4239,7 +4344,7 @@ pk_transaction_install_packages (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_transaction_flags = transaction_flags; - transaction->priv->cached_package_ids = g_strdupv (package_ids); -- transaction->priv->role = PK_ROLE_ENUM_INSTALL_PACKAGES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_INSTALL_PACKAGES); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -4309,7 +4414,7 @@ pk_transaction_install_signature (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_package_id = g_strdup (package_id); - transaction->priv->cached_key_id = g_strdup (key_id); -- transaction->priv->role = PK_ROLE_ENUM_INSTALL_SIGNATURE; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_INSTALL_SIGNATURE); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -4357,7 +4462,7 @@ pk_transaction_refresh_cache (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_force = force; -- transaction->priv->role = PK_ROLE_ENUM_REFRESH_CACHE; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REFRESH_CACHE); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -4435,7 +4540,7 @@ pk_transaction_remove_packages (PkTransaction *transaction, - transaction->priv->cached_package_ids = g_strdupv (package_ids); - transaction->priv->cached_allow_deps = allow_deps; - transaction->priv->cached_autoremove = autoremove; -- transaction->priv->role = PK_ROLE_ENUM_REMOVE_PACKAGES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REMOVE_PACKAGES); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -4491,7 +4596,7 @@ pk_transaction_repo_enable (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_repo_id = g_strdup (repo_id); - transaction->priv->cached_enabled = enabled; -- transaction->priv->role = PK_ROLE_ENUM_REPO_ENABLE; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REPO_ENABLE); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -4550,7 +4655,7 @@ pk_transaction_repo_set_data (PkTransaction *transaction, - transaction->priv->cached_repo_id = g_strdup (repo_id); - transaction->priv->cached_parameter = g_strdup (parameter); - transaction->priv->cached_value = g_strdup (value); -- transaction->priv->role = PK_ROLE_ENUM_REPO_SET_DATA; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REPO_SET_DATA); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -4630,7 +4735,7 @@ pk_transaction_resolve (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_package_ids = g_strdupv (packages); - transaction->priv->cached_filters = filter; -- transaction->priv->role = PK_ROLE_ENUM_RESOLVE; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_RESOLVE); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -4687,7 +4792,7 @@ pk_transaction_search_details (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_filters = filter; - transaction->priv->cached_values = g_strdupv (values); -- transaction->priv->role = PK_ROLE_ENUM_SEARCH_DETAILS; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_DETAILS); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -4754,7 +4859,7 @@ pk_transaction_search_files (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_filters = filter; - transaction->priv->cached_values = g_strdupv (values); -- transaction->priv->role = PK_ROLE_ENUM_SEARCH_FILE; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_FILE); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -4821,7 +4926,7 @@ pk_transaction_search_groups (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_filters = filter; - transaction->priv->cached_values = g_strdupv (values); -- transaction->priv->role = PK_ROLE_ENUM_SEARCH_GROUP; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_GROUP); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -4877,7 +4982,7 @@ pk_transaction_search_names (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_filters = filter; - transaction->priv->cached_values = g_strdupv (values); -- transaction->priv->role = PK_ROLE_ENUM_SEARCH_NAME; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_SEARCH_NAME); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -5112,7 +5217,7 @@ pk_transaction_update_packages (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_transaction_flags = transaction_flags; - transaction->priv->cached_package_ids = g_strdupv (package_ids); -- transaction->priv->role = PK_ROLE_ENUM_UPDATE_PACKAGES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_UPDATE_PACKAGES); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -5165,7 +5270,7 @@ pk_transaction_update_system (PkTransaction *transaction, - } - - transaction->priv->cached_transaction_flags = transaction_flags; -- transaction->priv->role = PK_ROLE_ENUM_UPDATE_SYSTEM; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_UPDATE_SYSTEM); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -5225,7 +5330,7 @@ pk_transaction_what_provides (PkTransaction *transaction, - transaction->priv->cached_filters = filter; - transaction->priv->cached_values = g_strdupv (values); - transaction->priv->cached_provides = provides; -- transaction->priv->role = PK_ROLE_ENUM_WHAT_PROVIDES; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_WHAT_PROVIDES); - - /* try to commit this */ - ret = pk_transaction_commit (transaction); -@@ -5274,7 +5379,7 @@ pk_transaction_upgrade_system (PkTransaction *transaction, - /* save so we can run later */ - transaction->priv->cached_value = g_strdup (distro_id); - transaction->priv->cached_provides = upgrade_kind; -- transaction->priv->role = PK_ROLE_ENUM_UPGRADE_SYSTEM; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_UPGRADE_SYSTEM); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -@@ -5319,7 +5424,7 @@ pk_transaction_repair_system (PkTransaction *transaction, - - /* save so we can run later */ - transaction->priv->cached_transaction_flags = transaction_flags; -- transaction->priv->role = PK_ROLE_ENUM_REPAIR_SYSTEM; -+ pk_transaction_set_role (transaction, PK_ROLE_ENUM_REPAIR_SYSTEM); - - /* try to get authorization */ - ret = pk_transaction_obtain_authorization (transaction, -diff --git a/src/plugins/pk-plugin-clear-firmware-requests.c b/src/plugins/pk-plugin-clear-firmware-requests.c -index 8b4216a..f9326f4 100644 ---- a/src/plugins/pk-plugin-clear-firmware-requests.c -+++ b/src/plugins/pk-plugin-clear-firmware-requests.c -@@ -51,6 +51,8 @@ pk_plugin_transaction_finished_end (PkPlugin *plugin, - - /* clear the firmware requests directory */ - filename = g_build_filename (LOCALSTATEDIR, "run", "PackageKit", "udev", NULL); -+ if (!g_file_test (filename, G_FILE_TEST_EXISTS)) ++ -1, ++ &error); ++ if (!ret) { ++ g_warning ("failed to write %s: %s", ++ path, error->message); ++ g_error_free (error); + goto out; - g_debug ("clearing udev firmware requests at %s", filename); - ret = pk_directory_remove_contents (filename); - if (!ret) ++ } ++out: ++ g_free (packages_str); ++ g_free (path); ++ return; ++} diff --git a/PackageKit.spec b/PackageKit.spec index 088c147..81e4cdd 100644 --- a/PackageKit.spec +++ b/PackageKit.spec @@ -3,7 +3,7 @@ Summary: Package management service Name: PackageKit Version: 0.8.1 -Release: 3%{?dist} +Release: 4%{?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 +* Mon Jul 02 2012 Richard Hughes - 0.8.1-4 +- Fix several reported problems with the offline-update funtionality. + * Fri Jun 29 2012 Richard Hughes - 0.8.1-3 - Fix several reported problems with the offline-update funtionality.