[gnome-software/gnome-3-20] trivial: Check the PackageKit error more carefully



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]