[gnome-software/gnome-3-20] trivial: Check the PackageKit error more carefully
- From: Richard Hughes <rhughes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-software/gnome-3-20] trivial: Check the PackageKit error more carefully
- Date: Tue, 19 Apr 2016 20:56:10 +0000 (UTC)
commit 57528ce9bc2a446a8d020176947a3a4067c19adb
Author: Richard Hughes <richard hughsie com>
Date: Tue Apr 19 20:22:55 2016 +0100
trivial: Check the PackageKit error more carefully
PackageKit fails early with result==NULL and a GError set, and fails late with
a valid PkResult object but with the PkError set. Check for both kinds of
errors in a shared helper.
This fixes the distro upgrade state being set correctly if the download is
cancelled.
src/plugins/gs-plugin-packagekit-origin.c | 4 +-
src/plugins/gs-plugin-packagekit-refine.c | 50 ++------------------
src/plugins/gs-plugin-packagekit-refresh.c | 8 +--
src/plugins/gs-plugin-packagekit.c | 69 +++++----------------------
src/plugins/packagekit-common.c | 28 +++++++++++
src/plugins/packagekit-common.h | 2 +
6 files changed, 52 insertions(+), 109 deletions(-)
---
diff --git a/src/plugins/gs-plugin-packagekit-origin.c b/src/plugins/gs-plugin-packagekit-origin.c
index 1b5cfa5..2cdc86f 100644
--- a/src/plugins/gs-plugin-packagekit-origin.c
+++ b/src/plugins/gs-plugin-packagekit-origin.c
@@ -114,10 +114,8 @@ gs_plugin_packagekit_origin_ensure_sources (GsPlugin *plugin,
cancellable,
NULL, plugin,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
array = pk_results_get_repo_detail_array (results);
for (i = 0; i < array->len; i++) {
rd = g_ptr_array_index (array, i);
diff --git a/src/plugins/gs-plugin-packagekit-refine.c b/src/plugins/gs-plugin-packagekit-refine.c
index 11b67b0..e85916a 100644
--- a/src/plugins/gs-plugin-packagekit-refine.c
+++ b/src/plugins/gs-plugin-packagekit-refine.c
@@ -269,7 +269,6 @@ gs_plugin_packagekit_resolve_packages (GsPlugin *plugin,
const gchar *pkgname;
guint i;
ProgressData data;
- g_autoptr(PkError) error_code = NULL;
g_autoptr(PkResults) results = NULL;
g_autoptr(GPtrArray) package_ids = NULL;
g_autoptr(GPtrArray) packages = NULL;
@@ -296,22 +295,8 @@ gs_plugin_packagekit_resolve_packages (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
-
- /* check error code */
- error_code = pk_results_get_error_code (results);
- if (error_code != NULL) {
- g_set_error (error,
- GS_PLUGIN_ERROR,
- GS_PLUGIN_ERROR_FAILED,
- "failed to resolve: %s, %s",
- pk_error_enum_to_string (pk_error_get_code (error_code)),
- pk_error_get_details (error_code));
- return FALSE;
- }
/* get results */
packages = pk_results_get_package_array (results);
@@ -333,7 +318,6 @@ gs_plugin_packagekit_refine_from_desktop (GsPlugin *plugin,
{
const gchar *to_array[] = { NULL, NULL };
ProgressData data;
- g_autoptr(PkError) error_code = NULL;
g_autoptr(PkResults) results = NULL;
g_autoptr(GPtrArray) packages = NULL;
@@ -348,22 +332,8 @@ gs_plugin_packagekit_refine_from_desktop (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
- return FALSE;
- }
-
- /* check error code */
- error_code = pk_results_get_error_code (results);
- if (error_code != NULL) {
- g_set_error (error,
- GS_PLUGIN_ERROR,
- GS_PLUGIN_ERROR_FAILED,
- "failed to search files: %s, %s",
- pk_error_enum_to_string (pk_error_get_code (error_code)),
- pk_error_get_details (error_code));
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* get results */
packages = pk_results_get_package_array (results);
@@ -443,10 +413,8 @@ gs_plugin_packagekit_refine_updatedetails (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* set the update details for the update */
array = pk_results_get_update_detail_array (results);
@@ -583,10 +551,8 @@ gs_plugin_packagekit_refine_details (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* set the update details for the update */
array = pk_results_get_details_array (results);
@@ -625,10 +591,8 @@ gs_plugin_packagekit_refine_update_urgency (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* set the update severity for the app */
sack = pk_results_get_package_sack (results);
@@ -822,10 +786,8 @@ gs_plugin_packagekit_refine_distro_upgrade (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
if (!gs_plugin_packagekit_add_results (plugin, &list, results, error))
return FALSE;
diff --git a/src/plugins/gs-plugin-packagekit-refresh.c b/src/plugins/gs-plugin-packagekit-refresh.c
index f4ceb48..9b1e99e 100644
--- a/src/plugins/gs-plugin-packagekit-refresh.c
+++ b/src/plugins/gs-plugin-packagekit-refresh.c
@@ -239,10 +239,8 @@ gs_plugin_packagekit_refresh_guess_app_id (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
array = pk_results_get_files_array (results);
if (array->len == 0) {
g_set_error (error,
@@ -320,10 +318,8 @@ gs_plugin_filename_to_app (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* get results */
array = pk_results_get_details_array (results);
diff --git a/src/plugins/gs-plugin-packagekit.c b/src/plugins/gs-plugin-packagekit.c
index db2c0b1..3e5ca1c 100644
--- a/src/plugins/gs-plugin-packagekit.c
+++ b/src/plugins/gs-plugin-packagekit.c
@@ -152,10 +152,8 @@ gs_plugin_add_installed (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* add results */
return gs_plugin_packagekit_add_results (plugin, list, results, error);
@@ -170,7 +168,6 @@ gs_plugin_add_sources_related (GsPlugin *plugin,
GCancellable *cancellable,
GError **error)
{
- GList *installed = NULL;
GList *l;
GsApp *app;
GsApp *app_tmp;
@@ -178,6 +175,7 @@ gs_plugin_add_sources_related (GsPlugin *plugin,
ProgressData data;
const gchar *id;
gboolean ret = TRUE;
+ g_autoptr(GsAppList) installed = NULL;
g_autoptr(PkResults) results = NULL;
g_autoptr(AsProfileTask) ptask = NULL;
@@ -196,17 +194,14 @@ gs_plugin_add_sources_related (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
- ret = FALSE;
- goto out;
- }
+ if (!gs_plugin_packagekit_results_valid (results, error))
+ return FALSE;
ret = gs_plugin_packagekit_add_results (plugin,
&installed,
results,
error);
if (!ret)
- goto out;
+ return FALSE;
for (l = installed; l != NULL; l = l->next) {
g_auto(GStrv) split = NULL;
app = GS_APP (l->data);
@@ -221,9 +216,7 @@ gs_plugin_add_sources_related (GsPlugin *plugin,
}
}
}
-out:
- gs_plugin_list_free (installed);
- return ret;
+ return TRUE;
}
/**
@@ -258,10 +251,8 @@ gs_plugin_add_sources (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
array = pk_results_get_repo_detail_array (results);
for (i = 0; i < array->len; i++) {
@@ -313,10 +304,8 @@ gs_plugin_app_source_enable (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
return TRUE;
}
@@ -334,7 +323,6 @@ gs_plugin_app_install (GsPlugin *plugin,
ProgressData data;
const gchar *package_id;
guint i, j;
- g_autoptr(PkError) error_code = NULL;
g_autoptr(PkResults) results = NULL;
g_autoptr(GPtrArray) array_package_ids = NULL;
g_auto(GStrv) package_ids = NULL;
@@ -494,17 +482,6 @@ gs_plugin_app_install (GsPlugin *plugin,
/* no longer valid */
gs_app_clear_source_ids (app);
- /* check error code */
- error_code = pk_results_get_error_code (results);
- if (error_code != NULL) {
- g_set_error (error,
- GS_PLUGIN_ERROR,
- GS_PLUGIN_ERROR_FAILED,
- "failed to install package: %s, %s",
- pk_error_enum_to_string (pk_error_get_code (error_code)),
- pk_error_get_details (error_code));
- return FALSE;
- }
return TRUE;
}
@@ -532,10 +509,8 @@ gs_plugin_app_source_disable (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
return TRUE;
}
@@ -589,7 +564,6 @@ gs_plugin_app_remove (GsPlugin *plugin,
ProgressData data;
guint i;
guint cnt = 0;
- g_autoptr(PkError) error_code = NULL;
g_autoptr(PkResults) results = NULL;
g_auto(GStrv) package_ids = NULL;
@@ -639,8 +613,7 @@ gs_plugin_app_remove (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
gs_app_set_state_recover (app);
return FALSE;
}
@@ -651,17 +624,6 @@ gs_plugin_app_remove (GsPlugin *plugin,
/* no longer valid */
gs_app_clear_source_ids (app);
- /* check error code */
- error_code = pk_results_get_error_code (results);
- if (error_code != NULL) {
- g_set_error (error,
- GS_PLUGIN_ERROR,
- GS_PLUGIN_ERROR_FAILED,
- "failed to remove package: %s, %s",
- pk_error_enum_to_string (pk_error_get_code (error_code)),
- pk_error_get_details (error_code));
- return FALSE;
- }
return TRUE;
}
@@ -704,8 +666,7 @@ gs_plugin_app_upgrade_download (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error)) {
gs_app_set_state_recover (app);
return FALSE;
}
@@ -744,10 +705,8 @@ gs_plugin_add_search_files (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* add results */
return gs_plugin_packagekit_add_results (plugin, list, results, error);
@@ -782,10 +741,8 @@ gs_plugin_add_search_what_provides (GsPlugin *plugin,
cancellable,
gs_plugin_packagekit_progress_cb, &data,
error);
- if (results == NULL) {
- gs_plugin_packagekit_convert_gerror (error);
+ if (!gs_plugin_packagekit_results_valid (results, error))
return FALSE;
- }
/* add results */
return gs_plugin_packagekit_add_results (plugin, list, results, error);
diff --git a/src/plugins/packagekit-common.c b/src/plugins/packagekit-common.c
index c4722a4..f60b7db 100644
--- a/src/plugins/packagekit-common.c
+++ b/src/plugins/packagekit-common.c
@@ -157,6 +157,34 @@ gs_plugin_packagekit_convert_gerror (GError **error)
}
/**
+ * gs_plugin_packagekit_results_valid:
+ */
+gboolean
+gs_plugin_packagekit_results_valid (PkResults *results, GError **error)
+{
+ g_autoptr(PkError) error_code = NULL;
+
+ /* method failed? */
+ if (results == NULL) {
+ gs_plugin_packagekit_convert_gerror (error);
+ return FALSE;
+ }
+
+ /* check error code */
+ error_code = pk_results_get_error_code (results);
+ if (error_code != NULL) {
+ g_set_error_literal (error,
+ PK_CLIENT_ERROR,
+ pk_error_get_code (error_code),
+ pk_error_get_details (error_code));
+ return FALSE;
+ }
+
+ /* all good */
+ return TRUE;
+}
+
+/**
* gs_plugin_packagekit_add_results:
*/
gboolean
diff --git a/src/plugins/packagekit-common.h b/src/plugins/packagekit-common.h
index fda96ab..f8cbdd6 100644
--- a/src/plugins/packagekit-common.h
+++ b/src/plugins/packagekit-common.h
@@ -37,6 +37,8 @@ gboolean gs_plugin_packagekit_add_results (GsPlugin *plugin,
PkResults *results,
GError **error);
gboolean gs_plugin_packagekit_convert_gerror (GError **error);
+gboolean gs_plugin_packagekit_results_valid (PkResults *results,
+ GError **error);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]