Compare commits

..

12 commits

Author SHA1 Message Date
Kalev Lember
5da59d6a0c Add artwork for F31 upgrades 2019-09-18 12:42:52 +02:00
Kalev Lember
913b096912 Fix distro upgrade progress bar to actually work 2019-05-07 14:26:59 +02:00
Kalev Lember
e7fdb4825e Add artwork for F30 upgrades 2019-04-28 19:02:47 +02:00
Kalev Lember
e63a38c6ed Backport various fixes to error messages
... to avoid the dreaded "Unable to update '(null)'" error and add some
more context.
2019-02-25 14:51:27 +01:00
Kalev Lember
7fbfd18862 Update to 3.30.6 2018-12-18 02:46:40 +01:00
Kalev Lember
ca8a2031f3 Update to 3.30.5 2018-10-24 15:07:33 +02:00
Kalev Lember
603bf65c71 Update to 3.30.3 2018-10-18 15:41:28 +02:00
Kalev Lember
fb5d7b9b27 Update to 3.30.2 2018-10-05 17:06:26 +02:00
Kalev Lember
c96db32054 Add modular repos to official repos list 2018-09-26 16:34:46 +02:00
Kalev Lember
281507f461 Update to 3.30.1 2018-09-25 12:26:13 +02:00
Kalev Lember
9c4bc38864 Update to 3.30.0 2018-09-06 15:13:31 +02:00
Richard Hughes
ac80077fe7 Update to 3.29.92 2018-08-28 15:29:52 +01:00
12 changed files with 1586 additions and 7738 deletions

104
.gitignore vendored
View file

@ -1,2 +1,102 @@
/gnome-software-*.tar.xz
/gnome-software-*-build
/gnome-software-0.1.tar.xz
/gnome-software-3.9.1.tar.xz
/gnome-software-3.9.2.tar.xz
/gnome-software-3.9.3.tar.xz
/fedora-20.xml.gz
/fedora-20-icons.tar.gz
/gnome-software-3.10.0.tar.xz
/gnome-software-3.11.1.tar.xz
/fedora-20-codecs.xml
/web-apps.xml
/gnome-software-3.11.2.tar.xz
/gnome-software-3.11.3.tar.xz
/gnome-software-3.11.4.tar.xz
/fedora-rawhide-icons.tar.gz
/fedora-rawhide.xml.gz
/gnome-software-3.11.5.tar.xz
/gnome-software-3.11.90.tar.xz
/gnome-software-3.11.91.tar.xz
/gnome-software-3.11.92.tar.xz
/gnome-software-3.12.0.tar.xz
/gnome-software-3.12.1.tar.xz
/gnome-software-3.13.1.tar.xz
/fedora-21-icons.tar.gz
/fedora-21.xml.gz
/gnome-software-3.13.2.tar.xz
/gnome-software-3.13.3-7491627.tar.xz
/gnome-software-3.13.3.tar.xz
/gnome-software-3.13.4.tar.xz
/gnome-software-3.13.5-5c89189.tar.xz
/gnome-software-3.13.90.tar.xz
/gnome-software-3.13.91.tar.xz
/gnome-software-3.13.92.tar.xz
/gnome-software-3.14.0.tar.xz
/gnome-software-3.14.1.tar.xz
/gnome-software-3.14.2.tar.xz
/gnome-software-3.15.2.tar.xz
/gnome-software-3.15.4.tar.xz
/gnome-software-3.15.90.tar.xz
/gnome-software-3.15.91.tar.xz
/gnome-software-3.15.92.tar.xz
/gnome-software-3.16.0.tar.xz
/gnome-software-3.16.1.tar.xz
/gnome-software-3.16.2.tar.xz
/gnome-software-3.17.1.tar.xz
/gnome-software-3.17.2.tar.xz
/gnome-software-3.17.3.tar.xz
/gnome-software-3.17.90.tar.xz
/gnome-software-3.17.91.tar.xz
/gnome-software-3.17.92.tar.xz
/gnome-software-3.18.0.tar.xz
/gnome-software-3.18.1.tar.xz
/gnome-software-3.18.2.tar.xz
/gnome-software-3.18.3.tar.xz
/gnome-software-3.19.4.tar.xz
/gnome-software-3.19.90.tar.xz
/gnome-software-3.19.91.tar.xz
/gnome-software-3.19.92.tar.xz
/gnome-software-3.20.0.tar.xz
/gnome-software-3.20.1.tar.xz
/gnome-software-3.20.2.tar.xz
/gnome-software-3.21.1.tar.xz
/gnome-software-3.21.2.tar.xz
/gnome-software-3.21.4.tar.xz
/gnome-software-3.21.90.tar.xz
/gnome-software-3.21.91.tar.xz
/gnome-software-3.21.92.tar.xz
/gnome-software-3.22.0.tar.xz
/gnome-software-3.22.1.tar.xz
/gnome-software-3.22.2.tar.xz
/gnome-software-3.23.2.tar.xz
/gnome-software-3.23.3.tar.xz
/gnome-software-3.23.90.tar.xz
/gnome-software-3.23.91.tar.xz
/gnome-software-3.23.92.tar.xz
/gnome-software-3.24.0.tar.xz
/gnome-software-3.24.1.tar.xz
/gnome-software-3.24.2.tar.xz
/gnome-software-3.24.3.tar.xz
/gnome-software-3.25.3.tar.xz
/gnome-software-3.25.4.tar.xz
/gnome-software-3.25.90.tar.xz
/gnome-software-3.25.91.tar.xz
/gnome-software-3.26.0.tar.xz
/gnome-software-3.26.1.tar.xz
/gnome-software-3.26.2.tar.xz
/gnome-software-3.27.2.tar.xz
/gnome-software-3.27.3.tar.xz
/gnome-software-3.27.4.tar.xz
/gnome-software-3.27.90.tar.xz
/gnome-software-3.27.92.tar.xz
/gnome-software-3.28.0.tar.xz
/gnome-software-3.28.1.tar.xz
/gnome-software-3.29.1.tar.xz
/gnome-software-3.29.92.tar.xz
/gnome-software-3.30.0.tar.xz
/gnome-software-3.30.1.tar.xz
/gnome-software-3.30.2.tar.xz
/gnome-software-3.30.3.tar.xz
/gnome-software-3.30.5.tar.xz
/gnome-software-3.30.6.tar.xz
/f30.png
/f31.png

View file

@ -0,0 +1,145 @@
From f91c54a70860ed12270bbafa121acae36f29badb Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Tue, 18 Dec 2018 02:44:31 +0100
Subject: [PATCH] Lower AsStore new API version checks for Fedora
We have new the AsStore thread safety patches along with new thread safe
API backported to libappstream-glib-0.7.14-3.fc29.
---
plugins/core/gs-appstream.c | 12 ++++++------
plugins/core/gs-plugin-appstream.c | 12 ++++++------
plugins/flatpak/gs-flatpak.c | 2 +-
3 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/plugins/core/gs-appstream.c b/plugins/core/gs-appstream.c
index b7bccd19a..7b606fe0d 100644
--- a/plugins/core/gs-appstream.c
+++ b/plugins/core/gs-appstream.c
@@ -860,7 +860,7 @@ gs_appstream_store_search (GsPlugin *plugin,
gboolean ret = TRUE;
g_autoptr(GPtrArray) array = NULL;
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (store);
#else
array = g_ptr_array_ref (as_store_get_apps (store));
@@ -937,7 +937,7 @@ gs_appstream_store_add_category_apps (GsPlugin *plugin,
g_autoptr(GPtrArray) array = NULL;
/* just look at each app in turn */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (store);
#else
array = g_ptr_array_ref (as_store_get_apps (store));
@@ -985,7 +985,7 @@ gs_appstream_store_add_categories (GsPlugin *plugin,
g_autoptr(GPtrArray) array = NULL;
/* find out how many packages are in each category */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (store);
#else
array = g_ptr_array_ref (as_store_get_apps (store));
@@ -1013,7 +1013,7 @@ gs_appstream_add_popular (GsPlugin *plugin,
{
g_autoptr(GPtrArray) array = NULL;
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (store);
#else
array = g_ptr_array_ref (as_store_get_apps (store));
@@ -1059,7 +1059,7 @@ gs_appstream_add_recent (GsPlugin *plugin,
{
g_autoptr(GPtrArray) array = NULL;
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (store);
#else
array = g_ptr_array_ref (as_store_get_apps (store));
@@ -1088,7 +1088,7 @@ gs_appstream_add_featured (GsPlugin *plugin,
{
g_autoptr(GPtrArray) array = NULL;
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (store);
#else
array = g_ptr_array_ref (as_store_get_apps (store));
diff --git a/plugins/core/gs-plugin-appstream.c b/plugins/core/gs-plugin-appstream.c
index 77d004162..ce0ca9bda 100644
--- a/plugins/core/gs-plugin-appstream.c
+++ b/plugins/core/gs-plugin-appstream.c
@@ -56,7 +56,7 @@ gs_plugin_appstream_create_app_hash (AsStore *store)
hash = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, (GDestroyNotify) g_object_unref);
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
apps = as_store_dup_apps (store);
#else
apps = g_ptr_array_ref (as_store_get_apps (store));
@@ -290,7 +290,7 @@ gs_plugin_setup (GsPlugin *plugin, GCancellable *cancellable, GError **error)
return FALSE;
}
}
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
items = as_store_dup_apps (priv->store);
#else
items = g_ptr_array_ref (as_store_get_apps (priv->store));
@@ -391,7 +391,7 @@ gs_plugin_refine_from_id (GsPlugin *plugin,
g_autoptr(GPtrArray) apps_merge = NULL;
g_debug ("no app with ID %s found in system appstream", unique_id);
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
apps = as_store_dup_apps (priv->store);
#else
apps = g_ptr_array_ref (as_store_get_apps (priv->store));
@@ -405,7 +405,7 @@ gs_plugin_refine_from_id (GsPlugin *plugin,
}
/* fall back to trying to get a merge app */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
apps_merge = as_store_dup_apps_by_id_merge (priv->store, gs_app_get_id (app));
for (guint i = 0; i < apps_merge->len; i++) {
item = g_ptr_array_index (apps_merge, i);
@@ -472,7 +472,7 @@ gs_plugin_add_distro_upgrades (GsPlugin *plugin,
g_autoptr(GPtrArray) array = NULL;
/* find any upgrades */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (priv->store);
#else
array = g_ptr_array_ref (as_store_get_apps (priv->store));
@@ -620,7 +620,7 @@ gs_plugin_add_installed (GsPlugin *plugin,
g_autoptr(GPtrArray) array = NULL;
/* search categories for the search term */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
array = as_store_dup_apps (priv->store);
#else
array = g_ptr_array_ref (as_store_get_apps (priv->store));
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
index b835d843c..921fd12e9 100644
--- a/plugins/flatpak/gs-flatpak.c
+++ b/plugins/flatpak/gs-flatpak.c
@@ -328,7 +328,7 @@ gs_flatpak_add_apps_from_xremote (GsFlatpak *self,
}
/* override the *AppStream* origin */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
apps = as_store_dup_apps (store);
#else
apps = g_ptr_array_ref (as_store_get_apps (store));
--
2.19.1

View file

@ -0,0 +1,50 @@
From 96f516a4e01b00094919c6c365d804a109b5875f Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Wed, 24 Oct 2018 15:00:59 +0200
Subject: [PATCH] Lower as_utils_vercmp_full version check for Fedora
We have new as_utils_vercmp_full API backported to
libappstream-glib-0.7.14-2.fc29.
---
lib/gs-plugin-loader.c | 2 +-
src/gs-update-dialog.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
index 93e394906..b84a0ba65 100644
--- a/lib/gs-plugin-loader.c
+++ b/lib/gs-plugin-loader.c
@@ -1423,7 +1423,7 @@ gs_plugin_loader_app_sort_match_value_cb (GsApp *app1, GsApp *app2, gpointer use
static gint
gs_plugin_loader_app_sort_version_cb (GsApp *app1, GsApp *app2, gpointer user_data)
{
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
return as_utils_vercmp_full (gs_app_get_version (app1),
gs_app_get_version (app2),
AS_VERSION_COMPARE_FLAG_NONE);
diff --git a/src/gs-update-dialog.c b/src/gs-update-dialog.c
index b4c1b1187..e92cd5b87 100644
--- a/src/gs-update-dialog.c
+++ b/src/gs-update-dialog.c
@@ -374,7 +374,7 @@ is_downgrade (const gchar *evr1,
* part of the semantic version */
/* check version */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
rc = as_utils_vercmp_full (version1, version2,
AS_VERSION_COMPARE_FLAG_NONE);
#else
@@ -384,7 +384,7 @@ is_downgrade (const gchar *evr1,
return rc > 0;
/* check release */
-#if AS_CHECK_VERSION(0,7,15)
+#if AS_CHECK_VERSION(0,7,14)
rc = as_utils_vercmp_full (version1, version2,
AS_VERSION_COMPARE_FLAG_NONE);
#else
--
2.19.1

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,123 @@
From ece9a68becd6441d238f23acd2a1b156243fa7b6 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Tue, 7 May 2019 08:22:53 +0200
Subject: [PATCH] packagekit: Fix progress marshalling for upgrade_download and
refresh
The new GsPackageKitHelper class introduced in mega-commit 37103e6 only
handled progress marshalling when downloading a list of packages, but
not when the PK transaction is one big monolithic operation that only
has a single GsApp associated, such as when downloading all of the
distro upgrades, or when refreshing the cache.
This commit adds a way to explicitly add a GsApp to GsPackageKitHelper
to use for marshalling progress in these cases.
---
plugins/packagekit/gs-packagekit-helper.c | 13 ++++++++++++-
plugins/packagekit/gs-packagekit-helper.h | 3 +++
plugins/packagekit/gs-plugin-packagekit-refresh.c | 2 +-
plugins/packagekit/gs-plugin-packagekit-upgrade.c | 2 +-
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/plugins/packagekit/gs-packagekit-helper.c b/plugins/packagekit/gs-packagekit-helper.c
index a292e0068..39c026c3e 100644
--- a/plugins/packagekit/gs-packagekit-helper.c
+++ b/plugins/packagekit/gs-packagekit-helper.c
@@ -1,6 +1,7 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2019 Kalev Lember <klember@redhat.com>
*
* Licensed under the GNU General Public License Version 2
*
@@ -29,6 +30,7 @@
struct _GsPackagekitHelper {
GObject parent_instance;
GHashTable *apps;
+ GsApp *progress_app;
GsPlugin *plugin;
};
@@ -43,7 +45,9 @@ gs_packagekit_helper_cb (PkProgress *progress, PkProgressType type, gpointer use
GsApp *app = NULL;
/* optional */
- if (package_id != NULL)
+ if (self->progress_app != NULL)
+ app = self->progress_app;
+ else if (package_id != NULL)
app = gs_packagekit_helper_get_app_by_id (self, package_id);
if (type == PK_PROGRESS_TYPE_STATUS) {
@@ -79,6 +83,12 @@ gs_packagekit_helper_add_app (GsPackagekitHelper *self, GsApp *app)
}
}
+void
+gs_packagekit_helper_set_progress_app (GsPackagekitHelper *self, GsApp *progress_app)
+{
+ g_set_object (&self->progress_app, progress_app);
+}
+
GsPlugin *
gs_packagekit_helper_get_plugin (GsPackagekitHelper *self)
{
@@ -104,6 +114,7 @@ gs_packagekit_helper_finalize (GObject *object)
self = GS_PACKAGEKIT_HELPER (object);
g_object_unref (self->plugin);
+ g_clear_object (&self->progress_app);
g_hash_table_unref (self->apps);
G_OBJECT_CLASS (gs_packagekit_helper_parent_class)->finalize (object);
diff --git a/plugins/packagekit/gs-packagekit-helper.h b/plugins/packagekit/gs-packagekit-helper.h
index 3b5263c0a..b18b8229b 100644
--- a/plugins/packagekit/gs-packagekit-helper.h
+++ b/plugins/packagekit/gs-packagekit-helper.h
@@ -1,6 +1,7 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
* Copyright (C) 2016-2018 Richard Hughes <richard@hughsie.com>
+ * Copyright (C) 2019 Kalev Lember <klember@redhat.com>
*
* Licensed under the GNU General Public License Version 2
*
@@ -36,6 +37,8 @@ GsPackagekitHelper *gs_packagekit_helper_new (GsPlugin *plugin);
GsPlugin *gs_packagekit_helper_get_plugin (GsPackagekitHelper *self);
void gs_packagekit_helper_add_app (GsPackagekitHelper *self,
GsApp *app);
+void gs_packagekit_helper_set_progress_app (GsPackagekitHelper *self,
+ GsApp *progress_app);
GsApp *gs_packagekit_helper_get_app_by_id (GsPackagekitHelper *progress,
const gchar *package_id);
void gs_packagekit_helper_cb (PkProgress *progress,
diff --git a/plugins/packagekit/gs-plugin-packagekit-refresh.c b/plugins/packagekit/gs-plugin-packagekit-refresh.c
index ff893daaf..a8093de2c 100644
--- a/plugins/packagekit/gs-plugin-packagekit-refresh.c
+++ b/plugins/packagekit/gs-plugin-packagekit-refresh.c
@@ -156,7 +156,7 @@ gs_plugin_refresh (GsPlugin *plugin,
/* refresh the metadata */
gs_plugin_status_update (plugin, NULL, GS_PLUGIN_STATUS_WAITING);
- gs_packagekit_helper_add_app (helper, app_dl);
+ gs_packagekit_helper_set_progress_app (helper, app_dl);
results = pk_client_refresh_cache (PK_CLIENT (priv->task),
FALSE /* force */,
cancellable,
diff --git a/plugins/packagekit/gs-plugin-packagekit-upgrade.c b/plugins/packagekit/gs-plugin-packagekit-upgrade.c
index 63175bec3..38de93d55 100644
--- a/plugins/packagekit/gs-plugin-packagekit-upgrade.c
+++ b/plugins/packagekit/gs-plugin-packagekit-upgrade.c
@@ -77,7 +77,7 @@ gs_plugin_app_upgrade_download (GsPlugin *plugin,
/* ask PK to download enough packages to upgrade the system */
gs_app_set_state (app, AS_APP_STATE_INSTALLING);
- gs_packagekit_helper_add_app (helper, app);
+ gs_packagekit_helper_set_progress_app (helper, app);
results = pk_task_upgrade_system_sync (priv->task,
gs_app_get_version (app),
PK_UPGRADE_KIND_ENUM_COMPLETE,
--
2.21.0

View file

@ -1,686 +0,0 @@
From 0c79d9fb08a348a45a18f15427c945a63b44982e Mon Sep 17 00:00:00 2001
Date: Mon, 24 Nov 2025 16:06:51 +0100
Subject: [PATCH 1/3] flatpak: Fix XbSilo lifetime in
gs_flatpak_refine_wildcard()
The function uses pre-cached data in the hash tables, consisting of XbNode-s
from an XbSilo. The nodes are referenced, but the silos the node belongs to
is not referenced (by the XbNode).
This change keeps the XbSilo alive as long as it's needed for the nodes
in the pre-cached data. It also does not call gs_flatpak_ref_silo() multiple
times for the same GsFlatpak instance, which could invalidate the XbNode-s
in the pre-cached data when a change in the silo or in the installation
had been received while the function was still processing the apps.
Related downstream bug https://bugzilla.redhat.com/show_bug.cgi?id=2416542
Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/2900
---
plugins/flatpak/gs-flatpak.c | 18 ++++++++---
plugins/flatpak/gs-flatpak.h | 4 +++
plugins/flatpak/gs-plugin-flatpak.c | 49 ++++++++++++++++++++---------
3 files changed, 51 insertions(+), 20 deletions(-)
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
index b409475c7..a40ab54fb 100644
--- a/plugins/flatpak/gs-flatpak.c
+++ b/plugins/flatpak/gs-flatpak.c
@@ -3748,16 +3748,19 @@ gboolean
gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
GsAppList *list, GsPluginRefineRequireFlags require_flags,
gboolean interactive,
+ XbSilo **inout_silo,
+ gchar **inout_silo_filename,
+ GHashTable **inout_installed_by_desktopid,
GHashTable **inout_components_by_id,
GHashTable **inout_components_by_bundle,
GCancellable *cancellable, GError **error)
{
const gchar *id;
GPtrArray* components = NULL;
+ XbSilo *silo;
+ GHashTable *silo_installed_by_desktopid;
+ const gchar *silo_filename;
g_autoptr(GError) error_local = NULL;
- g_autoptr(XbSilo) silo = NULL;
- g_autoptr(GHashTable) silo_installed_by_desktopid = NULL;
- g_autofree gchar *silo_filename = NULL;
GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcard, "Flatpak (refine wildcard)", NULL);
@@ -3766,10 +3769,15 @@ gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
if (id == NULL)
return TRUE;
- silo = gs_flatpak_ref_silo (self, interactive, &silo_filename, &silo_installed_by_desktopid, cancellable, error);
- if (silo == NULL)
+ if (*inout_silo == NULL)
+ *inout_silo = gs_flatpak_ref_silo (self, interactive, inout_silo_filename, inout_installed_by_desktopid, cancellable, error);
+ if (*inout_silo == NULL)
return FALSE;
+ silo = *inout_silo;
+ silo_filename = *inout_silo_filename;
+ silo_installed_by_desktopid = *inout_installed_by_desktopid;
+
GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardQuerySilo, "Flatpak (query silo)", NULL);
if (*inout_components_by_id != NULL) {
diff --git a/plugins/flatpak/gs-flatpak.h b/plugins/flatpak/gs-flatpak.h
index 66ff59967..34e1416b5 100644
--- a/plugins/flatpak/gs-flatpak.h
+++ b/plugins/flatpak/gs-flatpak.h
@@ -11,6 +11,7 @@
#include <gnome-software.h>
#include <flatpak.h>
+#include <xmlb.h>
G_BEGIN_DECLS
@@ -108,6 +109,9 @@ gboolean gs_flatpak_refine_wildcard (GsFlatpak *self,
GsAppList *list,
GsPluginRefineRequireFlags require_flags,
gboolean interactive,
+ XbSilo **inout_silo,
+ gchar **inout_silo_filename,
+ GHashTable **inout_installed_by_desktopid,
GHashTable **inout_components_by_id,
GHashTable **inout_components_by_bundle,
GCancellable *cancellable,
diff --git a/plugins/flatpak/gs-plugin-flatpak.c b/plugins/flatpak/gs-plugin-flatpak.c
index 3d0503d46..f5d4a1d67 100644
--- a/plugins/flatpak/gs-plugin-flatpak.c
+++ b/plugins/flatpak/gs-plugin-flatpak.c
@@ -667,12 +667,29 @@ gs_plugin_flatpak_refine_app (GsPluginFlatpak *self,
return gs_flatpak_refine_app (flatpak, app, require_flags, interactive, FALSE, event_callback, event_user_data, cancellable, error);
}
+typedef struct {
+ XbSilo *silo;
+ gchar *silo_filename;
+ GHashTable *installed_by_desktopid;
+ GHashTable *components_by_id;
+ GHashTable *components_by_bundle;
+} RefineInstallationData;
+
static void
-unref_nonnull_hash_table (gpointer ptr)
+refine_installation_data_free (gpointer ptr)
{
- GHashTable *hash_table = ptr;
- if (hash_table != NULL)
- g_hash_table_unref (hash_table);
+ RefineInstallationData *data = ptr;
+
+ if (data == NULL)
+ return;
+
+ g_clear_pointer (&data->silo_filename, g_free);
+ g_clear_pointer (&data->installed_by_desktopid, g_hash_table_unref);
+ g_clear_pointer (&data->components_by_id, g_hash_table_unref);
+ g_clear_pointer (&data->components_by_bundle, g_hash_table_unref);
+ /* free the silo as the last, just in case, because the data from it is in the above hash tables */
+ g_clear_object (&data->silo);
+ g_free (data);
}
static gboolean
@@ -761,8 +778,7 @@ refine_thread_cb (GTask *task,
gboolean interactive = (data->job_flags & GS_PLUGIN_REFINE_FLAGS_INTERACTIVE) != 0;
GsPluginEventCallback event_callback = data->event_callback;
void *event_user_data = data->event_user_data;
- g_autoptr(GPtrArray) array_components_by_id = NULL; /* (element-type GHashTable) */
- g_autoptr(GPtrArray) array_components_by_bundle = NULL; /* (element-type GHashTable) */
+ g_autoptr(GPtrArray) installation_data = NULL; /* (element-type RefineInstallationData) */
g_autoptr(GsAppList) app_list = NULL;
g_autoptr(GError) local_error = NULL;
@@ -783,10 +799,9 @@ refine_thread_cb (GTask *task,
* (e.g. inserting an app in the list on every call results in
* an infinite loop) */
app_list = gs_app_list_copy (list);
- array_components_by_id = g_ptr_array_new_full (self->installations->len, unref_nonnull_hash_table);
- g_ptr_array_set_size (array_components_by_id, self->installations->len);
- array_components_by_bundle = g_ptr_array_new_full (self->installations->len, unref_nonnull_hash_table);
- g_ptr_array_set_size (array_components_by_bundle, self->installations->len);
+
+ installation_data = g_ptr_array_new_full (self->installations->len, refine_installation_data_free);
+ g_ptr_array_set_size (installation_data, self->installations->len);
for (guint j = 0; j < gs_app_list_length (app_list); j++) {
GsApp *app = gs_app_list_index (app_list, j);
@@ -796,16 +811,20 @@ refine_thread_cb (GTask *task,
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- GHashTable *components_by_id = array_components_by_id->pdata[i];
- GHashTable *components_by_bundle = array_components_by_bundle->pdata[i];
+ RefineInstallationData *inst_data = g_ptr_array_index (installation_data, i);
+
+ if (inst_data == NULL) {
+ inst_data = g_new0 (RefineInstallationData, 1);
+ installation_data->pdata[i] = inst_data;
+ }
- if (!gs_flatpak_refine_wildcard (flatpak, app, list, require_flags, interactive, &components_by_id, &components_by_bundle,
+ if (!gs_flatpak_refine_wildcard (flatpak, app, list, require_flags, interactive, &inst_data->silo,
+ &inst_data->silo_filename, &inst_data->installed_by_desktopid,
+ &inst_data->components_by_id, &inst_data->components_by_bundle,
cancellable, &local_error)) {
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
- array_components_by_id->pdata[i] = components_by_id;
- array_components_by_bundle->pdata[i] = components_by_bundle;
}
}
--
GitLab
From 546c6ee17b5959d2a696a6cb346a1f8b94aba303 Mon Sep 17 00:00:00 2001
Date: Wed, 7 Jan 2026 18:37:52 +0100
Subject: [PATCH 2/3] flatpak: Simplify wildcard app lookup function
By flipping the order of traversing app and installation the code
can be simplified to not have too many in/out arguments.
Suggested by Philip Withnall
---
plugins/flatpak/gs-flatpak.c | 251 ++++++++++++++--------------
plugins/flatpak/gs-flatpak.h | 9 +-
plugins/flatpak/gs-plugin-flatpak.c | 61 +------
3 files changed, 130 insertions(+), 191 deletions(-)
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
index a40ab54fb..782b0bb48 100644
--- a/plugins/flatpak/gs-flatpak.c
+++ b/plugins/flatpak/gs-flatpak.c
@@ -3745,167 +3745,158 @@ gs_flatpak_refine_app (GsFlatpak *self,
}
gboolean
-gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
- GsAppList *list, GsPluginRefineRequireFlags require_flags,
- gboolean interactive,
- XbSilo **inout_silo,
- gchar **inout_silo_filename,
- GHashTable **inout_installed_by_desktopid,
- GHashTable **inout_components_by_id,
- GHashTable **inout_components_by_bundle,
- GCancellable *cancellable, GError **error)
+gs_flatpak_refine_wildcards (GsFlatpak *self,
+ GPtrArray *wildcard_apps,
+ GsAppList *list,
+ GsPluginRefineRequireFlags require_flags,
+ gboolean interactive,
+ GCancellable *cancellable,
+ GError **error)
{
- const gchar *id;
- GPtrArray* components = NULL;
- XbSilo *silo;
- GHashTable *silo_installed_by_desktopid;
- const gchar *silo_filename;
g_autoptr(GError) error_local = NULL;
+ g_autoptr(XbSilo) silo = NULL;
+ g_autoptr(GHashTable) silo_installed_by_desktopid = NULL;
+ g_autoptr(GHashTable) components_by_id = NULL;
+ g_autoptr(GHashTable) components_by_bundle = NULL;
+ g_autoptr(GPtrArray) components_with_id = NULL;
+ g_autoptr(GPtrArray) bundles = NULL;
+ g_autofree gchar *silo_filename = NULL;
GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcard, "Flatpak (refine wildcard)", NULL);
- /* not enough info to find */
- id = gs_app_get_id (app);
- if (id == NULL)
- return TRUE;
-
- if (*inout_silo == NULL)
- *inout_silo = gs_flatpak_ref_silo (self, interactive, inout_silo_filename, inout_installed_by_desktopid, cancellable, error);
- if (*inout_silo == NULL)
+ silo = gs_flatpak_ref_silo (self, interactive, &silo_filename, &silo_installed_by_desktopid, cancellable, error);
+ if (silo == NULL)
return FALSE;
- silo = *inout_silo;
- silo_filename = *inout_silo_filename;
- silo_installed_by_desktopid = *inout_installed_by_desktopid;
-
GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardQuerySilo, "Flatpak (query silo)", NULL);
- if (*inout_components_by_id != NULL) {
- components = g_hash_table_lookup (*inout_components_by_id, gs_app_get_id (app));
- } else {
- g_autoptr(GPtrArray) components_with_id = NULL;
- *inout_components_by_id = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_ptr_array_unref);
- components_with_id = xb_silo_query (silo, "components/component/id", 0, &error_local);
- if (components_with_id == NULL) {
- if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
- return TRUE;
- g_propagate_error (error, g_steal_pointer (&error_local));
- return FALSE;
+ components_by_id = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_ptr_array_unref);
+ components_with_id = xb_silo_query (silo, "components/component/id", 0, &error_local);
+ if (components_with_id == NULL) {
+ if (g_error_matches (error_local, G_IO_ERROR, G_IO_ERROR_NOT_FOUND))
+ return TRUE;
+ g_propagate_error (error, g_steal_pointer (&error_local));
+ return FALSE;
+ }
+
+ for (guint i = 0; i < components_with_id->len; i++) {
+ XbNode *node = g_ptr_array_index (components_with_id, i);
+ XbNode *comp_node = xb_node_get_parent (node);
+ const gchar *comp_id = xb_node_get_text (node);
+ GPtrArray *comps = g_hash_table_lookup (components_by_id, comp_id);
+ if (comps == NULL) {
+ comps = g_ptr_array_new_with_free_func (g_object_unref);
+ g_hash_table_insert (components_by_id, g_strdup (comp_id), comps);
}
- for (guint i = 0; i < components_with_id->len; i++) {
- XbNode *node = g_ptr_array_index (components_with_id, i);
- XbNode *comp_node = xb_node_get_parent (node);
- const gchar *comp_id = xb_node_get_text (node);
- GPtrArray *comps = g_hash_table_lookup (*inout_components_by_id, comp_id);
- if (comps == NULL) {
- comps = g_ptr_array_new_with_free_func (g_object_unref);
- g_hash_table_insert (*inout_components_by_id, g_strdup (comp_id), comps);
+ g_ptr_array_add (comps, comp_node);
+ }
+
+ components_by_bundle = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
+ bundles = xb_silo_query (silo, "/components/component/bundle[@type='flatpak']", 0, NULL);
+ for (guint b = 0; bundles != NULL && b < bundles->len; b++) {
+ XbNode *bundle_node = g_ptr_array_index (bundles, b);
+ g_autoptr(XbNode) component_node = xb_node_get_parent (bundle_node);
+ g_autoptr(XbNode) components_node = xb_node_get_parent (component_node);
+ const gchar *origin = xb_node_get_attr (components_node, "origin");
+ if (origin != NULL) {
+ const gchar *bundle = xb_node_get_text (bundle_node);
+ if (bundle != NULL) {
+ g_autofree gchar *key = g_strconcat (origin, "\n", bundle, NULL);
+ g_hash_table_insert (components_by_bundle, g_steal_pointer (&key), g_steal_pointer (&component_node));
}
- g_ptr_array_add (comps, comp_node);
- if (components == NULL && g_strcmp0 (id, comp_id) == 0)
- components = comps;
}
}
GS_PROFILER_END_SCOPED (FlatpakRefineWildcardQuerySilo);
- if (components == NULL)
- return TRUE;
-
gs_flatpak_ensure_remote_title (self, interactive, cancellable);
- if (*inout_components_by_bundle == NULL) {
- g_autoptr(GPtrArray) bundles = NULL;
-
- *inout_components_by_bundle = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
- bundles = xb_silo_query (silo, "/components/component/bundle[@type='flatpak']", 0, NULL);
- for (guint b = 0; bundles != NULL && b < bundles->len; b++) {
- XbNode *bundle_node = g_ptr_array_index (bundles, b);
- g_autoptr(XbNode) component_node = xb_node_get_parent (bundle_node);
- g_autoptr(XbNode) components_node = xb_node_get_parent (component_node);
- const gchar *origin = xb_node_get_attr (components_node, "origin");
- if (origin != NULL) {
- const gchar *bundle = xb_node_get_text (bundle_node);
- if (bundle != NULL) {
- g_autofree gchar *key = g_strconcat (origin, "\n", bundle, NULL);
- g_hash_table_insert (*inout_components_by_bundle, g_steal_pointer (&key), g_steal_pointer (&component_node));
- }
- }
- }
- }
+ for (guint j = 0; j < wildcard_apps->len; j++) {
+ GsApp *app = g_ptr_array_index (wildcard_apps, j);
+ GPtrArray *components = NULL;
+ const gchar *id;
+ /* not enough info to find */
+ id = gs_app_get_id (app);
+ if (id == NULL)
+ continue;
- GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardGenerateApps, "Flatpak (create app)", NULL);
- for (guint i = 0; i < components->len; i++) {
- XbNode *component = g_ptr_array_index (components, i);
- g_autoptr(GsApp) new = NULL;
+ components = g_hash_table_lookup (components_by_id, id);
+ if (components == NULL)
+ continue;
- GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardCreateAppstreamApp, "Flatpak (create Appstream app)", NULL);
- new = gs_appstream_create_app (self->plugin, silo, component, silo_filename ? silo_filename : "",
- self->scope, error);
- GS_PROFILER_END_SCOPED (FlatpakRefineWildcardCreateAppstreamApp);
+ GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardGenerateApps, "Flatpak (create app)", NULL);
+ for (guint i = 0; i < components->len; i++) {
+ XbNode *component = g_ptr_array_index (components, i);
+ g_autoptr(GsApp) new = NULL;
- if (new == NULL)
- return FALSE;
+ GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardCreateAppstreamApp, "Flatpak (create Appstream app)", NULL);
+ new = gs_appstream_create_app (self->plugin, silo, component, silo_filename ? silo_filename : "",
+ self->scope, error);
+ GS_PROFILER_END_SCOPED (FlatpakRefineWildcardCreateAppstreamApp);
- gs_flatpak_claim_app (self, new);
-
- /* The appstream plugin did not find the component in the plugin's cache,
- thus read the required info from the 'bundle' element. */
- if (gs_flatpak_app_get_ref_name (new) == NULL ||
- gs_flatpak_app_get_ref_arch (new) == NULL) {
- const gchar *xref_str = NULL;
- g_autoptr(XbNode) child = NULL;
- g_autoptr(XbNode) next = NULL;
- for (child = xb_node_get_child (component); child != NULL && xref_str == NULL;
- g_object_unref (child), child = g_steal_pointer (&next)) {
- next = xb_node_get_next (child);
- if (g_strcmp0 (xb_node_get_element (child), "bundle") == 0 &&
- g_strcmp0 (xb_node_get_attr (child, "type"), "flatpak") == 0) {
- xref_str = xb_node_get_text (child);
- break;
+ if (new == NULL)
+ return FALSE;
+
+ gs_flatpak_claim_app (self, new);
+
+ /* The appstream plugin did not find the component in the plugin's cache,
+ thus read the required info from the 'bundle' element. */
+ if (gs_flatpak_app_get_ref_name (new) == NULL ||
+ gs_flatpak_app_get_ref_arch (new) == NULL) {
+ const gchar *xref_str = NULL;
+ g_autoptr(XbNode) child = NULL;
+ g_autoptr(XbNode) next = NULL;
+ for (child = xb_node_get_child (component); child != NULL && xref_str == NULL;
+ g_object_unref (child), child = g_steal_pointer (&next)) {
+ next = xb_node_get_next (child);
+ if (g_strcmp0 (xb_node_get_element (child), "bundle") == 0 &&
+ g_strcmp0 (xb_node_get_attr (child, "type"), "flatpak") == 0) {
+ xref_str = xb_node_get_text (child);
+ break;
+ }
}
- }
- if (xref_str != NULL) {
- g_auto(GStrv) split = NULL;
-
- /* get the kind/name/arch/branch */
- split = g_strsplit (xref_str, "/", -1);
- if (g_strv_length (split) == 4) {
- const gchar *comp_type = xb_node_get_attr (component, "type");
- AsComponentKind kind = as_component_kind_from_string (comp_type);
- if (kind != AS_COMPONENT_KIND_UNKNOWN)
- gs_app_set_kind (new, kind);
- else if (g_ascii_strcasecmp (split[0], "app") == 0)
- gs_app_set_kind (new, AS_COMPONENT_KIND_DESKTOP_APP);
- else if (g_ascii_strcasecmp (split[0], "runtime") == 0)
- gs_flatpak_set_runtime_kind_from_id (new);
- gs_flatpak_app_set_ref_name (new, split[1]);
- gs_flatpak_app_set_ref_arch (new, split[2]);
- gs_app_set_branch (new, split[3]);
- gs_app_set_metadata (new, "GnomeSoftware::packagename-value", xref_str);
+ if (xref_str != NULL) {
+ g_auto(GStrv) split = NULL;
+
+ /* get the kind/name/arch/branch */
+ split = g_strsplit (xref_str, "/", -1);
+ if (g_strv_length (split) == 4) {
+ const gchar *comp_type = xb_node_get_attr (component, "type");
+ AsComponentKind kind = as_component_kind_from_string (comp_type);
+ if (kind != AS_COMPONENT_KIND_UNKNOWN)
+ gs_app_set_kind (new, kind);
+ else if (g_ascii_strcasecmp (split[0], "app") == 0)
+ gs_app_set_kind (new, AS_COMPONENT_KIND_DESKTOP_APP);
+ else if (g_ascii_strcasecmp (split[0], "runtime") == 0)
+ gs_flatpak_set_runtime_kind_from_id (new);
+ gs_flatpak_app_set_ref_name (new, split[1]);
+ gs_flatpak_app_set_ref_arch (new, split[2]);
+ gs_app_set_branch (new, split[3]);
+ gs_app_set_metadata (new, "GnomeSoftware::packagename-value", xref_str);
+ }
}
}
- }
- if (gs_flatpak_app_get_ref_name (new) == NULL ||
- gs_flatpak_app_get_ref_arch (new) == NULL) {
- g_debug ("Failed to get ref info for '%s' from wildcard '%s', skipping it...", gs_app_get_id (new), id);
- } else {
- GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardRefineNewApp, "Flatpak (refine new app)", NULL);
- if (!gs_flatpak_refine_app_internal (self, new, require_flags, interactive, FALSE, *inout_components_by_bundle,
- silo, silo_filename, silo_installed_by_desktopid, cancellable, error))
- return FALSE;
- GS_PROFILER_END_SCOPED (FlatpakRefineWildcardRefineNewApp);
+ if (gs_flatpak_app_get_ref_name (new) == NULL ||
+ gs_flatpak_app_get_ref_arch (new) == NULL) {
+ g_debug ("Failed to get ref info for '%s' from wildcard '%s', skipping it...", gs_app_get_id (new), id);
+ } else {
+ GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardRefineNewApp, "Flatpak (refine new app)", NULL);
+ if (!gs_flatpak_refine_app_internal (self, new, require_flags, interactive, FALSE, components_by_bundle,
+ silo, silo_filename, silo_installed_by_desktopid, cancellable, error))
+ return FALSE;
+ GS_PROFILER_END_SCOPED (FlatpakRefineWildcardRefineNewApp);
- GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardSubsumeMetadata, "Flatpak (subsume metadata)", NULL);
- gs_app_subsume_metadata (new, app);
- GS_PROFILER_END_SCOPED (FlatpakRefineWildcardSubsumeMetadata);
+ GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcardSubsumeMetadata, "Flatpak (subsume metadata)", NULL);
+ gs_app_subsume_metadata (new, app);
+ GS_PROFILER_END_SCOPED (FlatpakRefineWildcardSubsumeMetadata);
- gs_app_list_add (list, new);
+ gs_app_list_add (list, new);
+ }
}
+ GS_PROFILER_END_SCOPED (FlatpakRefineWildcardGenerateApps);
}
- GS_PROFILER_END_SCOPED (FlatpakRefineWildcardGenerateApps);
GS_PROFILER_END_SCOPED (FlatpakRefineWildcard);
diff --git a/plugins/flatpak/gs-flatpak.h b/plugins/flatpak/gs-flatpak.h
index 34e1416b5..1f7d35a8f 100644
--- a/plugins/flatpak/gs-flatpak.h
+++ b/plugins/flatpak/gs-flatpak.h
@@ -104,16 +104,11 @@ gboolean gs_flatpak_refine_app_state (GsFlatpak *self,
void *event_user_data,
GCancellable *cancellable,
GError **error);
-gboolean gs_flatpak_refine_wildcard (GsFlatpak *self,
- GsApp *app,
+gboolean gs_flatpak_refine_wildcards (GsFlatpak *self,
+ GPtrArray *wildcard_apps,
GsAppList *list,
GsPluginRefineRequireFlags require_flags,
gboolean interactive,
- XbSilo **inout_silo,
- gchar **inout_silo_filename,
- GHashTable **inout_installed_by_desktopid,
- GHashTable **inout_components_by_id,
- GHashTable **inout_components_by_bundle,
GCancellable *cancellable,
GError **error);
gboolean gs_flatpak_launch (GsFlatpak *self,
diff --git a/plugins/flatpak/gs-plugin-flatpak.c b/plugins/flatpak/gs-plugin-flatpak.c
index f5d4a1d67..c06b1fb5f 100644
--- a/plugins/flatpak/gs-plugin-flatpak.c
+++ b/plugins/flatpak/gs-plugin-flatpak.c
@@ -667,31 +667,6 @@ gs_plugin_flatpak_refine_app (GsPluginFlatpak *self,
return gs_flatpak_refine_app (flatpak, app, require_flags, interactive, FALSE, event_callback, event_user_data, cancellable, error);
}
-typedef struct {
- XbSilo *silo;
- gchar *silo_filename;
- GHashTable *installed_by_desktopid;
- GHashTable *components_by_id;
- GHashTable *components_by_bundle;
-} RefineInstallationData;
-
-static void
-refine_installation_data_free (gpointer ptr)
-{
- RefineInstallationData *data = ptr;
-
- if (data == NULL)
- return;
-
- g_clear_pointer (&data->silo_filename, g_free);
- g_clear_pointer (&data->installed_by_desktopid, g_hash_table_unref);
- g_clear_pointer (&data->components_by_id, g_hash_table_unref);
- g_clear_pointer (&data->components_by_bundle, g_hash_table_unref);
- /* free the silo as the last, just in case, because the data from it is in the above hash tables */
- g_clear_object (&data->silo);
- g_free (data);
-}
-
static gboolean
refine_app (GsPluginFlatpak *self,
GsApp *app,
@@ -778,8 +753,7 @@ refine_thread_cb (GTask *task,
gboolean interactive = (data->job_flags & GS_PLUGIN_REFINE_FLAGS_INTERACTIVE) != 0;
GsPluginEventCallback event_callback = data->event_callback;
void *event_user_data = data->event_user_data;
- g_autoptr(GPtrArray) installation_data = NULL; /* (element-type RefineInstallationData) */
- g_autoptr(GsAppList) app_list = NULL;
+ g_autoptr(GPtrArray) wildcard_apps = g_ptr_array_new_with_free_func (g_object_unref); /* (element-type GsApp) (owned) */
g_autoptr(GError) local_error = NULL;
assert_in_worker (self);
@@ -790,38 +764,17 @@ refine_thread_cb (GTask *task,
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
- }
-
- /* Refine wildcards.
- *
- * Use a copy of the list for the loop because a function called
- * on the plugin may affect the list which can lead to problems
- * (e.g. inserting an app in the list on every call results in
- * an infinite loop) */
- app_list = gs_app_list_copy (list);
-
- installation_data = g_ptr_array_new_full (self->installations->len, refine_installation_data_free);
- g_ptr_array_set_size (installation_data, self->installations->len);
-
- for (guint j = 0; j < gs_app_list_length (app_list); j++) {
- GsApp *app = gs_app_list_index (app_list, j);
- if (!gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD))
- continue;
+ if (gs_app_has_quirk (app, GS_APP_QUIRK_IS_WILDCARD) && gs_app_get_id (app) != NULL)
+ g_ptr_array_add (wildcard_apps, g_object_ref (app));
+ }
+ /* Refine wildcards. */
+ if (wildcard_apps->len > 0) {
for (guint i = 0; i < self->installations->len; i++) {
GsFlatpak *flatpak = g_ptr_array_index (self->installations, i);
- RefineInstallationData *inst_data = g_ptr_array_index (installation_data, i);
-
- if (inst_data == NULL) {
- inst_data = g_new0 (RefineInstallationData, 1);
- installation_data->pdata[i] = inst_data;
- }
- if (!gs_flatpak_refine_wildcard (flatpak, app, list, require_flags, interactive, &inst_data->silo,
- &inst_data->silo_filename, &inst_data->installed_by_desktopid,
- &inst_data->components_by_id, &inst_data->components_by_bundle,
- cancellable, &local_error)) {
+ if (!gs_flatpak_refine_wildcards (flatpak, wildcard_apps, list, require_flags, interactive, cancellable, &local_error)) {
g_task_return_error (task, g_steal_pointer (&local_error));
return;
}
--
GitLab
From 8472d717356a801e6c0171156738ea48480fa695 Mon Sep 17 00:00:00 2001
Date: Wed, 7 Jan 2026 18:45:47 +0100
Subject: [PATCH 3/3] flatpak: Hold silo lock when refining wildcard apps
The refine can take a long time, thus hold the silo lock to not have
it invalidated from another thread. Object reference is not enough
for the XbSilo, it breaks as soon as the underlying file changes.
---
plugins/flatpak/gs-flatpak.c | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
diff --git a/plugins/flatpak/gs-flatpak.c b/plugins/flatpak/gs-flatpak.c
index 782b0bb48..c5437125d 100644
--- a/plugins/flatpak/gs-flatpak.c
+++ b/plugins/flatpak/gs-flatpak.c
@@ -59,7 +59,7 @@ struct _GsFlatpak {
AsComponentScope scope;
GsPlugin *plugin;
XbSilo *silo;
- GMutex silo_lock;
+ GRecMutex silo_lock;
gchar *silo_filename;
GHashTable *silo_installed_by_desktopid;
gint silo_change_stamp;
@@ -1187,11 +1187,11 @@ gs_flatpak_ref_silo (GsFlatpak *self,
g_autoptr(GFile) file = NULL;
g_autoptr(GPtrArray) xremotes = NULL;
g_autoptr(GPtrArray) desktop_paths = NULL;
- g_autoptr(GMutexLocker) locker = NULL;
+ g_autoptr(GRecMutexLocker) locker = NULL;
g_autoptr(XbBuilder) builder = NULL;
g_autoptr(GMainContext) old_thread_default = NULL;
- locker = g_mutex_locker_new (&self->silo_lock);
+ locker = g_rec_mutex_locker_new (&self->silo_lock);
/* everything is okay */
if (self->silo != NULL && xb_silo_is_valid (self->silo) &&
g_atomic_int_get (&self->silo_change_stamp_current) == g_atomic_int_get (&self->silo_change_stamp)) {
@@ -3754,6 +3754,7 @@ gs_flatpak_refine_wildcards (GsFlatpak *self,
GError **error)
{
g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRecMutexLocker) silo_locker = NULL;
g_autoptr(XbSilo) silo = NULL;
g_autoptr(GHashTable) silo_installed_by_desktopid = NULL;
g_autoptr(GHashTable) components_by_id = NULL;
@@ -3764,6 +3765,11 @@ gs_flatpak_refine_wildcards (GsFlatpak *self,
GS_PROFILER_BEGIN_SCOPED (FlatpakRefineWildcard, "Flatpak (refine wildcard)", NULL);
+ /* the refine can take a long time, thus hold the silo lock to not have
+ it invalidated from another thread; object reference is not enough
+ for the XbSilo, it breaks as soon as the underlying file changes */
+ silo_locker = g_rec_mutex_locker_new (&self->silo_lock);
+
silo = gs_flatpak_ref_silo (self, interactive, &silo_filename, &silo_installed_by_desktopid, cancellable, error);
if (silo == NULL)
return FALSE;
@@ -4810,7 +4816,7 @@ gs_flatpak_finalize (GObject *object)
g_object_unref (self->plugin);
g_hash_table_unref (self->broken_remotes);
g_mutex_clear (&self->broken_remotes_mutex);
- g_mutex_clear (&self->silo_lock);
+ g_rec_mutex_clear (&self->silo_lock);
g_hash_table_unref (self->app_silos);
g_mutex_clear (&self->app_silos_mutex);
g_clear_pointer (&self->remote_title, g_hash_table_unref);
@@ -4831,7 +4837,7 @@ gs_flatpak_init (GsFlatpak *self)
{
/* XbSilo needs external locking as we destroy the silo and build a new
* one when something changes */
- g_mutex_init (&self->silo_lock);
+ g_rec_mutex_init (&self->silo_lock);
g_mutex_init (&self->installed_refs_mutex);
self->installed_refs = NULL;
--
GitLab

View file

@ -1 +0,0 @@
checkout-gs-dnf5

View file

@ -1,35 +0,0 @@
#!/bin/bash
if [ ! -d checkout-gs-dnf5 ]; then
git clone --branch main https://gitlab.gnome.org/mcrha/gnome-software.git checkout-gs-dnf5 && \
cd checkout-gs-dnf5 && \
git checkout -b wip/dnf5daemon origin/wip/dnf5daemon && \
cd - >/dev/null
if [ "$?" != "0" ]; then
echo "Failed to clone dnf5-plugin repository" 1>&2
exit 1;
fi
fi
PATCH_PATH=../0001-dnf5-plugin.patch
cd checkout-gs-dnf5 && \
echo "Updating gs-dnf5 git 'main' repository" && \
git checkout main && \
git pull --rebase && \
echo "Updating gs-dnf5 git 'dnf5-pugin' repository" && \
git checkout wip/dnf5daemon && \
git pull --rebase && \
echo -n "at " >../${PATCH_PATH} && \
git log HEAD | head -n 5 | grep -E "commit|Date" >>../${PATCH_PATH} && \
echo "" >>../${PATCH_PATH} && \
git diff main >>../${PATCH_PATH} && \
cd - >/dev/null
if [ "$?" = "0" ]; then
echo "Patch '${PATCH_PATH}' updated"
else
echo "Failed to update patch '${PATCH_PATH}'" 1>&2
exit 1
fi

View file

@ -0,0 +1,473 @@
From 0a1e76d866379ce6115aacd2cdee75db15bebab0 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Tue, 15 Jan 2019 23:48:33 +0100
Subject: [PATCH 1/3] shell: Improve the error message when whole update
operation fails
In case the whole updates operation fails and we don't have the data
which app failed, show 'Unable to install updates' error instead of
'Unable to update "(null)"'.
Fixes: https://gitlab.gnome.org/GNOME/gnome-software/issues/480
---
src/gs-shell.c | 120 +++++++++++++++++++++++++++++++++++--------------
1 file changed, 87 insertions(+), 33 deletions(-)
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 6f1cda816..7c2f86d81 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -1355,23 +1355,34 @@ gs_shell_show_event_update (GsShell *shell, GsPluginEvent *event)
g_autofree gchar *str_origin = NULL;
g_autoptr(GString) str = g_string_new (NULL);
- str_app = gs_shell_get_title_from_app (app);
switch (error->code) {
case GS_PLUGIN_ERROR_DOWNLOAD_FAILED:
- if (origin != NULL) {
+ if (app != NULL && origin != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
str_origin = gs_shell_get_title_from_origin (origin);
/* TRANSLATORS: failure text for the in-app notification,
* where the first %s is the app name (e.g. "GIMP") and
* the second %s is the origin, e.g. "Fedora" or
* "Fedora Project [fedoraproject.org]" */
- g_string_append_printf (str, _("Unable to update %s from %s"),
+ g_string_append_printf (str, _("Unable to update %s from %s as download failed"),
str_app, str_origin);
buttons = TRUE;
- } else {
+ } else if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
/* TRANSLATORS: failure text for the in-app notification,
* where the %s is the application name (e.g. "GIMP") */
g_string_append_printf (str, _("Unable to update %s as download failed"),
str_app);
+ } else if (origin != NULL) {
+ str_origin = gs_shell_get_title_from_origin (origin);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the origin, e.g. "Fedora" or
+ * "Fedora Project [fedoraproject.org]" */
+ g_string_append_printf (str, _("Unable to install updates from %s as download failed"),
+ str_origin);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates as download failed"));
}
break;
case GS_PLUGIN_ERROR_NO_NETWORK:
@@ -1382,49 +1393,92 @@ gs_shell_show_event_update (GsShell *shell, GsPluginEvent *event)
buttons |= GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS;
break;
case GS_PLUGIN_ERROR_NO_SPACE:
- /* TRANSLATORS: failure text for the in-app notification,
- * where the %s is the application name (e.g. "GIMP") */
- g_string_append_printf (str, _("Unable to update %s: "
- "not enough disk space"),
- str_app);
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "not enough disk space"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "not enough disk space"));
+ }
buttons |= GS_SHELL_EVENT_BUTTON_NO_SPACE;
break;
case GS_PLUGIN_ERROR_AUTH_REQUIRED:
case GS_PLUGIN_ERROR_PIN_REQUIRED:
- /* TRANSLATORS: failure text for the in-app notification,
- * where the %s is the application name (e.g. "GIMP") */
- g_string_append_printf (str, _("Unable to update %s: "
- "authentication was required"),
- str_app);
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "authentication was required"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "authentication was required"));
+ }
break;
case GS_PLUGIN_ERROR_AUTH_INVALID:
- /* TRANSLATORS: failure text for the in-app notification,
- * where the %s is the application name (e.g. "GIMP") */
- g_string_append_printf (str, _("Unable to update %s: "
- "authentication was invalid"),
- str_app);
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "authentication was invalid"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "authentication was invalid"));
+ }
break;
case GS_PLUGIN_ERROR_NO_SECURITY:
- /* TRANSLATORS: failure text for the in-app notification,
- * where the %s is the application name (e.g. "GIMP") */
- g_string_append_printf (str, _("Unable to update %s: "
- "you do not have permission to "
- "update software"),
- str_app);
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "you do not have permission to "
+ "update software"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "you do not have permission to "
+ "update software"));
+ }
break;
case GS_PLUGIN_ERROR_AC_POWER_REQUIRED:
- /* TRANSLATORS: failure text for the in-app notification,
- * where the %s is the application name (e.g. "Dell XPS 13") */
- g_string_append_printf (str, _("Unable to update %s: "
- "AC power is required"),
- str_app);
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to update %s: "
+ "AC power is required"),
+ str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "Dell XPS 13") */
+ g_string_append_printf (str, _("Unable to install updates: "
+ "AC power is required"));
+ }
break;
case GS_PLUGIN_ERROR_CANCELLED:
break;
default:
- /* TRANSLATORS: failure text for the in-app notification,
- * where the %s is the application name (e.g. "GIMP") */
- g_string_append_printf (str, _("Unable to update %s"), str_app);
+ if (app != NULL) {
+ str_app = gs_shell_get_title_from_app (app);
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the application name (e.g. "GIMP") */
+ g_string_append_printf (str, _("Unable to update %s"), str_app);
+ } else {
+ /* TRANSLATORS: failure text for the in-app notification */
+ g_string_append_printf (str, _("Unable to install updates"));
+ }
break;
}
if (str->len == 0)
--
2.21.0
From af764483533ac1afc42a5c0f1c6b76c43be1d24d Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Tue, 15 Jan 2019 23:49:50 +0100
Subject: [PATCH 2/3] shell: Add details for a system upgrade error
Make the "internet access was required" error look the same as the rest
of the system upgrade errors, showing which distro version we were
trying to upgrade to.
---
src/gs-shell.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 7c2f86d81..7c97740fa 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -1534,10 +1534,12 @@ gs_shell_show_event_upgrade (GsShell *shell, GsPluginEvent *event)
}
break;
case GS_PLUGIN_ERROR_NO_NETWORK:
- /* TRANSLATORS: failure text for the in-app notification */
- g_string_append (str, _("Unable to upgrade: "
- "internet access was required but "
- "wasnt available"));
+ /* TRANSLATORS: failure text for the in-app notification,
+ * where the %s is the distro name (e.g. "Fedora 25") */
+ g_string_append_printf (str, _("Unable to upgrade to %s: "
+ "internet access was required but "
+ "wasnt available"),
+ str_app);
buttons |= GS_SHELL_EVENT_BUTTON_NETWORK_SETTINGS;
break;
case GS_PLUGIN_ERROR_NO_SPACE:
--
2.21.0
From 0d3c47f69e7f6452412a0a3e6704106eefc0c658 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Tue, 15 Jan 2019 23:55:22 +0100
Subject: [PATCH 3/3] shell: Improve the logic when to show detailed error
messages
Make sure we never have "Sorry, something went wrong" without actual
details what went wrong.
---
src/gs-shell.c | 64 +++++++++++---------------------------------------
1 file changed, 14 insertions(+), 50 deletions(-)
diff --git a/src/gs-shell.c b/src/gs-shell.c
index 7c97740fa..3eea95028 100644
--- a/src/gs-shell.c
+++ b/src/gs-shell.c
@@ -990,16 +990,6 @@ gs_shell_get_title_from_app (GsApp *app)
return g_strdup_printf (_("“%s”"), gs_app_get_id (app));
}
-static gboolean
-gs_shell_show_detailed_error (GsShell *shell, const GError *error)
-{
- if (error->code == GS_PLUGIN_ERROR_FAILED)
- return TRUE;
- if (error->code == GS_PLUGIN_ERROR_DOWNLOAD_FAILED)
- return TRUE;
- return FALSE;
-}
-
static gchar *
get_first_line (const gchar *str)
{
@@ -1055,6 +1045,7 @@ gs_shell_show_event_refresh (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification */
g_string_append (str, _("Unable to download updates"));
}
+ gs_shell_append_detailed_error (shell, str, error);
break;
case GS_PLUGIN_ERROR_NO_NETWORK:
/* TRANSLATORS: failure text for the in-app notification */
@@ -1106,6 +1097,7 @@ gs_shell_show_event_refresh (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification */
g_string_append (str, _("Unable to get list of updates"));
}
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
@@ -1121,10 +1113,6 @@ gs_shell_show_event_refresh (GsShell *shell, GsPluginEvent *event)
}
}
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1173,15 +1161,12 @@ gs_shell_show_event_purchase (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification,
* where the %s is the application name (e.g. "GIMP") */
g_string_append_printf (str, _("Unable to purchase %s"), str_app);
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
return FALSE;
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, GS_SHELL_EVENT_BUTTON_NONE);
return TRUE;
@@ -1218,6 +1203,7 @@ gs_shell_show_event_install (GsShell *shell, GsPluginEvent *event)
"as download failed"),
str_app);
}
+ gs_shell_append_detailed_error (shell, str, error);
break;
case GS_PLUGIN_ERROR_NOT_SUPPORTED:
if (origin != NULL) {
@@ -1319,6 +1305,7 @@ gs_shell_show_event_install (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification,
* where the %s is the application name (e.g. "GIMP") */
g_string_append_printf (str, _("Unable to install %s"), str_app);
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
@@ -1334,10 +1321,6 @@ gs_shell_show_event_install (GsShell *shell, GsPluginEvent *event)
}
}
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1384,6 +1367,7 @@ gs_shell_show_event_update (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification */
g_string_append_printf (str, _("Unable to install updates as download failed"));
}
+ gs_shell_append_detailed_error (shell, str, error);
break;
case GS_PLUGIN_ERROR_NO_NETWORK:
/* TRANSLATORS: failure text for the in-app notification */
@@ -1479,6 +1463,7 @@ gs_shell_show_event_update (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification */
g_string_append_printf (str, _("Unable to install updates"));
}
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
@@ -1494,10 +1479,6 @@ gs_shell_show_event_update (GsShell *shell, GsPluginEvent *event)
}
}
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1532,6 +1513,7 @@ gs_shell_show_event_upgrade (GsShell *shell, GsPluginEvent *event)
"as download failed"),
str_app);
}
+ gs_shell_append_detailed_error (shell, str, error);
break;
case GS_PLUGIN_ERROR_NO_NETWORK:
/* TRANSLATORS: failure text for the in-app notification,
@@ -1585,6 +1567,7 @@ gs_shell_show_event_upgrade (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification,
* where the %s is the distro name (e.g. "Fedora 25") */
g_string_append_printf (str, _("Unable to upgrade to %s"), str_app);
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
@@ -1600,10 +1583,6 @@ gs_shell_show_event_upgrade (GsShell *shell, GsPluginEvent *event)
}
}
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1658,6 +1637,7 @@ gs_shell_show_event_remove (GsShell *shell, GsPluginEvent *event)
/* TRANSLATORS: failure text for the in-app notification,
* where the %s is the application name (e.g. "GIMP") */
g_string_append_printf (str, _("Unable to remove %s"), str_app);
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
@@ -1673,10 +1653,6 @@ gs_shell_show_event_remove (GsShell *shell, GsPluginEvent *event)
}
}
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1722,6 +1698,7 @@ gs_shell_show_event_launch (GsShell *shell, GsPluginEvent *event)
return FALSE;
/* TRANSLATORS: we failed to get a proper error code */
g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
@@ -1737,10 +1714,6 @@ gs_shell_show_event_launch (GsShell *shell, GsPluginEvent *event)
}
}
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1776,15 +1749,12 @@ gs_shell_show_event_file_to_app (GsShell *shell, GsPluginEvent *event)
return FALSE;
/* TRANSLATORS: we failed to get a proper error code */
g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
return FALSE;
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1820,15 +1790,12 @@ gs_shell_show_event_url_to_app (GsShell *shell, GsPluginEvent *event)
return FALSE;
/* TRANSLATORS: we failed to get a proper error code */
g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
return FALSE;
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- g_string_append_printf (str, "\n%s", error->message);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
@@ -1890,6 +1857,7 @@ gs_shell_show_event_fallback (GsShell *shell, GsPluginEvent *event)
return FALSE;
/* TRANSLATORS: we failed to get a proper error code */
g_string_append (str, _("Sorry, something went wrong"));
+ gs_shell_append_detailed_error (shell, str, error);
break;
}
if (str->len == 0)
@@ -1905,10 +1873,6 @@ gs_shell_show_event_fallback (GsShell *shell, GsPluginEvent *event)
}
}
- /* add extra debugging for debug builds */
- if (gs_shell_show_detailed_error (shell, error))
- gs_shell_append_detailed_error (shell, str, error);
-
/* show in-app notification */
gs_shell_show_event_app_notify (shell, str->str, buttons);
return TRUE;
--
2.21.0

File diff suppressed because it is too large Load diff

View file

@ -1,7 +0,0 @@
---
runpath:
allowed_paths:
- /usr/lib/gnome-software
- /usr/lib/rpm-ostree
- /usr/lib64/gnome-software
- /usr/lib64/rpm-ostree

View file

@ -1 +1,3 @@
SHA512 (gnome-software-49.3.tar.xz) = 0414ea55ad3b83bcd50514985e3d2026207801c040934805bb26d162e88f0619a9d70aa6ba324a29acfab02573490b928c83594b54f57ec2a8ad00e6c127f657
SHA512 (gnome-software-3.30.6.tar.xz) = dd98e9e61469fc5566ab569f09bdc06ccb5812a236e305185b911c70364e2983f257e939aed0bb61778163084fb5628d63ff6bd5f056d4a7626a2e771ad6426a
SHA512 (f30.png) = 0e90083bda910c13ca9c08b8cde09ffdc8cf9176d84406539235ed3da71ca8bdf5342bf0dfbbd74f6052dffc8c8035e03c6f7ed4d578fa0e84af43e6993df32f
SHA512 (f31.png) = 69e6c8291d93640d4d6f5d71c3a9e08f65a90c19c38b6036423c236063e68be03b68c2668aae6d8b0a03c7a24bf8ae8e108dfb2a9cd85b7bb232751b3e05bb0f