diff --git a/.gitignore b/.gitignore index 7fc59f1..d30f3f6 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,4 @@ PackageKit-0.6.7.tar.bz2 /PackageKit-0.8.14.tar.xz /PackageKit-0.8.15.tar.xz /PackageKit-0.8.16.tar.xz +/PackageKit-0.9.1-20140130.tar.xz diff --git a/PackageKit.spec b/PackageKit.spec index 5c174f2..f502690 100644 --- a/PackageKit.spec +++ b/PackageKit.spec @@ -1,22 +1,22 @@ %global _changelog_trimtime %(date +%s -d "1 year ago") +%define gitdate 20140130 + %define _default_patch_fuzz 2 %{!?python_sitelib: %define python_sitelib %(python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()")} Summary: Package management service Name: PackageKit -Version: 0.8.16 -Release: 3%{?dist} +Version: 0.9.1 +Release: 0.1.20140130%{?dist} License: GPLv2+ and LGPLv2+ URL: http://www.packagekit.org -Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.xz +#Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.xz +Source0: http://www.packagekit.org/releases/%{name}-%{version}-%{gitdate}.tar.xz # Fedora-specific: set Vendor.conf up for Fedora. Patch0: PackageKit-0.3.8-Fedora-Vendor.conf.patch -# Already upstream -Patch1: master.patch - # Upstreamable? allow use of xulrunner2 for browser-plugin support Patch4: PackageKit-0.7.4-xulrunner2.patch @@ -173,9 +173,9 @@ A simple helper that offers to install new packages on the command line using PackageKit. %prep -%setup -q +#%setup -q +%setup -q -n %{name}-%{version}-%{gitdate} %patch0 -p1 -b .fedora -%patch1 -p1 -b .master %patch4 -p1 -b .xulrunner2 NOCONFIGURE=1 ./autogen.sh @@ -203,7 +203,7 @@ make install DESTDIR=$RPM_BUILD_ROOT rm -f $RPM_BUILD_ROOT%{_libdir}/libpackagekit*.la rm -f $RPM_BUILD_ROOT%{_libdir}/packagekit-backend/*.la -rm -f $RPM_BUILD_ROOT%{_libdir}/packagekit-plugins/*.la +rm -f $RPM_BUILD_ROOT%{_libdir}/packagekit-plugins-2/*.la rm -f $RPM_BUILD_ROOT%{_libdir}/mozilla/plugins/packagekit-plugin.la rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-2.0/modules/*.la rm -f $RPM_BUILD_ROOT%{_libdir}/gtk-3.0/modules/*.la @@ -279,15 +279,14 @@ popd > /dev/null %{_libexecdir}/packagekitd %{_bindir}/pkmon %{_bindir}/pkcon -%{_bindir}/packagekit-bugreport.sh %{_bindir}/pk-debuginfo-install %exclude %{_libdir}/libpackagekit*.so.* %{_libdir}/packagekit-backend/libpk_backend_dummy.so %{_libdir}/packagekit-backend/libpk_backend_test_*.so %ghost %verify(not md5 size mtime) %{_localstatedir}/lib/PackageKit/transactions.db %{_datadir}/dbus-1/system-services/*.service -%dir %{_libdir}/packagekit-plugins -%{_libdir}/packagekit-plugins/*.so +%dir %{_libdir}/packagekit-plugins-2 +%{_libdir}/packagekit-plugins-2/*.so %{_libdir}/girepository-1.0/PackageKitPlugin-1.0.typelib %{_datadir}/dbus-1/interfaces/*.xml %{_unitdir}/packagekit-offline-update.service @@ -340,6 +339,9 @@ popd > /dev/null %{_datadir}/gtk-doc/html/PackageKit %changelog +* Thu Jan 30 2014 Richard Hughes - 0.9.1-0.1.20140130 +- Build a snapshot of master which also bumps the soname + * Tue Jan 28 2014 Richard Hughes - 0.8.16-3 - Backport three patches from master - Fixes using --cache-age when using the hawkey backend diff --git a/master.patch b/master.patch deleted file mode 100644 index 4770d10..0000000 --- a/master.patch +++ /dev/null @@ -1,804 +0,0 @@ -commit 09c9cde8c0cfec3a5f4320ec10bf2e1b0f9b460f -Author: Richard Hughes -Date: Thu Jan 23 13:46:49 2014 +0000 - - hawkey: Fix installing i386 packages on a 64bit computer - -diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c -index f2ee746..b069396 100644 ---- a/backends/hawkey/pk-backend-hawkey.c -+++ b/backends/hawkey/pk-backend-hawkey.c -@@ -3196,10 +3196,12 @@ out: - } - - /** -- * hif_is_installed_package_name: -+ * hif_is_installed_package_name_arch: - */ - static gboolean --hif_is_installed_package_name (HySack sack, const gchar *name) -+hif_is_installed_package_name_arch (HySack sack, -+ const gchar *name, -+ const gchar *arch) - { - gboolean ret; - HyPackageList pkglist = NULL; -@@ -3208,6 +3210,7 @@ hif_is_installed_package_name (HySack sack, const gchar *name) - /* run query */ - query = hy_query_create (sack); - hy_query_filter (query, HY_PKG_NAME, HY_EQ, name); -+ hy_query_filter (query, HY_PKG_ARCH, HY_EQ, arch); - hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME); - pkglist = hy_query_run (query); - -@@ -3228,7 +3231,9 @@ hif_is_installed_package_id (HySack sack, const gchar *package_id) - gboolean ret; - gchar **split; - split = pk_package_id_split (package_id); -- ret = hif_is_installed_package_name (sack, split[PK_PACKAGE_ID_NAME]); -+ ret = hif_is_installed_package_name_arch (sack, -+ split[PK_PACKAGE_ID_NAME], -+ split[PK_PACKAGE_ID_ARCH]); - g_strfreev (split); - return ret; - } -commit 5776000231f81f7d0d764038a9957439c35a7a5d -Author: Richard Hughes -Date: Thu Jan 23 14:25:55 2014 +0000 - - hawkey: Release locks early if the state fails - -diff --git a/backends/hawkey/hif-lock.c b/backends/hawkey/hif-lock.c -index 97066f4..a644330 100644 ---- a/backends/hawkey/hif-lock.c -+++ b/backends/hawkey/hif-lock.c -@@ -91,6 +91,19 @@ hif_lock_type_to_string (HifLockType lock_type) - } - - /** -+ * hif_lock_mode_to_string: -+ **/ -+static const gchar * -+hif_lock_mode_to_string (HifLockMode lock_mode) -+{ -+ if (lock_mode == HIF_LOCK_MODE_THREAD) -+ return "thread"; -+ if (lock_mode == HIF_LOCK_MODE_PROCESS) -+ return "process"; -+ return "unknown"; -+} -+ -+/** - * hif_lock_get_item_by_type_mode: - **/ - static HifLockItem * -@@ -337,7 +350,9 @@ hif_lock_take (HifLock *lock, - g_set_error (error, - HIF_ERROR, - PK_ERROR_ENUM_CANNOT_GET_LOCK, -- "already locked by %s", -+ "%s[%s] already locked by %s", -+ hif_lock_type_to_string (type), -+ hif_lock_mode_to_string (mode), - cmdline); - goto out; - } -@@ -520,7 +535,7 @@ hif_lock_finalize (GObject *object) - if (item->refcount > 0) { - g_warning ("held lock %s at shutdown", - hif_lock_type_to_string (item->type)); -- hif_lock_release (lock, item->type, NULL); -+ hif_lock_release (lock, item->id, NULL); - } - } - -diff --git a/backends/hawkey/hif-source.c b/backends/hawkey/hif-source.c -index b79f525..fffcc31 100644 ---- a/backends/hawkey/hif-source.c -+++ b/backends/hawkey/hif-source.c -@@ -695,6 +695,7 @@ hif_source_update (HifSource *src, - if (!ret) - goto out; - out: -+ hif_state_release_locks (state); - lr_handle_setopt (src->repo_handle, NULL, LRO_PROGRESSCB, NULL); - lr_handle_setopt (src->repo_handle, NULL, LRO_PROGRESSDATA, 0xdeadbeef); - return ret; -diff --git a/backends/hawkey/hif-state.c b/backends/hawkey/hif-state.c -index 6cd706f..fc6753c 100644 ---- a/backends/hawkey/hif-state.c -+++ b/backends/hawkey/hif-state.c -@@ -273,13 +273,17 @@ hif_state_set_speed (HifState *state, guint64 speed) - /** - * hif_state_release_locks: - **/ --static gboolean -+gboolean - hif_state_release_locks (HifState *state) - { - gboolean ret = TRUE; - guint i; - guint lock_id; - -+ /* release children first */ -+ if (state->priv->child != NULL) -+ hif_state_release_locks (state->priv->child); -+ - /* release each one */ - for (i = 0; i < state->priv->lock_ids->len; i++) { - lock_id = GPOINTER_TO_UINT (g_ptr_array_index (state->priv->lock_ids, i)); -diff --git a/backends/hawkey/hif-state.h b/backends/hawkey/hif-state.h -index ffd42e9..b7b26f4 100644 ---- a/backends/hawkey/hif-state.h -+++ b/backends/hawkey/hif-state.h -@@ -131,6 +131,7 @@ gboolean hif_state_take_lock (HifState *state, - HifLockType lock_type, - HifLockMode lock_mode, - GError **error); -+gboolean hif_state_release_locks (HifState *state); - - G_END_DECLS - -diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c -index b069396..40831b9 100644 ---- a/backends/hawkey/pk-backend-hawkey.c -+++ b/backends/hawkey/pk-backend-hawkey.c -@@ -521,8 +521,10 @@ pk_backend_stop_job (PkBackend *backend, PkBackendJob *job) - PkBackendHifJobData *job_data = pk_backend_job_get_user_data (job); - - g_object_unref (job_data->cancellable); -- if (job_data->state != NULL) -+ if (job_data->state != NULL) { -+ hif_state_release_locks (job_data->state); - g_object_unref (job_data->state); -+ } - if (job_data->sources != NULL) - g_ptr_array_unref (job_data->sources); - g_ptr_array_unref (job_data->packages_to_download); -@@ -2954,6 +2956,7 @@ pk_backend_transaction_commit (PkBackendJob *job, HifState *state, GError **erro - if (!ret) - goto out; - out: -+ hif_state_release_locks (state); - g_free (verbosity_string); - if (commit != NULL) { - g_timer_destroy (commit->timer); -diff --git a/backends/hawkey/hif-sack.c b/backends/hawkey/hif-sack.c -index 28c1a65..0c151c3 100644 ---- a/backends/hawkey/hif-sack.c -+++ b/backends/hawkey/hif-sack.c -@@ -34,6 +34,7 @@ - gboolean - hif_sack_add_source (HySack sack, - HifSource *src, -+ guint permissible_cache_age, - HifSackAddFlags flags, - HifState *state, - GError **error) -@@ -54,7 +55,10 @@ hif_sack_add_source (HySack sack, - - /* check repo */ - state_local = hif_state_get_child (state); -- ret = hif_source_check (src, state_local, &error_local); -+ ret = hif_source_check (src, -+ permissible_cache_age, -+ state_local, -+ &error_local); - if (!ret) { - g_debug ("failed to check, attempting update: %s", - error_local->message); -@@ -118,6 +122,7 @@ out: - gboolean - hif_sack_add_sources (HySack sack, - GPtrArray *sources, -+ guint permissible_cache_age, - HifSackAddFlags flags, - HifState *state, - GError **error) -@@ -143,7 +148,12 @@ hif_sack_add_sources (HySack sack, - continue; - - state_local = hif_state_get_child (state); -- ret = hif_sack_add_source (sack, src, flags, state_local, error); -+ ret = hif_sack_add_source (sack, -+ src, -+ permissible_cache_age, -+ flags, -+ state_local, -+ error); - if (!ret) - goto out; - -diff --git a/backends/hawkey/hif-sack.h b/backends/hawkey/hif-sack.h -index abfe7f9..435e95b 100644 ---- a/backends/hawkey/hif-sack.h -+++ b/backends/hawkey/hif-sack.h -@@ -39,11 +39,13 @@ typedef enum { - - gboolean hif_sack_add_source (HySack sack, - HifSource *src, -+ guint permissible_cache_age, - HifSackAddFlags flags, - HifState *state, - GError **error); - gboolean hif_sack_add_sources (HySack sack, - GPtrArray *sources, -+ guint permissible_cache_age, - HifSackAddFlags flags, - HifState *state, - GError **error); -diff --git a/backends/hawkey/hif-source.c b/backends/hawkey/hif-source.c -index fffcc31..3dc5c85 100644 ---- a/backends/hawkey/hif-source.c -+++ b/backends/hawkey/hif-source.c -@@ -44,7 +44,8 @@ struct HifSource { - gchar *id; - gchar *location; /* /var/cache/PackageKit/metadata/fedora */ - gchar *location_tmp; /* /var/cache/PackageKit/metadata/fedora.tmp */ -- gint64 timestamp; -+ gint64 timestamp_generated; /* µs */ -+ gint64 timestamp_modified; /* µs */ - GKeyFile *keyfile; - HifSourceKind kind; - HyRepo repo; -@@ -342,10 +343,48 @@ hif_source_update_state_cb (void *user_data, - } - - /** -+ * hif_source_set_timestamp_modified: -+ */ -+static gboolean -+hif_source_set_timestamp_modified (HifSource *src, GError **error) -+{ -+ gboolean ret = TRUE; -+ gchar *filename; -+ GFile *file; -+ GFileInfo *info; -+ -+ filename = g_build_filename (src->location, "repodata", "repomd.xml", NULL); -+ file = g_file_new_for_path (filename); -+ info = g_file_query_info (file, -+ G_FILE_ATTRIBUTE_TIME_MODIFIED "," -+ G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC, -+ G_FILE_QUERY_INFO_NONE, -+ NULL, -+ error); -+ if (info == NULL) { -+ ret = FALSE; -+ goto out; -+ } -+ src->timestamp_modified = g_file_info_get_attribute_uint64 (info, -+ G_FILE_ATTRIBUTE_TIME_MODIFIED) * G_USEC_PER_SEC; -+ src->timestamp_modified += g_file_info_get_attribute_uint32 (info, -+ G_FILE_ATTRIBUTE_TIME_MODIFIED_USEC); -+out: -+ g_free (filename); -+ g_object_unref (file); -+ if (info != NULL) -+ g_object_unref (info); -+ return ret; -+} -+ -+/** - * hif_source_check: - */ - gboolean --hif_source_check (HifSource *src, HifState *state, GError **error) -+hif_source_check (HifSource *src, -+ guint permissible_cache_age, -+ HifState *state, -+ GError **error) - { - const gchar *download_list[] = { "primary", - "filelists", -@@ -357,6 +396,7 @@ hif_source_check (HifSource *src, HifState *state, GError **error) - GError *error_local = NULL; - LrYumRepo *yum_repo; - const gchar *urls[] = { "", NULL }; -+ gint64 age_of_data; /* in seconds */ - - /* has the media repo vanished? */ - if (src->kind == HIF_SOURCE_KIND_MEDIA && -@@ -406,7 +446,7 @@ hif_source_check (HifSource *src, HifState *state, GError **error) - - /* get timestamp */ - ret = lr_result_getinfo (src->repo_result, &error_local, -- LRR_YUM_TIMESTAMP, &src->timestamp); -+ LRR_YUM_TIMESTAMP, &src->timestamp_generated); - if (!ret) { - g_set_error (error, - HIF_ERROR, -@@ -417,6 +457,23 @@ hif_source_check (HifSource *src, HifState *state, GError **error) - goto out; - } - -+ /* check metadata age */ -+ if (permissible_cache_age != G_MAXUINT) { -+ ret = hif_source_set_timestamp_modified (src, error); -+ if (!ret) -+ goto out; -+ age_of_data = (g_get_real_time () - src->timestamp_modified) / G_USEC_PER_SEC; -+ if (age_of_data > permissible_cache_age) { -+ ret = FALSE; -+ g_set_error (error, -+ HIF_ERROR, -+ PK_ERROR_ENUM_INTERNAL_ERROR, -+ "cache too old: %"G_GINT64_FORMAT" > %i", -+ age_of_data, permissible_cache_age); -+ goto out; -+ } -+ } -+ - /* create a HyRepo */ - src->repo = hy_repo_create (src->id); - hy_repo_set_string (src->repo, HY_REPO_MD_FN, yum_repo->repomd); -@@ -653,7 +710,7 @@ hif_source_update (HifSource *src, - goto out; - } - if ((flags & HIF_SOURCE_UPDATE_FLAG_FORCE) == 0 || -- timestamp_new < src->timestamp) { -+ timestamp_new < src->timestamp_generated) { - g_debug ("fresh metadata was older than what we have, ignoring"); - goto out; - } -@@ -686,7 +743,7 @@ hif_source_update (HifSource *src, - - /* now setup internal hawkey stuff */ - state_local = hif_state_get_child (state); -- ret = hif_source_check (src, state_local, error); -+ ret = hif_source_check (src, G_MAXUINT, state_local, error); - if (!ret) - goto out; - -diff --git a/backends/hawkey/hif-source.h b/backends/hawkey/hif-source.h -index df4b805..f1d230e 100644 ---- a/backends/hawkey/hif-source.h -+++ b/backends/hawkey/hif-source.h -@@ -62,6 +62,7 @@ gchar *hif_source_get_description (HifSource *src); - HyRepo hif_source_get_repo (HifSource *src); - gboolean hif_source_is_devel (HifSource *src); - gboolean hif_source_check (HifSource *src, -+ guint permissible_cache_age, - HifState *state, - GError **error); - gboolean hif_source_update (HifSource *src, -diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c -index 40831b9..1a10e04 100644 ---- a/backends/hawkey/pk-backend-hawkey.c -+++ b/backends/hawkey/pk-backend-hawkey.c -@@ -593,8 +593,12 @@ hif_utils_add_remote (PkBackendJob *job, - - /* add each repo */ - state_local = hif_state_get_child (state); -- ret = hif_sack_add_sources (sack, job_data->sources, -- flags, state_local, error); -+ ret = hif_sack_add_sources (sack, -+ job_data->sources, -+ pk_backend_job_get_cache_age (job), -+ flags, -+ state_local, -+ error); - if (!ret) - goto out; - -@@ -648,6 +652,13 @@ hif_utils_create_sack_for_filters (PkBackendJob *job, - } - g_timer_reset (priv->repos_timer); - -+ /* if we've specified a specific cache-age then do not use the cache */ -+ if ((flags & HIF_SACK_ADD_FLAG_REMOTE) > 0 && -+ pk_backend_job_get_cache_age (job) != G_MAXUINT) { -+ g_debug ("not reusing sack specific cache age requested"); -+ create_flags &= ~HIF_CREATE_SACK_FLAG_USE_CACHE; -+ } -+ - /* do we have anything in the cache */ - cache_key = g_strdup_printf ("HySack::%i", flags); - if ((create_flags & HIF_CREATE_SACK_FLAG_USE_CACHE) > 0) -@@ -1306,7 +1317,10 @@ pk_backend_get_mime_types (PkBackend *backend) - * pk_backend_refresh_source: - */ - static gboolean --pk_backend_refresh_source (HifSource *src, HifState *state, GError **error) -+pk_backend_refresh_source (PkBackendJob *job, -+ HifSource *src, -+ HifState *state, -+ GError **error) - { - gboolean ret; - gboolean src_okay; -@@ -1323,7 +1337,10 @@ pk_backend_refresh_source (HifSource *src, HifState *state, GError **error) - - /* is the source up to date? */ - state_local = hif_state_get_child (state); -- src_okay = hif_source_check (src, state_local, &error_local); -+ src_okay = hif_source_check (src, -+ pk_backend_job_get_cache_age (job), -+ state_local, -+ &error_local); - if (!src_okay) { - g_debug ("repo %s not okay [%s], refreshing", - hif_source_get_id (src), error_local->message); -@@ -1424,7 +1441,7 @@ pk_backend_refresh_cache_thread (PkBackendJob *job, - - /* check and download */ - state_local = hif_state_get_child (job_data->state); -- ret = pk_backend_refresh_source (src, state_local, &error); -+ ret = pk_backend_refresh_source (job, src, state_local, &error); - if (!ret) { - pk_backend_job_error_code (job, error->code, "%s", error->message); - g_error_free (error); -@@ -3199,21 +3216,20 @@ out: - } - - /** -- * hif_is_installed_package_name_arch: -+ * hif_is_installed_package_id_name: - */ - static gboolean --hif_is_installed_package_name_arch (HySack sack, -- const gchar *name, -- const gchar *arch) -+hif_is_installed_package_id_name (HySack sack, const gchar *package_id) - { - gboolean ret; -+ gchar **split; - HyPackageList pkglist = NULL; - HyQuery query = NULL; - - /* run query */ - query = hy_query_create (sack); -- hy_query_filter (query, HY_PKG_NAME, HY_EQ, name); -- hy_query_filter (query, HY_PKG_ARCH, HY_EQ, arch); -+ split = pk_package_id_split (package_id); -+ hy_query_filter (query, HY_PKG_NAME, HY_EQ, split[PK_PACKAGE_ID_NAME]); - hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME); - pkglist = hy_query_run (query); - -@@ -3222,21 +3238,34 @@ hif_is_installed_package_name_arch (HySack sack, - - hy_packagelist_free (pkglist); - hy_query_free (query); -+ g_strfreev (split); - return ret; - } - - /** -- * hif_is_installed_package_id: -+ * hif_is_installed_package_id_name_arch: - */ - static gboolean --hif_is_installed_package_id (HySack sack, const gchar *package_id) -+hif_is_installed_package_id_name_arch (HySack sack, const gchar *package_id) - { - gboolean ret; - gchar **split; -+ HyPackageList pkglist = NULL; -+ HyQuery query = NULL; -+ -+ /* run query */ -+ query = hy_query_create (sack); - split = pk_package_id_split (package_id); -- ret = hif_is_installed_package_name_arch (sack, -- split[PK_PACKAGE_ID_NAME], -- split[PK_PACKAGE_ID_ARCH]); -+ hy_query_filter (query, HY_PKG_NAME, HY_EQ, split[PK_PACKAGE_ID_NAME]); -+ hy_query_filter (query, HY_PKG_ARCH, HY_EQ, split[PK_PACKAGE_ID_ARCH]); -+ hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME); -+ pkglist = hy_query_run (query); -+ -+ /* any matches? */ -+ ret = hy_packagelist_count (pkglist) > 0; -+ -+ hy_packagelist_free (pkglist); -+ hy_query_free (query); - g_strfreev (split); - return ret; - } -@@ -3322,7 +3351,7 @@ pk_backend_remove_packages_thread (PkBackendJob *job, GVariant *params, gpointer - - /* ensure packages are already installed */ - for (i = 0; package_ids[i] != NULL; i++) { -- ret = hif_is_installed_package_id (sack, package_ids[i]); -+ ret = hif_is_installed_package_id_name_arch (sack, package_ids[i]); - if (!ret) { - gchar *printable_tmp; - printable_tmp = pk_package_id_to_printable (package_ids[i]); -@@ -3465,7 +3494,7 @@ pk_backend_install_packages_thread (PkBackendJob *job, GVariant *params, gpointe - - /* ensure packages are not already installed */ - for (i = 0; package_ids[i] != NULL; i++) { -- ret = hif_is_installed_package_id (sack, package_ids[i]); -+ ret = hif_is_installed_package_id_name_arch (sack, package_ids[i]); - if (ret) { - gchar *printable_tmp; - printable_tmp = pk_package_id_to_printable (package_ids[i]); -@@ -3729,13 +3758,13 @@ pk_backend_update_packages_thread (PkBackendJob *job, GVariant *params, gpointer - - /* ensure packages are not already installed */ - for (i = 0; package_ids[i] != NULL; i++) { -- ret = hif_is_installed_package_id (sack, package_ids[i]); -+ ret = hif_is_installed_package_id_name (sack, package_ids[i]); - if (!ret) { - gchar *printable_tmp; - printable_tmp = pk_package_id_to_printable (package_ids[i]); - pk_backend_job_error_code (job, - PK_ERROR_ENUM_PACKAGE_NOT_INSTALLED, -- "%s is not already installed", -+ "cannot update: %s is not already installed", - printable_tmp); - g_free (printable_tmp); - goto out; -diff --git a/client/pk-console.c b/client/pk-console.c -index 79f1bb5..4f01942 100644 ---- a/client/pk-console.c -+++ b/client/pk-console.c -@@ -1801,7 +1801,7 @@ main (int argc, char *argv[]) - gboolean background = FALSE; - gboolean noninteractive = FALSE; - gboolean only_download = FALSE; -- guint cache_age = 0; -+ guint cache_age = G_MAXUINT; - gint retval_copy = 0; - gboolean plain = FALSE; - gboolean program_version = FALSE; -diff --git a/contrib/systemd-updates/pk-offline-update.c b/contrib/systemd-updates/pk-offline-update.c -index cf0447d..295b2dd 100644 ---- a/contrib/systemd-updates/pk-offline-update.c -+++ b/contrib/systemd-updates/pk-offline-update.c -@@ -33,6 +33,7 @@ - #define PK_OFFLINE_UPDATE_RESULTS_GROUP "PackageKit Offline Update Results" - #define PK_OFFLINE_UPDATE_TRIGGER_FILENAME "/system-update" - #define PK_OFFLINE_UPDATE_RESULTS_FILENAME "/var/lib/PackageKit/offline-update-competed" -+#define PK_OFFLINE_UPDATE_ACTION_FILENAME "/var/lib/PackageKit/offline-update-action" - #define PK_OFFLINE_PREPARED_UPDATE_FILENAME "/var/lib/PackageKit/prepared-update" - - /** -@@ -200,12 +201,6 @@ pk_offline_update_reboot (void) - GError *error = NULL; - GVariant *val = NULL; - -- /* allow testing without rebooting */ -- if (g_getenv ("PK_OFFLINE_UPDATE_TEST") != NULL) { -- g_print ("TESTING, so not rebooting\n"); -- return; -- } -- - /* reboot using systemd */ - sd_journal_print (LOG_INFO, "rebooting"); - pk_offline_update_set_plymouth_mode ("shutdown"); -@@ -245,6 +240,54 @@ out: - } - - /** -+ * pk_offline_update_power_off: -+ **/ -+static void -+pk_offline_update_power_off (void) -+{ -+ GDBusConnection *connection; -+ GError *error = NULL; -+ GVariant *val = NULL; -+ -+ /* reboot using systemd */ -+ sd_journal_print (LOG_INFO, "shutting down"); -+ pk_offline_update_set_plymouth_mode ("shutdown"); -+ /* TRANSLATORS: we've finished doing offline updates */ -+ pk_offline_update_set_plymouth_msg (_("Shutting down after installing updates…")); -+ connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); -+ if (connection == NULL) { -+ sd_journal_print (LOG_WARNING, -+ "Failed to get system bus connection: %s", -+ error->message); -+ g_error_free (error); -+ goto out; -+ } -+ val = g_dbus_connection_call_sync (connection, -+ "org.freedesktop.systemd1", -+ "/org/freedesktop/systemd1", -+ "org.freedesktop.systemd1.Manager", -+ "PowerOff", -+ NULL, -+ NULL, -+ G_DBUS_CALL_FLAGS_NONE, -+ -1, -+ NULL, -+ &error); -+ if (val == NULL) { -+ sd_journal_print (LOG_WARNING, -+ "Failed to power off: %s", -+ error->message); -+ g_error_free (error); -+ goto out; -+ } -+out: -+ if (connection != NULL) -+ g_object_unref (connection); -+ if (val != NULL) -+ g_variant_unref (val); -+} -+ -+/** - * pk_offline_update_write_error: - **/ - static void -@@ -487,6 +530,50 @@ pk_offline_update_sigint_cb (gpointer user_data) - return FALSE; - } - -+typedef enum { -+ PK_OFFLINE_UPDATE_ACTION_NOTHING, -+ PK_OFFLINE_UPDATE_ACTION_REBOOT, -+ PK_OFFLINE_UPDATE_ACTION_POWER_OFF -+} PkOfflineUpdateAction; -+ -+static PkOfflineUpdateAction -+pk_offline_update_get_action (void) -+{ -+ gboolean ret; -+ gchar *action_data = NULL; -+ PkOfflineUpdateAction action; -+ -+ /* allow testing without rebooting */ -+ if (g_getenv ("PK_OFFLINE_UPDATE_TEST") != NULL) { -+ g_print ("TESTING, so not doing action\n"); -+ action = PK_OFFLINE_UPDATE_ACTION_NOTHING; -+ goto out; -+ } -+ -+ ret = g_file_get_contents (PK_OFFLINE_UPDATE_ACTION_FILENAME, -+ &action_data, -+ NULL, -+ NULL); -+ if (!ret) { -+ g_warning ("Failed to get post-update action, using reboot"); -+ action = PK_OFFLINE_UPDATE_ACTION_REBOOT; -+ goto out; -+ } -+ if (g_strcmp0 (action_data, "reboot") == 0) { -+ action = PK_OFFLINE_UPDATE_ACTION_REBOOT; -+ goto out; -+ } -+ if (g_strcmp0 (action_data, "power-off") == 0) { -+ action = PK_OFFLINE_UPDATE_ACTION_POWER_OFF; -+ goto out; -+ } -+ g_warning ("failed to parse action '%s', using reboot", action_data); -+ action = PK_OFFLINE_UPDATE_ACTION_REBOOT; -+out: -+ g_free (action_data); -+ return action; -+} -+ - /** - * main: - **/ -@@ -502,6 +589,7 @@ main (int argc, char *argv[]) - GMainLoop *loop = NULL; - PkResults *results = NULL; - PkTask *task = NULL; -+ PkOfflineUpdateAction action; - PkProgressBar *progressbar = NULL; - - #if (GLIB_MAJOR_VERSION == 2 && GLIB_MINOR_VERSION < 35) -@@ -598,7 +686,12 @@ out: - g_timeout_add_seconds (10, pk_offline_update_loop_quit_cb, loop); - g_main_loop_run (loop); - } -- pk_offline_update_reboot (); -+ /* we have to manually either restart or shutdown */ -+ action = pk_offline_update_get_action (); -+ if (action == PK_OFFLINE_UPDATE_ACTION_REBOOT) -+ pk_offline_update_reboot (); -+ else if (action == PK_OFFLINE_UPDATE_ACTION_POWER_OFF) -+ pk_offline_update_power_off (); - g_free (packages_data); - g_strfreev (package_ids); - if (progressbar != NULL) -diff --git a/contrib/systemd-updates/pk-trigger-offline-update.c b/contrib/systemd-updates/pk-trigger-offline-update.c -index 3b59b1d..532bf3d 100644 ---- a/contrib/systemd-updates/pk-trigger-offline-update.c -+++ b/contrib/systemd-updates/pk-trigger-offline-update.c -@@ -30,17 +30,21 @@ - #include - - #define PK_OFFLINE_UPDATE_GENERATOR_FLAG "/system-update" -+#define PK_OFFLINE_UPDATE_ACTION_FILENAME "/var/lib/PackageKit/offline-update-action" - - int - main (int argc, char *argv[]) - { -+ FILE *fp = NULL; - int rc; -+ int retval = EXIT_SUCCESS; - struct passwd *pw; - - /* ensure root user */ - if (getuid () != 0 || geteuid () != 0) { - fprintf (stderr, "This program can only be used using pkexec\n"); -- return EXIT_FAILURE; -+ retval = EXIT_FAILURE; -+ goto out; - } - - if (argc > 1 && strcmp (argv[1], "--cancel") == 0) { -@@ -48,18 +52,34 @@ main (int argc, char *argv[]) - if (rc < 0) { - fprintf (stderr, "Failed to remove file " PK_OFFLINE_UPDATE_GENERATOR_FLAG ": %s\n", - strerror (errno)); -- return EXIT_FAILURE; -+ retval = EXIT_FAILURE; -+ goto out; - } - - return EXIT_SUCCESS; - } - -+ /* open success action */ -+ fp = fopen (PK_OFFLINE_UPDATE_ACTION_FILENAME, "w+"); -+ if (fp == NULL) { -+ fprintf (stderr, "Failed to open %s for writing\n", -+ PK_OFFLINE_UPDATE_ACTION_FILENAME); -+ retval = EXIT_FAILURE; -+ goto out; -+ } -+ if (argc > 1 && strcmp (argv[1], "power-off") == 0) { -+ fputs ("power-off", fp); -+ } else { -+ fputs ("reboot", fp); -+ } -+ - /* create symlink for the systemd-system-update-generator */ - rc = symlink ("/var/cache", PK_OFFLINE_UPDATE_GENERATOR_FLAG); - if (rc < 0) { - fprintf (stderr, "Failed to create symlink: %s\n", - strerror (errno)); -- return EXIT_FAILURE; -+ retval = EXIT_FAILURE; -+ goto out; - } - - /* get UID for username */ -@@ -67,7 +87,8 @@ main (int argc, char *argv[]) - if (pw == NULL) { - fprintf (stderr, "Failed to get PackageKit uid: %s\n", - strerror (errno)); -- return EXIT_FAILURE; -+ retval = EXIT_FAILURE; -+ goto out; - } - - /* change it to the PackageKit user so the daemon can delete -@@ -76,8 +97,11 @@ main (int argc, char *argv[]) - if (rc < 0) { - fprintf (stderr, "Failed to change owner of symlink: %s\n", - strerror (errno)); -- return EXIT_FAILURE; -+ retval = EXIT_FAILURE; -+ goto out; - } -- -- return EXIT_SUCCESS; -+out: -+ if (fp != NULL) -+ fclose (fp); -+ return retval; - } -diff --git a/lib/packagekit-glib2/pk-control.h b/lib/packagekit-glib2/pk-control.h -index a6c3493..3c483e6 100644 ---- a/lib/packagekit-glib2/pk-control.h -+++ b/lib/packagekit-glib2/pk-control.h -@@ -132,13 +132,6 @@ void pk_control_set_proxy2_async (PkControl *control, - gboolean pk_control_set_proxy_finish (PkControl *control, - GAsyncResult *res, - GError **error); --void pk_control_get_network_state_async (PkControl *control, -- GCancellable *cancellable, -- GAsyncReadyCallback callback, -- gpointer user_data); --PkNetworkEnum pk_control_get_network_state_finish (PkControl *control, -- GAsyncResult *res, -- GError **error); - void pk_control_get_time_since_action_async (PkControl *control, - PkRoleEnum role, - GCancellable *cancellable, diff --git a/sources b/sources index 4162d0e..f8bffea 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -a7893d3dccdd37ece424c9a316c6d750 PackageKit-0.8.16.tar.xz +2e440b23b02c936bcba5ef147d008dc4 PackageKit-0.9.1-20140130.tar.xz