Compare commits

..

24 commits

Author SHA1 Message Date
Adam Williamson
bf0a4b6273 Backport MR#116 to fix bug with generic updates (#1638563) 2018-10-11 19:35:06 -07:00
Kalev Lember
525e6b3c00 Backport fixes for N+2 distro upgrades
https://bugzilla.redhat.com/show_bug.cgi?id=1628497
2018-10-08 13:22:35 +02:00
Kalev Lember
cd5d018c41 Add artwork for F29 Beta upgrades 2018-09-06 18:10:16 +02:00
Kalev Lember
6af7d40ead Update to 3.28.2 2018-05-09 11:29:39 +02:00
Kalev Lember
e52a24f162 Sync F28 upgrade background image with final F28 artwork
Update f28.png from f28-backgrounds-base-28.1.3-1.fc28
2018-04-18 16:32:12 +02:00
Kalev Lember
2491fb7e1b Update to 3.28.1 2018-04-10 00:18:38 +02:00
Kalev Lember
84e4965cfd Fix opening results from gnome-shell search provider 2018-03-16 15:40:58 +01:00
Kalev Lember
f1c225fb8a Fix crash on initial run with no network
https://bugzilla.redhat.com/show_bug.cgi?id=1554986
2018-03-16 15:40:57 +01:00
Kalev Lember
912f073597 Backport an upstream patch to fix shell extensions app ID 2018-03-16 15:40:56 +01:00
Kalev Lember
e140f3b903 Move org.gnome.Software.Featured.xml from -editor to main package
These are needed for featured apps to show up. Otherwise we just fall
back to showing GNOME Builder and nothing else.
2018-03-16 15:40:40 +01:00
Neal Gompa
e4250e1ac5 Drop obsolete snapd-login-service requirement for snap plugin subpackage 2018-03-16 15:39:58 +01:00
Kalev Lember
16c4e7a7c9 Update to 3.28.0 2018-03-16 15:38:07 +01:00
Kalev Lember
2899a37895 Ship a background image for F28 beta upgrades 2018-03-02 14:22:25 +01:00
Kalev Lember
3855d3bfa5 Update to 3.26.7 2018-03-02 14:09:15 +01:00
Kalev Lember
6f67a26d3d Add fedora-workstation-repositories to nonfree-sources schema defaults
This sets up gnome-software to offer installing the
fedora-workstation-repositories package in the Software Sources dialog,
as per the guidance given by Fedora Council:

https://pagure.io/Fedora-Council/tickets/issue/121
2018-02-08 14:10:36 +01:00
Kalev Lember
81ba583271 Update to 3.26.6 2018-02-08 13:59:40 +01:00
Kalev Lember
3ab284ac8b Drop unused --without packagekit option
We do packagekit/rpm-ostree detection at runtime, not at compile time.
2018-01-08 21:53:14 +01:00
Kalev Lember
ce55212e71 Update to 3.26.5 2018-01-08 21:52:52 +01:00
Kalev Lember
b20ae8b775 Update to 3.26.4 2017-12-17 10:08:27 +01:00
Kalev Lember
27e8cc775f Explicitly disable ubuntuone support 2017-11-21 12:15:04 +01:00
Kalev Lember
d83f8c6acb Update to 3.26.3 2017-11-21 12:15:00 +01:00
Kalev Lember
8835513012 Update to 3.26.2 2017-11-09 16:33:40 +01:00
Kalev Lember
39a5130100 Fix "too many results returned" error after distro upgrades
It turns out we had an error path that caused gnome-software to error
out when the offline update results file listed more than 500 packages,
which is an easy limit to cross for distro upgrades.

This backports an upstream patch that fixes this.

https://bugzilla.redhat.com/show_bug.cgi?id=1496489
2017-10-25 14:24:10 +02:00
Kalev Lember
8310adfd60 Backport a flatpakref installation fix 2017-10-10 12:46:52 +02:00
11 changed files with 903 additions and 7745 deletions

97
.gitignore vendored
View file

@ -1,2 +1,95 @@
/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.26.3.tar.xz
/gnome-software-3.26.4.tar.xz
/gnome-software-3.26.5.tar.xz
/gnome-software-3.26.6.tar.xz
/gnome-software-3.26.7.tar.xz
/f28.png
/gnome-software-3.28.0.tar.xz
/gnome-software-3.28.1.tar.xz
/gnome-software-3.28.2.tar.xz
/f29.png

View file

@ -0,0 +1,55 @@
From 7afc2c4e3f4ffac704b28098eae3136313d791d3 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Mon, 8 Oct 2018 11:02:50 +0200
Subject: [PATCH 1/2] Include the distro version in Fedora distro upgrade app
IDs
If we use just "org.fedoraproject.Fedora", GsAppList deduplicates based
on the app ID and only keeps on of the returned apps.
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1628497
---
.../gs-plugin-fedora-pkgdb-collections.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c b/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c
index fc644ad47..5b8137e3d 100644
--- a/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c
+++ b/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c
@@ -1,6 +1,6 @@
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
*
- * Copyright (C) 2016-2017 Kalev Lember <klember@redhat.com>
+ * Copyright (C) 2016-2018 Kalev Lember <klember@redhat.com>
* Copyright (C) 2017 Richard Hughes <richard@hughsie.com>
*
* Licensed under the GNU General Public License Version 2
@@ -280,6 +280,7 @@ static GsApp *
_create_upgrade_from_info (GsPlugin *plugin, PkgdbItem *item)
{
GsApp *app;
+ g_autofree gchar *app_id = NULL;
g_autofree gchar *app_version = NULL;
g_autofree gchar *background = NULL;
g_autofree gchar *cache_key = NULL;
@@ -293,7 +294,7 @@ _create_upgrade_from_info (GsPlugin *plugin, PkgdbItem *item)
if (app != NULL)
return app;
- /* create app */
+ app_id = g_strdup_printf ("org.fedoraproject.Fedora-%u", item->version);
app_version = g_strdup_printf ("%u", item->version);
/* icon from disk */
@@ -302,7 +303,7 @@ _create_upgrade_from_info (GsPlugin *plugin, PkgdbItem *item)
as_icon_set_filename (ic, "/usr/share/pixmaps/fedora-logo-sprite.png");
/* create */
- app = gs_app_new ("org.fedoraproject.Fedora");
+ app = gs_app_new (app_id);
gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
gs_app_set_kind (app, AS_APP_KIND_OS_UPGRADE);
gs_app_set_name (app, GS_APP_QUALITY_LOWEST, item->name);
--
2.19.1

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,76 @@
From be925f12287faee9d4c65635a3e69d18617b0213 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Mon, 8 Oct 2018 11:34:15 +0200
Subject: [PATCH 2/2] Sort distro upgrades in the plugin loader
... so that we can rely on the order in UI code.
---
lib/gs-plugin-loader.c | 13 +++++++++++++
src/gs-update-monitor.c | 5 +++--
src/gs-updates-page.c | 3 ++-
3 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
index 2fb02e3c6..033438a88 100644
--- a/lib/gs-plugin-loader.c
+++ b/lib/gs-plugin-loader.c
@@ -1484,6 +1484,13 @@ gs_plugin_loader_app_sort_match_value_cb (GsApp *app1, GsApp *app2, gpointer use
return 0;
}
+static gint
+gs_plugin_loader_app_sort_version_cb (GsApp *app1, GsApp *app2, gpointer user_data)
+{
+ return as_utils_vercmp (gs_app_get_version (app1),
+ gs_app_get_version (app2));
+}
+
/******************************************************************************/
static gboolean
@@ -3673,6 +3680,12 @@ gs_plugin_loader_job_process_async (GsPluginLoader *plugin_loader,
gs_plugin_loader_app_sort_name_cb);
}
break;
+ case GS_PLUGIN_ACTION_GET_DISTRO_UPDATES:
+ if (gs_plugin_job_get_sort_func (plugin_job) == NULL) {
+ gs_plugin_job_set_sort_func (plugin_job,
+ gs_plugin_loader_app_sort_version_cb);
+ }
+ break;
default:
break;
}
diff --git a/src/gs-update-monitor.c b/src/gs-update-monitor.c
index 3441b161f..2f39ae0bd 100644
--- a/src/gs-update-monitor.c
+++ b/src/gs-update-monitor.c
@@ -308,8 +308,9 @@ get_upgrades_finished_cb (GObject *object,
g_settings_set (monitor->settings, "upgrade-notification-timestamp", "x",
g_date_time_to_unix (now));
- /* just get the first result : FIXME, do we sort these by date? */
- app = gs_app_list_index (apps, 0);
+ /* rely on the app list already being sorted with the
+ * chronologically newest release last */
+ app = gs_app_list_index (apps, gs_app_list_length (apps) - 1);
/* TRANSLATORS: this is a distro upgrade, the replacement would be the
* distro name, e.g. 'Fedora' */
diff --git a/src/gs-updates-page.c b/src/gs-updates-page.c
index cd9db05d4..e84293e03 100644
--- a/src/gs-updates-page.c
+++ b/src/gs-updates-page.c
@@ -1084,7 +1084,8 @@ gs_updates_page_get_upgrades_cb (GObject *source_object,
gs_updates_page_clear_flag (self, GS_UPDATES_PAGE_FLAG_HAS_UPGRADES);
gtk_widget_set_visible (self->upgrade_banner, FALSE);
} else {
- /* rely on the app list already being sorted */
+ /* rely on the app list already being sorted with the
+ * chronologically newest release last */
GsApp *app = gs_app_list_index (list, gs_app_list_length (list) - 1);
g_debug ("got upgrade %s", gs_app_get_id (app));
gs_upgrade_banner_set_app (GS_UPGRADE_BANNER (self->upgrade_banner), app);
--
2.19.1

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

38
116.patch Normal file
View file

@ -0,0 +1,38 @@
From 086f4b4bf3ce478a9a1cb009f56a7c08d1aa6e57 Mon Sep 17 00:00:00 2001
From: Adam Williamson <awilliam@redhat.com>
Date: Thu, 11 Oct 2018 19:12:01 -0700
Subject: [PATCH] Ensure generic-updates plugin runs after packagekit-refine
9eab01082b07acd525b8a390ab6b43136cf400a5 made generic-updates
check the 'scope' and 'kind' for a package update before adding
it to the generic 'OS Updates' "app" which is used to display
updates for packages that aren't appdata-ified. The 'scope' and
'kind' for package updates are set by packagekit-refine...but
that change did not ensure that generic-updates runs *after*
packagekit-refine. This can result in gnome-software failing to
'see' these generic updates on a first update scan, and only
picking them up on a retry. To fix this, we should ensure that
packagekit-refine runs before generic-updates.
https://bugzilla.redhat.com/show_bug.cgi?id=1638563
Signed-off-by: Adam Williamson <awilliam@redhat.com>
---
plugins/core/gs-plugin-generic-updates.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/plugins/core/gs-plugin-generic-updates.c b/plugins/core/gs-plugin-generic-updates.c
index d8e2db39..ef79c65b 100644
--- a/plugins/core/gs-plugin-generic-updates.c
+++ b/plugins/core/gs-plugin-generic-updates.c
@@ -28,6 +28,7 @@ void
gs_plugin_initialize (GsPlugin *plugin)
{
gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "appstream");
+ gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "packagekit-refine");
}
static gboolean
--
2.18.1

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

@ -1,132 +1,87 @@
%global appstream_version 0.16.4
%global flatpak_version 1.14.1
%global fwupd_version 1.6.2
%global glib2_version 2.76.0
%global gtk4_version 4.16.0
%global json_glib_version 1.6.0
%global libadwaita_version 1.6.0
%global libxmlb_version 0.3.4
%global packagekit_version 1.2.5
%global dnf5_version 5.2.16
# Disable WebApps for RHEL builds
%bcond webapps %[!0%{?rhel}]
# Disable parental control for RHEL builds
%bcond malcontent %[!0%{?rhel}]
# Disable rpm-ostree support for RHEL builds
%bcond rpmostree %[!0%{?rhel}]
# Disable DKMS/akmods support for RHEL builds
%bcond dkms %[!0%{?rhel}]
%bcond packagekit 0
%bcond dnf5 1
# this is not a library version
%define gs_plugin_version 23
%global tarball_version %%(echo %{version} | tr '~' '.')
%global __provides_exclude_from ^%{_libdir}/%{name}/plugins-%{gs_plugin_version}/.*\\.so.*$
%global glib2_version 2.46.0
%global gtk3_version 3.22.4
%global json_glib_version 1.2.0
%global packagekit_version 1.1.1
%global appstream_glib_version 0.7.8
%global libsoup_version 2.52.0
%global gsettings_desktop_schemas_version 3.12.0
%global gnome_desktop_version 3.18.0
%global fwupd_version 1.0.7
%global flatpak_version 0.9.4
Name: gnome-software
Version: 49.3
Release: 1%{?dist}
Version: 3.28.2
Release: 4%{?dist}
Summary: A software center for GNOME
License: GPL-2.0-or-later
URL: https://apps.gnome.org/Software
Source0: https://download.gnome.org/sources/gnome-software/49/%{name}-%{tarball_version}.tar.xz
License: GPLv2+
URL: https://wiki.gnome.org/Apps/Software
Source0: https://download.gnome.org/sources/gnome-software/3.28/%{name}-%{version}.tar.xz
# /usr/share/backgrounds/f28/default/standard/f28.png from f28-backgrounds-base
Source1: f28.png
# /usr/share/backgrounds/f29/default/wide/f29.png from f29-backgrounds-base
Source2: f29.png
%if %{with dnf5}
# to update the patch enter the ./dnf5-plugin/ directory and run from
# it the ./update-patch.sh script
Patch: 0001-dnf5-plugin.patch
%endif
# https://bugzilla.redhat.com/show_bug.cgi?id=2416542
Patch: 0002-rhbug2416542-crash-under-gs_flatpak_refine_wildcard.patch
# ostree and flatpak not on i686 for Fedora and RHEL 10
# https://github.com/containers/composefs/pull/229#issuecomment-1838735764
%if 0%{?fedora} || 0%{?rhel} >= 10
ExcludeArch: %{ix86}
%endif
Patch0: 0001-Include-the-distro-version-in-Fedora-distro-upgrade-.patch
Patch1: 0002-Sort-distro-upgrades-in-the-plugin-loader.patch
# Fixes an ordering issue which often causes the first scan for updates
# to miss 'generic' ones
# https://gitlab.gnome.org/GNOME/gnome-software/merge_requests/116
# https://bugzilla.redhat.com/show_bug.cgi?id=1638563
Patch2: 116.patch
BuildRequires: gettext
BuildRequires: libxslt
BuildRequires: docbook-style-xsl
BuildRequires: desktop-file-utils
BuildRequires: gcc
BuildRequires: gettext
BuildRequires: git-core
BuildRequires: fwupd-devel >= %{fwupd_version}
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: gnome-desktop3-devel
BuildRequires: gsettings-desktop-schemas-devel >= %{gsettings_desktop_schemas_version}
BuildRequires: gspell-devel
BuildRequires: gtk3-devel >= %{gtk3_version}
BuildRequires: gtk-doc
BuildRequires: itstool
BuildRequires: libxslt
BuildRequires: json-glib-devel >= %{json_glib_version}
BuildRequires: libappstream-glib-devel >= %{appstream_glib_version}
BuildRequires: libsoup-devel
BuildRequires: meson
BuildRequires: pkgconfig(appstream) >= %{appstream_version}
BuildRequires: pkgconfig(flatpak) >= %{flatpak_version}
BuildRequires: pkgconfig(fwupd) >= %{fwupd_version}
BuildRequires: pkgconfig(gdk-pixbuf-2.0)
BuildRequires: pkgconfig(gio-unix-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(glib-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(gmodule-2.0) >= %{glib2_version}
BuildRequires: pkgconfig(gsettings-desktop-schemas)
BuildRequires: pkgconfig(gtk4) >= %{gtk4_version}
BuildRequires: pkgconfig(gudev-1.0)
BuildRequires: pkgconfig(json-glib-1.0) >= %{json_glib_version}
BuildRequires: pkgconfig(libadwaita-1) >= %{libadwaita_version}
BuildRequires: pkgconfig(libdnf)
BuildRequires: pkgconfig(libsoup-3.0)
%if %{with malcontent}
BuildRequires: pkgconfig(malcontent-0)
%endif
BuildRequires: pkgconfig(ostree-1)
%if %{with packagekit}
BuildRequires: pkgconfig(packagekit-glib2) >= %{packagekit_version}
%endif
BuildRequires: pkgconfig(polkit-gobject-1)
BuildRequires: pkgconfig(rpm)
%if %{with rpmostree}
BuildRequires: pkgconfig(rpm-ostree-1)
%endif
BuildRequires: pkgconfig(sysprof-capture-4)
BuildRequires: pkgconfig(xmlb) >= %{libxmlb_version}
BuildRequires: systemd
BuildRequires: PackageKit-glib-devel >= %{packagekit_version}
BuildRequires: polkit-devel
BuildRequires: libsecret-devel
BuildRequires: flatpak-devel >= %{flatpak_version}
BuildRequires: ostree-devel
BuildRequires: libgudev1-devel
BuildRequires: valgrind-devel
BuildRequires: liboauth-devel
BuildRequires: snapd-glib-devel
%if 0%{?fedora} == 27
Requires: appstream-data >= 27-9
%else
Requires: appstream-data
Requires: appstream%{?_isa} >= %{appstream_version}
%if %{with webapps}
Requires: epiphany-runtime%{?_isa}
%endif
%if %{with dnf5}
Requires: dnf5daemon-server%{?_isa} >= %{dnf5_version}
Requires: dnf5daemon-server-polkit
Requires: libdnf5-plugin-appstream%{?_isa}
Requires: rpm-plugin-dbus-announce%{?_isa}
%if 0%{?fedora}
Requires: epiphany-runtime
%endif
Requires: flatpak%{?_isa} >= %{flatpak_version}
Requires: flatpak-libs%{?_isa} >= %{flatpak_version}
Requires: fwupd%{?_isa} >= %{fwupd_version}
Requires: glib2%{?_isa} >= %{glib2_version}
%if !0%{?rhel}
Requires: gnome-app-list
%endif
Requires: gnome-desktop3%{?_isa} >= %{gnome_desktop_version}
# gnome-menus is needed for app folder .directory entries
Requires: gnome-menus%{?_isa}
Requires: gsettings-desktop-schemas%{?_isa}
Requires: gtk4 >= %{gtk4_version}
Requires: gsettings-desktop-schemas%{?_isa} >= %{gsettings_desktop_schemas_version}
Requires: gtk3%{?_isa} >= %{gtk3_version}
Requires: json-glib%{?_isa} >= %{json_glib_version}
Requires: iso-codes
Requires: libadwaita >= %{libadwaita_version}
Requires: libappstream-glib%{?_isa} >= %{appstream_glib_version}
# librsvg2 is needed for gdk-pixbuf svg loader
Requires: librsvg2%{?_isa}
Requires: libxmlb%{?_isa} >= %{libxmlb_version}
Requires: libsoup%{?_isa} >= %{libsoup_version}
Requires: PackageKit%{?_isa} >= %{packagekit_version}
%if %{with packagekit}
Recommends: PackageKit%{?_isa} >= %{packagekit_version}
%endif
Recommends: %{name}-fedora-langpacks
Obsoletes: gnome-software-snap < 3.33.1
Obsoletes: gnome-software-editor < 3.35.1
# this is not a library version
%define gs_plugin_version 11
%description
gnome-software is an application that makes it easy to add, remove
@ -140,79 +95,39 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
These development files are for building gnome-software plugins outside
the source tree. Most users do not need this subpackage installed.
%package fedora-langpacks
Summary: Contains fedora-langpacks plugin
%package editor
Summary: Banner designer for GNOME Software
Requires: %{name}%{?_isa} = %{version}-%{release}
%description fedora-langpacks
The fedora-langpacks plugin ensures langpacks packages are installed
for the current locale.
%description editor
Editor for designing banners for GNOME Software.
%if %{with rpmostree}
%package rpm-ostree
Summary: rpm-ostree backend for gnome-software
%package snap
Summary: Support for Ubuntu Snap packages
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: rpm-ostree%{?_isa}
Supplements: (gnome-software%{?_isa} and rpm-ostree%{?_isa})
Supplements: (gnome-software%{?_isa} and snapd%{?_isa})
%description rpm-ostree
gnome-software is an application that makes it easy to add, remove
and update software in the GNOME desktop.
This package includes the rpm-ostree backend.
%endif
%description snap
Adds support for Snap packages from the Snap store.
%prep
%autosetup -p1 -S gendiff -n %{name}-%{tarball_version}
%autosetup -p1
%build
%meson \
-Dsnap=false \
%if %{with malcontent}
-Dmalcontent=true \
%else
-Dmalcontent=false \
%endif
-Dgudev=true \
%if %{with packagekit}
-Dpackagekit=true \
-Dpackagekit_autoremove=true \
%else
-Dpackagekit=false \
%endif
%if %{with dnf5}
-Ddnf5=true \
%endif
-Dexternal_appstream=false \
%if %{with rpmostree}
-Drpm_ostree=true \
%else
-Drpm_ostree=false \
%endif
%if %{with webapps}
-Dwebapps=true \
-Dhardcoded_foss_webapps=true \
-Dhardcoded_proprietary_webapps=false \
%else
-Dwebapps=false \
-Dhardcoded_foss_webapps=false \
-Dhardcoded_proprietary_webapps=false \
%endif
%if %{with dkms}
-Ddkms=true \
%else
-Ddkms=false \
%endif
-Dtests=false
-Denable-snap=true \
-Denable-gudev=true \
-Denable-packagekit=true \
-Denable-external-appstream=false \
-Denable-rpm-ostree=false \
-Denable-tests=false \
-Denable-ubuntuone=false \
-Denable-ubuntu-reviews=false
%meson_build
%install
%meson_install
# remove unneeded dpkg and dummy plugins
rm %{buildroot}%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_dpkg.so
rm %{buildroot}%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_dummy.so
# make the software center load faster
desktop-file-edit %{buildroot}%{_datadir}/applications/org.gnome.Software.desktop \
--set-key=X-AppInstall-Package --set-value=%{name}
@ -220,113 +135,591 @@ desktop-file-edit %{buildroot}%{_datadir}/applications/org.gnome.Software.deskto
# set up for Fedora
cat >> %{buildroot}%{_datadir}/glib-2.0/schemas/org.gnome.software-fedora.gschema.override << FOE
[org.gnome.software]
%if 0%{?rhel}
official-repos = [ 'rhel-%{?rhel}' ]
%else
official-repos = [ 'anaconda', 'fedora', 'fedora-debuginfo', 'fedora-source', 'koji-override-0', 'koji-override-1', 'rawhide', 'rawhide-debuginfo', 'rawhide-source', 'updates', 'updates-debuginfo', 'updates-source', 'updates-testing', 'updates-testing-debuginfo', 'updates-testing-source', 'fedora-modular', 'fedora-modular-debuginfo', 'fedora-modular-source', 'rawhide-modular', 'rawhide-modular-debuginfo', 'rawhide-modular-source', 'fedora-cisco-openh264', 'fedora-cisco-openh264-debuginfo' ]
required-repos = [ 'fedora', 'updates' ]
packaging-format-preference = [ 'flatpak:fedora-testing', 'flatpak:fedora', 'rpm' ]
%endif
official-repos = [ 'fedora', 'fedora-debuginfo', 'fedora-source', 'koji-override-0', 'koji-override-1', 'rawhide', 'rawhide-debuginfo', 'rawhide-source', 'updates', 'updates-debuginfo', 'updates-source', 'updates-testing', 'updates-testing-debuginfo', 'updates-testing-source' ]
FOE
# Install upgrade background image
mkdir -p %{buildroot}%{_datadir}/gnome-software/backgrounds
cp -a %{SOURCE1} %{buildroot}%{_datadir}/gnome-software/backgrounds/
cp -a %{SOURCE2} %{buildroot}%{_datadir}/gnome-software/backgrounds/
%find_lang %name --with-gnome
%check
desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%post
touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :
%postun
if [ $1 -eq 0 ]; then
touch --no-create %{_datadir}/icons/hicolor &> /dev/null || :
gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || :
glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
fi
%posttrans
gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || :
glib-compile-schemas %{_datadir}/glib-2.0/schemas &> /dev/null || :
%files -f %{name}.lang
%doc AUTHORS NEWS README.md
%doc AUTHORS README.md
%license COPYING
%{_bindir}/gnome-software
%{_datadir}/applications/gnome-software-local-file-flatpak.desktop
%{_datadir}/applications/gnome-software-local-file-fwupd.desktop
%if %{with packagekit} || %{with rpmostree} || %{with dnf5}
%{_datadir}/applications/gnome-software-local-file-packagekit.desktop
%endif
%{_datadir}/applications/gnome-software-local-file.desktop
%{_datadir}/applications/org.gnome.Software.desktop
%{_datadir}/bash-completion/completions/gnome-software
%{_mandir}/man1/gnome-software.1*
%{_datadir}/icons/hicolor/*/apps/org.gnome.Software.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Software-symbolic.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-addon.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-application.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-codecs.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-driver.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-firmware.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-input-sources.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-language.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-os-updates.svg
%{_datadir}/icons/hicolor/scalable/categories/system-component-runtime.svg
%{_datadir}/metainfo/org.gnome.Software.metainfo.xml
%if %{with webapps}
%dir %{_datadir}/gnome-software
%{_datadir}/gnome-software/*.png
%{_mandir}/man1/gnome-software.1.gz
%{_datadir}/icons/hicolor/*/apps/*
%{_datadir}/gnome-software/backgrounds/
%{_datadir}/gnome-software/featured-*.svg
%{_datadir}/gnome-software/featured-*.jpg
%{_datadir}/metainfo/org.gnome.Software.appdata.xml
%{_datadir}/metainfo/org.gnome.Software.Plugin.Epiphany.metainfo.xml
%endif
%{_datadir}/metainfo/org.gnome.Software.Plugin.Flatpak.metainfo.xml
%{_datadir}/metainfo/org.gnome.Software.Plugin.Fwupd.metainfo.xml
%dir %{_libdir}/gnome-software/plugins-%{gs_plugin_version}
%{_libdir}/gnome-software/libgnomesoftware.so.%{gs_plugin_version}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_appstream.so
%if %{with dnf5}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_dnf5.so
%endif
%if %{with webapps}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_epiphany.so
%endif
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_fedora-pkgdb-collections.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_flatpak.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_fwupd.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_generic-updates.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-blocklist.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_icons.so
%if %{with malcontent}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_malcontent.so
%endif
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_modalias.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_os-release.so
%if %{with packagekit}
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_packagekit.so
%endif
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_provenance-license.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_provenance.so
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_repos.so
%if %{with webapps}
%dir %{_datadir}/swcatalog
%dir %{_datadir}/swcatalog/xml
%{_datadir}/swcatalog/xml/gnome-pwa-list-foss.xml
%endif
%if %{with packagekit}
%{_datadir}/metainfo/org.gnome.Software.Plugin.Odrs.metainfo.xml
%{_datadir}/metainfo/org.gnome.Software.Plugin.Steam.metainfo.xml
%dir %{_libdir}/gs-plugins-%{gs_plugin_version}
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_appstream.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_desktop-categories.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_desktop-menu-path.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_dpkg.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_dummy.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_epiphany.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fedora-pkgdb-collections.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_flatpak.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_fwupd.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_generic-updates.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-blacklist.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-featured.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_hardcoded-popular.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_icons.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_key-colors-metadata.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_key-colors.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_modalias.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_odrs.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_os-release.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-history.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-local.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-offline.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-proxy.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refine-repos.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refine.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-refresh.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-upgrade.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit-url-to-app.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_packagekit.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_provenance-license.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_provenance.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_repos.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_rewrite-resource.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_shell-extensions.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_steam.so
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_systemd-updates.so
%{_sysconfdir}/xdg/autostart/gnome-software-service.desktop
%{_datadir}/app-info/xmls/org.gnome.Software.Featured.xml
%{_datadir}/dbus-1/services/org.freedesktop.PackageKit.service
%endif
%{_datadir}/dbus-1/services/org.gnome.Software.service
%{_datadir}/gnome-shell/search-providers/org.gnome.Software-search-provider.ini
%{_datadir}/glib-2.0/schemas/org.gnome.software.gschema.xml
%{_datadir}/glib-2.0/schemas/org.gnome.software-fedora.gschema.override
%{_libexecdir}/gnome-software-cmd
%{_libexecdir}/gnome-software-restarter
%{_userunitdir}/gnome-software.service
%if %{with dkms}
%{_datadir}/polkit-1/actions/org.gnome.software.dkms-helper.policy
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_dkms.so
%{_libexecdir}/gnome-software-dkms-helper
%endif
%files fedora-langpacks
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_fedora-langpacks.so
%if %{with rpmostree}
%files rpm-ostree
%{_libdir}/gnome-software/plugins-%{gs_plugin_version}/libgs_plugin_rpm-ostree.so
%endif
%files snap
%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_snap.so
%{_datadir}/metainfo/org.gnome.Software.Plugin.Snap.metainfo.xml
%files devel
%{_libdir}/pkgconfig/gnome-software.pc
%dir %{_includedir}/gnome-software
%{_includedir}/gnome-software/*.h
%{_libdir}/gnome-software/libgnomesoftware.so
%dir %{_datadir}/gtk-doc
%dir %{_datadir}/gtk-doc/html
%{_datadir}/gtk-doc/html/gnome-software/
%{_datadir}/gtk-doc/html/gnome-software
%files editor
%{_bindir}/gnome-software-editor
%{_datadir}/applications/org.gnome.Software.Editor.desktop
%{_mandir}/man1/gnome-software-editor.1*
%changelog
%autochangelog
* Thu Oct 11 2018 Adam Williamson <awilliam@redhat.com> - 3.28.2-4
- Backport MR#116 to fix bug with generic updates (#1638563)
* Mon Oct 08 2018 Kalev Lember <klember@redhat.com> - 3.28.2-3
- Backport fixes for N+2 distro upgrades (#1628497)
* Thu Sep 06 2018 Kalev Lember <klember@redhat.com> - 3.28.2-2
- Add artwork for F29 Beta upgrades
* Wed May 09 2018 Kalev Lember <klember@redhat.com> - 3.28.2-1
- Update to 3.28.2
* Wed Apr 18 2018 Kalev Lember <klember@redhat.com> - 3.28.1-1.1
- Sync F28 upgrade background image with final F28 artwork
* Mon Apr 09 2018 Kalev Lember <klember@redhat.com> - 3.28.1-1
- Update to 3.28.1
* Thu Mar 15 2018 Kalev Lember <klember@redhat.com> - 3.28.0-4
- Fix opening results from gnome-shell search provider
* Wed Mar 14 2018 Kalev Lember <klember@redhat.com> - 3.28.0-3
- Fix crash on initial run with no network (#1554986)
* Tue Mar 13 2018 Kalev Lember <klember@redhat.com> - 3.28.0-2
- Backport an upstream patch to fix shell extensions app ID
* Mon Mar 12 2018 Kalev Lember <klember@redhat.com> - 3.28.0-1
- Update to 3.28.0
- Move org.gnome.Software.Featured.xml from -editor to main package
* Fri Mar 02 2018 Kalev Lember <klember@redhat.com> - 3.26.7-1
- Update to 3.26.7
- Ship a background image for F28 beta upgrades
* Thu Feb 08 2018 Kalev Lember <klember@redhat.com> - 3.26.6-1
- Update to 3.26.6
- Add fedora-workstation-repositories to nonfree-sources schema defaults
* Mon Jan 08 2018 Kalev Lember <klember@redhat.com> - 3.26.5-1
- Update to 3.26.5
- Drop unused --without packagekit option
* Sun Dec 17 2017 Kalev Lember <klember@redhat.com> - 3.26.4-1
- Update to 3.26.4
* Tue Nov 21 2017 Kalev Lember <klember@redhat.com> - 3.26.3-1
- Update to 3.26.3
* Thu Nov 09 2017 Kalev Lember <klember@redhat.com> - 3.26.2-1
- Update to 3.26.2
* Wed Oct 25 2017 Kalev Lember <klember@redhat.com> - 3.26.1-3
- Fix "too many results returned" error after distro upgrades (#1496489)
* Tue Oct 10 2017 Kalev Lember <klember@redhat.com> - 3.26.1-2
- Backport a flatpakref installation fix
* Sun Oct 08 2017 Kalev Lember <klember@redhat.com> - 3.26.1-1
- Update to 3.26.1
* Mon Sep 11 2017 Kalev Lember <klember@redhat.com> - 3.26.0-1
- Update to 3.26.0
* Sun Aug 27 2017 Kalev Lember <klember@redhat.com> - 3.25.91-1
- Update to 3.25.91
* Tue Aug 15 2017 Kalev Lember <klember@redhat.com> - 3.25.90-1
- Update to 3.25.90
* Fri Aug 11 2017 Igor Gnatenko <ignatenko@redhat.com> - 3.25.4-6
- Rebuilt after RPM update (№ 3)
* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 3.25.4-5
- Rebuilt for RPM soname bump
* Thu Aug 10 2017 Igor Gnatenko <ignatenko@redhat.com> - 3.25.4-4
- Rebuilt for RPM soname bump
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.25.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.25.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Fri Jul 21 2017 Kalev Lember <klember@redhat.com> - 3.25.4-1
- Update to 3.25.4
* Tue Jul 18 2017 Kalev Lember <klember@redhat.com> - 3.25.3-6
- Drop a meson workaround now that meson is fixed
* Wed Jun 28 2017 Neal Gompa <ngompa13@gmail.com> - 3.25.3-5
- Actually properly enable snap subpackage after removing conditional
* Wed Jun 28 2017 Neal Gompa <ngompa13@gmail.com> - 3.25.3-4
- Remove unnecessary arch-specific conditional for snap subpackage
* Tue Jun 27 2017 Neal Gompa <ngompa13@gmail.com> - 3.25.3-3
- Ensure snap subpackage is installed if snapd is installed
* Fri Jun 23 2017 Richard Hughes <rhughes@redhat.com> - 3.24.3-2
- Enable the snap subpackage
* Fri Jun 23 2017 Kalev Lember <klember@redhat.com> - 3.25.3-1
- Update to 3.25.3
- Switch to the meson build system
- Add an -editor subpackage with new banner editor
* Mon May 15 2017 Richard Hughes <rhughes@redhat.com> - 3.24.3-1
- Update to 3.23.3
- Fix a common crash when installing flatpakrepo files
- Ensure we show the banner when upgrades are available
* Tue May 09 2017 Kalev Lember <klember@redhat.com> - 3.24.2-1
- Update to 3.24.2
* Tue Apr 25 2017 Adam Williamson <awilliam@redhat.com> - 3.24.1-2
- Backport crasher fix from upstream (RHBZ #1444669 / BGO #781217)
* Tue Apr 11 2017 Kalev Lember <klember@redhat.com> - 3.24.1-1
- Update to 3.24.1
* Tue Mar 21 2017 Kalev Lember <klember@redhat.com> - 3.24.0-1
- Update to 3.24.0
* Thu Mar 16 2017 Kalev Lember <klember@redhat.com> - 3.23.92-1
- Update to 3.23.92
* Mon Feb 27 2017 Richard Hughes <rhughes@redhat.com> - 3.23.91-1
- Update to 3.23.91
* Mon Feb 13 2017 Richard Hughes <rhughes@redhat.com> - 3.23.90-1
- Update to 3.23.90
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.23.3-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Thu Dec 15 2016 Richard Hughes <rhughes@redhat.com> - 3.23.3-1
- Update to 3.23.3
* Wed Nov 23 2016 Kalev Lember <klember@redhat.com> - 3.23.2-1
- Update to 3.23.2
* Tue Nov 08 2016 Kalev Lember <klember@redhat.com> - 3.22.2-1
- Update to 3.22.2
* Wed Oct 12 2016 Kalev Lember <klember@redhat.com> - 3.22.1-1
- Update to 3.22.1
* Mon Sep 19 2016 Kalev Lember <klember@redhat.com> - 3.22.0-1
- Update to 3.22.0
* Wed Sep 14 2016 Kalev Lember <klember@redhat.com> - 3.21.92-1
- Update to 3.21.92
- Don't set group tags
* Thu Sep 01 2016 Kalev Lember <klember@redhat.com> - 3.21.91-1
- Update to 3.21.91
* Wed Aug 17 2016 Kalev Lember <klember@redhat.com> - 3.21.90-2
- Rebuilt for fixed libappstream-glib headers
* Wed Aug 17 2016 Kalev Lember <klember@redhat.com> - 3.21.90-1
- Update to 3.21.90
- Tighten -devel subpackage dependencies
* Thu Jul 28 2016 Richard Hughes <rhughes@redhat.com> - 3.21.4-2
- Allow building without PackageKit for the atomic workstation.
* Mon Jul 18 2016 Richard Hughes <rhughes@redhat.com> - 3.21.4-1
- Update to 3.21.4
* Thu May 26 2016 Kalev Lember <klember@redhat.com> - 3.21.2-2
- Build with flatpak support
* Mon May 23 2016 Richard Hughes <rhughes@redhat.com> - 3.21.2-1
- Update to 3.21.2
* Tue May 10 2016 Kalev Lember <klember@redhat.com> - 3.21.1-2
- Require PackageKit 1.1.1 for system upgrade support
* Mon Apr 25 2016 Richard Hughes <rhughes@redhat.com> - 3.21.1-1
- Update to 3.21.1
* Mon Apr 25 2016 Richard Hughes <rhughes@redhat.com> - 3.20.2-1
- Update to 3.20.1
- Allow popular and featured apps to match any plugin
- Do not make the ODRS plugin depend on xdg-app
- Fix many of the os-upgrade issues and implement the latest mockups
- Make all the plugins more threadsafe
- Return all update descriptions newer than the installed version
- Show some non-fatal error messages if installing fails
- Use a background PackageKit transaction when downloading upgrades
* Wed Apr 13 2016 Kalev Lember <klember@redhat.com> - 3.20.1-1
- Update to 3.20.1
* Fri Apr 01 2016 Richard Hughes <rhughes@redhat.com> - 3.20.1-2
- Set the list of official sources
- Compile with xdg-app support
* Tue Mar 22 2016 Kalev Lember <klember@redhat.com> - 3.20.0-1
- Update to 3.20.0
* Mon Mar 14 2016 Richard Hughes <rhughes@redhat.com> - 3.19.92-1
- Update to 3.19.92
* Thu Mar 03 2016 Kalev Lember <klember@redhat.com> - 3.19.91-2
- Set minimum required json-glib version
* Mon Feb 29 2016 Richard Hughes <rhughes@redhat.com> - 3.19.91-1
- Update to 3.19.91
* Mon Feb 15 2016 Richard Hughes <rhughes@redhat.com> - 3.19.90-1
- Update to 3.19.90
* Wed Feb 03 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3.19.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jan 15 2016 Richard Hughes <rhughes@redhat.com> - 3.19.4-1
- Update to 3.19.4
* Thu Dec 03 2015 Kalev Lember <klember@redhat.com> - 3.18.3-2
- Require librsvg2 for the gdk-pixbuf svg loader
* Thu Nov 05 2015 Richard Hughes <rhughes@redhat.com> - 3.18.3-1
- Update to 3.18.3
- Use the correct user agent string when downloading firmware
- Fix a crash in the limba plugin
- Fix installing web applications
* Mon Oct 26 2015 Kalev Lember <klember@redhat.com> - 3.18.2-2
- Fix apps reappearing as installed a few seconds after removal (#1275163)
* Thu Oct 15 2015 Kalev Lember <klember@redhat.com> - 3.18.2-1
- Update to 3.18.2
* Tue Oct 13 2015 Kalev Lember <klember@redhat.com> - 3.18.1-1
- Update to 3.18.1
* Wed Oct 07 2015 Kalev Lember <klember@redhat.com> - 3.18.0-2
- Backport two crasher fixes from upstream
* Mon Sep 21 2015 Kalev Lember <klember@redhat.com> - 3.18.0-1
- Update to 3.18.0
* Tue Sep 15 2015 Kalev Lember <klember@redhat.com> - 3.17.92-2
- Update dependency versions
* Tue Sep 15 2015 Richard Hughes <rhughes@redhat.com> - 3.17.92-1
- Update to 3.17.92
* Thu Sep 10 2015 Richard Hughes <rhughes@redhat.com> - 3.17.91-2
- Fix firmware updates
* Thu Sep 03 2015 Kalev Lember <klember@redhat.com> - 3.17.91-1
- Update to 3.17.91
* Wed Aug 19 2015 Kalev Lember <klember@redhat.com> - 3.17.90-1
- Update to 3.17.90
* Wed Aug 12 2015 Richard Hughes <rhughes@redhat.com> - 3.17.3-1
- Update to 3.17.3
* Wed Jul 22 2015 David King <amigadave@amigadave.com> - 3.17.2-3
- Bump for new gnome-desktop3
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.17.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Fri Jun 05 2015 Kalev Lember <kalevlember@gmail.com> - 3.17.2-1
- Update to 3.17.2
* Mon May 25 2015 Kalev Lember <kalevlember@gmail.com> - 3.17.1-1
- Update to 3.17.1
* Fri May 15 2015 Kalev Lember <kalevlember@gmail.com> - 3.16.2-2
- Fix a crash under Wayland (#1221968)
* Mon May 11 2015 Kalev Lember <kalevlember@gmail.com> - 3.16.2-1
- Update to 3.16.2
* Tue Apr 14 2015 Kalev Lember <kalevlember@gmail.com> - 3.16.1-1
- Update to 3.16.1
* Mon Mar 23 2015 Kalev Lember <kalevlember@gmail.com> - 3.16.0-1
- Update to 3.16.0
* Mon Mar 16 2015 Kalev Lember <kalevlember@gmail.com> - 3.15.92-1
- Update to 3.15.92
- Use license macro for the COPYING file
- Add a patch to adapt to gnome-terminal desktop file rename
* Mon Mar 02 2015 Kalev Lember <kalevlember@gmail.com> - 3.15.91-1
- Update to 3.15.91
* Sat Feb 21 2015 Kalev Lember <kalevlember@gmail.com> - 3.15.90-3
- Export DisplayName property on the packagekit session service
* Thu Feb 19 2015 Kalev Lember <kalevlember@gmail.com> - 3.15.90-2
- Backport a crash fix
* Tue Feb 17 2015 Richard Hughes <rhughes@redhat.com> - 3.15.90-1
- Update to 3.15.90
* Mon Jan 19 2015 Richard Hughes <rhughes@redhat.com> - 3.15.4-1
- Update to 3.15.4
* Tue Nov 25 2014 Kalev Lember <kalevlember@gmail.com> - 3.15.2-1
- Update to 3.15.2
* Thu Nov 13 2014 Richard Hughes <rhughes@redhat.com> - 3.14.2-3
- Fix non-Fedora build
* Tue Nov 11 2014 Richard Hughes <rhughes@redhat.com> - 3.14.2-2
- Backport a patch to fix compilation
* Mon Nov 10 2014 Kalev Lember <kalevlember@gmail.com> - 3.14.2-1
- Update to 3.14.2
* Sat Nov 08 2014 Kalev Lember <kalevlember@gmail.com> - 3.14.1-3
- Update the list of system apps
* Sat Nov 01 2014 David King <amigadave@amigadave.com> - 3.14.1-2
- Rebuild for new libappstream-glib (#1156494)
* Mon Oct 13 2014 Kalev Lember <kalevlember@gmail.com> - 3.14.1-1
- Update to 3.14.1
* Thu Oct 09 2014 Kalev Lember <kalevlember@gmail.com> - 3.14.0-2
- Depend on gnome-menus for app folder directory entries
* Mon Sep 22 2014 Kalev Lember <kalevlember@gmail.com> - 3.14.0-1
- Update to 3.14.0
* Wed Sep 17 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.92-2
- Set minimum required dependency versions (#1136343)
* Tue Sep 16 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.92-1
- Update to 3.13.92
- Replace gnome-system-log with gnome-logs in the system apps list
* Tue Sep 02 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.91-1
- Update to 3.13.91
* Tue Aug 19 2014 Richard Hughes <rhughes@redhat.com> - 3.13.90-1
- Update to 3.13.90
* Sat Aug 16 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.13.5-0.2.git5c89189
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Mon Aug 11 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.5-0.1.git5c89189
- Update to 3.13.5 git snapshot
- Ship HighContrast icons
* Sun Aug 03 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.4-2
- Replace Epiphany with Firefox in the system apps list
* Wed Jul 23 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.4-1
- Update to 3.13.4
* Wed Jun 25 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.3-1
- Update to 3.13.3
* Thu Jun 12 2014 Richard Hughes <rhughes@redhat.com> - 3.13.3-0.2.git7491627
- Depend on the newly-created appstream-data package and stop shipping
the metadata here.
* Sat Jun 07 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.3-0.1.git7491627
- Update to 3.13.3 git snapshot
* Wed May 28 2014 Richard Hughes <rhughes@redhat.com> - 3.13.2-2
- Rebuild with new metadata.
* Wed May 28 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.2-1
- Update to 3.13.2
* Thu May 15 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.1-4
- Depend on gsettings-desktop-schemas
* Mon May 12 2014 Richard Hughes <rhughes@redhat.com> - 3.13.1-3
- Update the metadata and use appstream-util to install the metadata.
* Wed May 07 2014 Kalev Lember <kalevlember@gmail.com> - 3.13.1-2
- Drop gnome-icon-theme dependency
* Mon Apr 28 2014 Richard Hughes <rhughes@redhat.com> - 3.13.1-1
- Update to 3.13.1
* Fri Apr 11 2014 Kalev Lember <kalevlember@gmail.com> - 3.12.1-2
- Rebuild with new metadata.
* Fri Apr 11 2014 Richard Hughes <rhughes@redhat.com> - 3.12.1-1
- Update to 3.12.1
* Mon Mar 24 2014 Richard Hughes <rhughes@redhat.com> - 3.12.0-1
- Update to 3.12.0
* Thu Mar 20 2014 Richard Hughes <rhughes@redhat.com> - 3.11.92-1
- Update to 3.11.92
* Tue Mar 18 2014 Richard Hughes <rhughes@redhat.com> - 3.11.91-2
- Rebuild with new metadata.
* Sat Mar 08 2014 Richard Hughes <rhughes@redhat.com> - 3.11.91-1
- Update to 3.11.91
* Tue Feb 18 2014 Richard Hughes <rhughes@redhat.com> - 3.11.90-1
- Update to 3.11.90
* Mon Feb 03 2014 Richard Hughes <rhughes@redhat.com> - 3.11.5-2
- Require epiphany-runtime rather than the full application
* Mon Feb 03 2014 Richard Hughes <rhughes@redhat.com> - 3.11.5-1
- Update to 3.11.5
* Thu Jan 30 2014 Richard Hughes <rhughes@redhat.com> - 3.11.4-3
- Rebuild for libpackagekit-glib soname bump
* Wed Jan 22 2014 Richard Hughes <rhughes@redhat.com> - 3.11.4-2
- Rebuild with metadata that has the correct screenshot url.
* Thu Jan 16 2014 Richard Hughes <rhughes@redhat.com> - 3.11.4-1
- Update to 3.11.4
* Tue Dec 17 2013 Richard Hughes <rhughes@redhat.com> - 3.11.3-1
- Update to 3.11.3
* Tue Nov 19 2013 Richard Hughes <rhughes@redhat.com> - 3.11.2-1
- Update to 3.11.2
* Tue Oct 29 2013 Richard Hughes <rhughes@redhat.com> - 3.11.1-1
- Update to 3.11.1
- Add a gnome shell search provider
- Add a module to submit the user rating to the fedora-tagger web service
- Add support for 'missing' codecs that we know exist but we can't install
- Add support for epiphany web applications
- Handle offline installation sensibly
- Save the user rating if the user clicks the rating stars
- Show a modal error message if install or remove actions failed
- Show a star rating on the application details page
- Show font screenshots
- Show more detailed version numbers when required
- Show screenshots to each application
* Wed Sep 25 2013 Richard Hughes <richard@hughsie.com> 3.10.0-1
- New upstream release.
- New metadata for fedora, updates and updates-testing
- Add a plugin to query the PackageKit prepared-update file directly
- Do not clear the offline-update trigger if rebooting succeeded
- Do not load incompatible projects when parsing AppStream data
- Lots of updated translations
- Show the window right away when starting
* Fri Sep 13 2013 Richard Hughes <richard@hughsie.com> 3.9.3-1
- New upstream release.
- Lots of new and fixed UI and updated metadata for Fedora 20
* Tue Sep 03 2013 Richard Hughes <richard@hughsie.com> 3.9.2-1
- New upstream release.
- Allow stock items in the AppStream XML
- Extract the AppStream URL and description from the XML
- Only present the window when the overview is complete
- Return the subcategories sorted by name
* Mon Sep 02 2013 Richard Hughes <richard@hughsie.com> 3.9.1-1
- New upstream release which is a technical preview for the alpha.
* Sun Sep 01 2013 Richard Hughes <richard@hughsie.com> 0.1-3
- Use buildroot not RPM_BUILD_ROOT
- Own all gnome-software directories
- Drop gtk-update-icon-cache requires and the mime database functionality
* Thu Aug 29 2013 Richard Hughes <richard@hughsie.com> 0.1-2
- Add call to desktop-file-validate and fix other review comments.
* Wed Aug 28 2013 Richard Hughes <richard@hughsie.com> 0.1-1
- First release for Fedora package review

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.28.2.tar.xz) = ca22ea589c19f3c5aae32fb2540646d3b3c8faf86f857dd414caf61b716bc50dea16281955c594a629f684da5ac87eeada6ac68247a9b0545600b739fa436dd7
SHA512 (f28.png) = 468ece7c735d3f11f863c347aa22752ff5805effa47e4e3b97dd3b777ab5705423edc4e51c3491885128e684f243362e79f9f8ec42277bd0673abea48a36d5b2
SHA512 (f29.png) = 7bcb036c9edf069e65edeabbb08460321dedf996d40ae71a8e1e1ba4131288e60a15c5c7e3115229a2850cade018f0ff935da3ee439768597e37830cad5e77bb