Hello community,
here is the log from the commit of package gnome-software for openSUSE:Factory checked in at 2019-06-02 15:12:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnome-software (Old)
and /work/SRC/openSUSE:Factory/.gnome-software.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gnome-software"
Sun Jun 2 15:12:41 2019 rev:64 rq:705582 version:3.32.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/gnome-software/gnome-software.changes 2019-05-10 09:17:33.368257500 +0200
+++ /work/SRC/openSUSE:Factory/.gnome-software.new.5148/gnome-software.changes 2019-06-02 15:12:48.298171186 +0200
@@ -1,0 +2,18 @@
+Fri May 24 20:17:42 UTC 2019 - Bjørn Lie
+
+- Update to version 3.32.3:
+ + Add missing XbSilo locking, hopefully fixing a large number of
+ reported crashes.
+ + Fix a regression that caused the fonts category to go missing.
+ + Show a placeholder on the details page when we don't have the
+ actual icon.
+ + Plug a large memory leak.
+ + Use nicer arrows for version numbers on the updates page.
+ + Fix an issue that led to screenshots not being correctly scaled
+ on hidpi.
+ + flatpak:
+ - Fix several double-uses of GErrors.
+ - Handle failure of a libflatpak function updating permissions.
+ + rpm-ostree: Implement what-provides decompose.
+
+-------------------------------------------------------------------
Old:
----
gnome-software-3.32.2.tar.xz
New:
----
gnome-software-3.32.3.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gnome-software.spec ++++++
--- /var/tmp/diff_new_pack.zTAlgd/_old 2019-06-02 15:12:50.886170066 +0200
+++ /var/tmp/diff_new_pack.zTAlgd/_new 2019-06-02 15:12:50.890170064 +0200
@@ -18,7 +18,7 @@
%define gs_plugin_api 13
Name: gnome-software
-Version: 3.32.2
+Version: 3.32.3
Release: 0
Summary: GNOME Software Store
License: GPL-2.0-or-later
++++++ gnome-software-3.32.2.tar.xz -> gnome-software-3.32.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/NEWS new/gnome-software-3.32.3/NEWS
--- old/gnome-software-3.32.2/NEWS 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/NEWS 2019-05-24 21:51:51.000000000 +0200
@@ -1,3 +1,19 @@
+Version 3.32.3
+~~~~~~~~~~~~~~
+Released: 2019-05-24
+
+This is a stable release with the following changes:
+ * Add missing XbSilo locking, hopefully fixing a large number of reported
+ crashes
+ * Fix a regression that caused the fonts category to go missing
+ * Show a placeholder on the details page when we don't have the actual icon
+ * Plug a large memory leak
+ * Use nicer arrows for version numbers on the updates page
+ * Fix an issue that led to screenshots not being correctly scaled on hidpi
+ * flatpak: Fix several double-uses of GErrors
+ * flatpak: Handle failure of a libflatpak function updating permissions
+ * rpm-ostree: Implement what-provides decompose
+
Version 3.32.2
~~~~~~~~~~~~~~
Released: 2019-05-07
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/RELEASE new/gnome-software-3.32.3/RELEASE
--- old/gnome-software-3.32.2/RELEASE 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/RELEASE 2019-05-24 21:51:51.000000000 +0200
@@ -2,14 +2,14 @@
Write release entries:
-git log --format="%s" --cherry-pick --right-only 3.32.1... | grep -i -v trivial | grep -v Merge | sort | uniq
+git log --format="%s" --cherry-pick --right-only 3.32.2... | grep -i -v trivial | grep -v Merge | sort | uniq
Add any user visible changes into data/appdata/org.gnome.Software.appdata.xml.in
Generate NEWS file:
appstream-util appdata-to-news data/appdata/org.gnome.Software.appdata.xml.in > NEWS
-git commit -a -m "Release version 3.32.2"
-git tag -s 3.32.2 -m "==== Version 3.32.2 ===="
+git commit -a -m "Release version 3.32.3"
+git tag -s 3.32.3 -m "==== Version 3.32.3 ===="
<enter password>
ninja-build dist
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/contrib/gnome-software.spec.in new/gnome-software-3.32.3/contrib/gnome-software.spec.in
--- old/gnome-software-3.32.2/contrib/gnome-software.spec.in 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/contrib/gnome-software.spec.in 2019-05-24 21:51:51.000000000 +0200
@@ -150,7 +150,7 @@
%{_mandir}/man1/gnome-software.1.gz
%{_datadir}/icons/hicolor/*/apps/org.gnome.Software.svg
%{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Software-symbolic.svg
-%{_datadir}/icons/hicolor/symbolic/status/software-installed-symbolic.svg
+%{_datadir}/icons/hicolor/scalable/status/software-installed-symbolic.svg
%{_datadir}/gnome-software/featured-*.svg
%{_datadir}/gnome-software/featured-*.jpg
%{_datadir}/metainfo/org.gnome.Software.appdata.xml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/data/appdata/org.gnome.Software.appdata.xml.in new/gnome-software-3.32.3/data/appdata/org.gnome.Software.appdata.xml.in
--- old/gnome-software-3.32.2/data/appdata/org.gnome.Software.appdata.xml.in 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/data/appdata/org.gnome.Software.appdata.xml.in 2019-05-24 21:51:51.000000000 +0200
@@ -46,6 +46,24 @@
Validate with `appstream-util validate *.appdata.xml`
-->
<releases>
+ <release date="2019-05-24" version="3.32.3">
+ <description>
+ <p>
+ This is a stable release with the following changes:
+ </p>
+ <ul>
+ <li>Add missing XbSilo locking, hopefully fixing a large number of reported crashes</li>
+ <li>Fix a regression that caused the fonts category to go missing</li>
+ <li>Show a placeholder on the details page when we don't have the actual icon</li>
+ <li>Plug a large memory leak</li>
+ <li>Use nicer arrows for version numbers on the updates page</li>
+ <li>Fix an issue that led to screenshots not being correctly scaled on hidpi</li>
+ <li>flatpak: Fix several double-uses of GErrors</li>
+ <li>flatpak: Handle failure of a libflatpak function updating permissions</li>
+ <li>rpm-ostree: Implement what-provides decompose</li>
+ </ul>
+ </description>
+ </release>
<release date="2019-05-07" version="3.32.2">
<description>
<p>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/lib/gnome-software.h new/gnome-software-3.32.3/lib/gnome-software.h
--- old/gnome-software-3.32.2/lib/gnome-software.h 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/lib/gnome-software.h 2019-05-24 21:51:51.000000000 +0200
@@ -15,6 +15,7 @@
#include
#include
#include
+#include
#include
#include
#include
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/lib/gs-autocleanups.h new/gnome-software-3.32.3/lib/gs-autocleanups.h
--- old/gnome-software-3.32.2/lib/gs-autocleanups.h 1970-01-01 01:00:00.000000000 +0100
+++ new/gnome-software-3.32.3/lib/gs-autocleanups.h 2019-05-24 21:51:51.000000000 +0200
@@ -0,0 +1,51 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2019 Kalev Lember
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#pragma once
+
+G_BEGIN_DECLS
+
+#if !GLIB_CHECK_VERSION(2, 61, 1)
+
+/* Backported GRWLock autoptr support for older glib versions */
+
+typedef void GRWLockWriterLocker;
+
+static inline GRWLockWriterLocker *
+g_rw_lock_writer_locker_new (GRWLock *rw_lock)
+{
+ g_rw_lock_writer_lock (rw_lock);
+ return (GRWLockWriterLocker *) rw_lock;
+}
+
+static inline void
+g_rw_lock_writer_locker_free (GRWLockWriterLocker *locker)
+{
+ g_rw_lock_writer_unlock ((GRWLock *) locker);
+}
+
+typedef void GRWLockReaderLocker;
+
+static inline GRWLockReaderLocker *
+g_rw_lock_reader_locker_new (GRWLock *rw_lock)
+{
+ g_rw_lock_reader_lock (rw_lock);
+ return (GRWLockReaderLocker *) rw_lock;
+}
+
+static inline void
+g_rw_lock_reader_locker_free (GRWLockReaderLocker *locker)
+{
+ g_rw_lock_reader_unlock ((GRWLock *) locker);
+}
+
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRWLockWriterLocker, g_rw_lock_writer_locker_free)
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(GRWLockReaderLocker, g_rw_lock_reader_locker_free)
+
+#endif
+
+G_END_DECLS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/lib/gs-plugin.c new/gnome-software-3.32.3/lib/gs-plugin.c
--- old/gnome-software-3.32.2/lib/gs-plugin.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/lib/gs-plugin.c 2019-05-24 21:51:51.000000000 +0200
@@ -225,6 +225,8 @@
if (priv->module != NULL)
g_module_close (priv->module);
#endif
+
+ G_OBJECT_CLASS (gs_plugin_parent_class)->finalize (object);
}
/**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/meson.build new/gnome-software-3.32.3/meson.build
--- old/gnome-software-3.32.2/meson.build 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/meson.build 2019-05-24 21:51:51.000000000 +0200
@@ -1,5 +1,5 @@
project('gnome-software', 'c',
- version : '3.32.2',
+ version : '3.32.3',
license : 'GPL-2.0+',
default_options : ['warning_level=1', 'c_std=c99'],
meson_version : '>=0.46.0'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/plugins/core/gs-appstream.c new/gnome-software-3.32.3/plugins/core/gs-appstream.c
--- old/gnome-software-3.32.2/plugins/core/gs-appstream.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/plugins/core/gs-appstream.c 2019-05-24 21:51:51.000000000 +0200
@@ -1174,9 +1174,11 @@
GsCategory *parent = GS_CATEGORY (g_ptr_array_index (list, j));
GPtrArray *children = gs_category_get_children (parent);
- for (guint i = 1; i < children->len; i++) { /* 1 to ignore all */
+ for (guint i = 0; i < children->len; i++) {
GsCategory *cat = g_ptr_array_index (children, i);
GPtrArray *groups = gs_category_get_desktop_groups (cat);
+ if (g_strcmp0 (gs_category_get_id (cat), "all") == 0)
+ continue;
for (guint k = 0; k < groups->len; k++) {
const gchar *group = g_ptr_array_index (groups, k);
guint cnt = gs_appstream_count_component_for_groups (plugin, silo, group);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/plugins/core/gs-plugin-appstream.c new/gnome-software-3.32.3/plugins/core/gs-plugin-appstream.c
--- old/gnome-software-3.32.2/plugins/core/gs-plugin-appstream.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/plugins/core/gs-plugin-appstream.c 2019-05-24 21:51:51.000000000 +0200
@@ -27,6 +27,7 @@
struct GsPluginData {
XbSilo *silo;
+ GRWLock silo_lock;
GSettings *settings;
};
@@ -35,6 +36,10 @@
{
GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ /* XbSilo needs external locking as we destroy the silo and build a new
+ * one when something changes */
+ g_rw_lock_init (&priv->silo_lock);
+
/* need package name */
gs_plugin_add_rule (plugin, GS_PLUGIN_RULE_RUN_AFTER, "dpkg");
@@ -48,6 +53,7 @@
GsPluginData *priv = gs_plugin_get_data (plugin);
g_object_unref (priv->silo);
g_object_unref (priv->settings);
+ g_rw_lock_clear (&priv->silo_lock);
}
static gboolean
@@ -422,14 +428,20 @@
g_autoptr(XbBuilder) builder = xb_builder_new ();
g_autoptr(XbNode) n = NULL;
g_autoptr(GFile) file = NULL;
+ g_autoptr(GRWLockReaderLocker) reader_locker = NULL;
+ g_autoptr(GRWLockWriterLocker) writer_locker = NULL;
g_autoptr(GPtrArray) parent_appdata = g_ptr_array_new_with_free_func (g_free);
g_autoptr(GPtrArray) parent_appstream = g_ptr_array_new_with_free_func (g_free);
+
+ reader_locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
/* everything is okay */
if (priv->silo != NULL && xb_silo_is_valid (priv->silo))
return TRUE;
+ g_clear_pointer (&reader_locker, g_rw_lock_reader_locker_free);
/* drat! silo needs regenerating */
+ writer_locker = g_rw_lock_writer_locker_new (&priv->silo_lock);
g_clear_object (&priv->silo);
/* verbose profiling */
@@ -571,6 +583,7 @@
g_autofree gchar *path = NULL;
g_autofree gchar *scheme = NULL;
g_autofree gchar *xpath = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GsApp) app = NULL;
g_autoptr(XbNode) component = NULL;
@@ -583,6 +596,8 @@
if (g_strcmp0 (scheme, "appstream") != 0)
return TRUE;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
/* create app */
path = gs_utils_get_url_path (url);
xpath = g_strdup_printf ("components/component/id[text()='%s']", path);
@@ -648,8 +663,11 @@
GsPluginData *priv = gs_plugin_get_data (plugin);
g_autofree gchar *xpath = NULL;
g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(XbNode) component = NULL;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
xpath = g_strdup_printf ("component/id[text()='%s']", gs_app_get_id (app));
component = xb_silo_query_first (priv->silo, xpath, &error_local);
if (component == NULL) {
@@ -674,6 +692,7 @@
GsPluginData *priv = gs_plugin_get_data (plugin);
const gchar *id;
g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GString) xpath = g_string_new (NULL);
g_autoptr(GPtrArray) components = NULL;
@@ -682,6 +701,8 @@
if (id == NULL)
return TRUE;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
/* look in AppStream then fall back to AppData */
xb_string_append_union (xpath, "components/component/id[text()='%s']/../pkgname/..", id);
xb_string_append_union (xpath, "component/id[text()='%s']/../pkgname/..", id);
@@ -731,8 +752,11 @@
for (guint j = 0; j < sources->len; j++) {
const gchar *pkgname = g_ptr_array_index (sources, j);
g_autofree gchar *xpath = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GPtrArray) components = NULL;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
xpath = g_strdup_printf ("components/component/pkgname[text()='%s']/..",
pkgname);
components = xb_silo_query (priv->silo, xpath, 0, &error_local);
@@ -799,6 +823,7 @@
const gchar *id;
g_autofree gchar *xpath = NULL;
g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GPtrArray) components = NULL;
/* check silo is valid */
@@ -810,6 +835,8 @@
if (id == NULL)
return TRUE;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
/* find all app with package names when matching any prefixes */
xpath = g_strdup_printf ("components/component/id[text()='%s']/../pkgname/..", id);
components = xb_silo_query (priv->silo, xpath, 0, &error_local);
@@ -849,8 +876,12 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
return gs_appstream_add_category_apps (plugin,
priv->silo,
category,
@@ -867,8 +898,12 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
return gs_appstream_search (plugin,
priv->silo,
values,
@@ -884,12 +919,15 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GPtrArray) components = NULL;
/* check silo is valid */
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
/* get all installed appdata files (notice no 'components/' prefix...) */
components = xb_silo_query (priv->silo, "component", 0, NULL);
if (components == NULL)
@@ -913,8 +951,12 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
return gs_appstream_add_categories (plugin, priv->silo, list,
cancellable, error);
}
@@ -926,8 +968,12 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
return gs_appstream_add_popular (plugin, priv->silo, list, cancellable, error);
}
@@ -938,8 +984,12 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
return gs_appstream_add_featured (plugin, priv->silo, list, cancellable, error);
}
@@ -951,8 +1001,12 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
return gs_appstream_add_recent (plugin, priv->silo, list, age,
cancellable, error);
}
@@ -965,8 +1019,12 @@
GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_plugin_appstream_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
return gs_appstream_add_alternates (plugin, priv->silo, app, list,
cancellable, error);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/plugins/external-appstream/gs-plugin-external-appstream.c new/gnome-software-3.32.3/plugins/external-appstream/gs-plugin-external-appstream.c
--- old/gnome-software-3.32.2/plugins/external-appstream/gs-plugin-external-appstream.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/plugins/external-appstream/gs-plugin-external-appstream.c 2019-05-24 21:51:51.000000000 +0200
@@ -261,7 +261,7 @@
appstream_urls = g_settings_get_strv (priv->settings,
"external-appstream-urls");
for (guint i = 0; appstream_urls[i] != NULL; ++i) {
- g_autoptr(GError) local_error = NULL;
+ g_autoptr(GError) error_local = NULL;
if (!g_str_has_prefix (appstream_urls[i], "https")) {
g_warning ("Not considering %s as an external "
"appstream source: please use an https URL",
@@ -272,9 +272,9 @@
appstream_urls[i],
cache_age,
cancellable,
- &local_error)) {
+ &error_local)) {
g_warning ("Failed to update external appstream file: %s",
- local_error->message);
+ error_local->message);
}
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/plugins/flatpak/gs-flatpak.c new/gnome-software-3.32.3/plugins/flatpak/gs-flatpak.c
--- old/gnome-software-3.32.2/plugins/flatpak/gs-flatpak.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/plugins/flatpak/gs-flatpak.c 2019-05-24 21:51:51.000000000 +0200
@@ -33,6 +33,7 @@
AsAppScope scope;
GsPlugin *plugin;
XbSilo *silo;
+ GRWLock silo_lock;
gchar *id;
guint changed_id;
};
@@ -162,6 +163,7 @@
g_autoptr(GBytes) bytes = NULL;
g_autoptr(GKeyFile) keyfile = NULL;
GsAppPermissions permissions;
+ g_autoptr(GError) error_local = NULL;
old_bytes = flatpak_installed_ref_load_metadata (FLATPAK_INSTALLED_REF (xref), NULL, NULL);
old_keyfile = g_key_file_new ();
@@ -174,14 +176,21 @@
gs_app_get_origin (app),
FLATPAK_REF (xref),
NULL,
- NULL);
- keyfile = g_key_file_new ();
- g_key_file_load_from_data (keyfile,
- g_bytes_get_data (bytes, NULL),
- g_bytes_get_size (bytes),
- 0, NULL);
+ &error_local);
+ if (bytes == NULL) {
+ g_debug ("Failed to get metadata for remote ‘%s’: %s",
+ gs_app_get_origin (app), error_local->message);
+ g_clear_error (&error_local);
+ permissions = GS_APP_PERMISSIONS_UNKNOWN;
+ } else {
+ keyfile = g_key_file_new ();
+ g_key_file_load_from_data (keyfile,
+ g_bytes_get_data (bytes, NULL),
+ g_bytes_get_size (bytes),
+ 0, NULL);
- permissions = perms_from_metadata (keyfile) & ~perms_from_metadata (old_keyfile);
+ permissions = perms_from_metadata (keyfile) & ~perms_from_metadata (old_keyfile);
+ }
/* no new permissions set */
if (permissions == GS_APP_PERMISSIONS_UNKNOWN)
@@ -499,8 +508,10 @@
#else
g_autoptr(GError) error_local = NULL;
main_ref = gs_flatpak_get_xremote_main_ref (self, xremote, &error_local);
- if (main_ref == NULL)
+ if (main_ref == NULL) {
g_warning ("failed to get main ref: %s", error_local->message);
+ g_clear_error (&error_local);
+ }
#endif
if (main_ref != NULL) {
g_autoptr(XbBuilderFixup) fixup = NULL;
@@ -649,13 +660,18 @@
g_autofree gchar *blobfn = NULL;
g_autoptr(GFile) file = NULL;
g_autoptr(GPtrArray) xremotes = NULL;
+ g_autoptr(GRWLockReaderLocker) reader_locker = NULL;
+ g_autoptr(GRWLockWriterLocker) writer_locker = NULL;
g_autoptr(XbBuilder) builder = xb_builder_new ();
+ reader_locker = g_rw_lock_reader_locker_new (&self->silo_lock);
/* everything is okay */
if (self->silo != NULL && xb_silo_is_valid (self->silo))
return TRUE;
+ g_clear_pointer (&reader_locker, g_rw_lock_reader_locker_free);
/* drat! silo needs regenerating */
+ writer_locker = g_rw_lock_writer_locker_new (&self->silo_lock);
g_clear_object (&self->silo);
/* verbose profiling */
@@ -800,7 +816,7 @@
g_autofree gchar *str = NULL;
g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (self->plugin));
g_autoptr(GsFlatpakProgressHelper) phelper = NULL;
- g_autoptr(GError) local_error = NULL;
+ g_autoptr(GError) error_local = NULL;
/* TRANSLATORS: status text when downloading new metadata */
str = g_strdup_printf (_("Getting flatpak metadata for %s…"), remote_name);
@@ -810,11 +826,11 @@
if (!flatpak_installation_update_remote_sync (self->installation,
remote_name,
cancellable,
- &local_error)) {
+ &error_local)) {
g_debug ("Failed to update metadata for remote %s: %s\n",
- remote_name, local_error->message);
- gs_flatpak_error_convert (&local_error);
- g_propagate_error (error, g_steal_pointer (&local_error));
+ remote_name, error_local->message);
+ gs_flatpak_error_convert (&error_local);
+ g_propagate_error (error, g_steal_pointer (&error_local));
return FALSE;
}
phelper = gs_flatpak_progress_helper_new (self->plugin, app_dl);
@@ -1379,6 +1395,7 @@
g_debug ("Couldn't get the main app for updatable app extension %s: "
"%s; adding the app itself to the updates list...",
gs_app_get_unique_id (app), error_local->message);
+ g_clear_error (&error_local);
main_app = g_object_ref (app);
}
gs_app_set_state (main_app, AS_APP_STATE_UPDATABLE_LIVE);
@@ -1411,6 +1428,7 @@
&error_local)) {
g_warning ("failed to get download size: %s",
error_local->message);
+ g_clear_error (&error_local);
gs_app_set_size_download (main_app, GS_APP_SIZE_UNKNOWABLE);
} else {
gs_app_set_size_download (main_app, download_size);
@@ -1445,8 +1463,10 @@
}
/* manually do this in case we created the first appstream file */
+ g_rw_lock_reader_lock (&self->silo_lock);
if (self->silo != NULL)
xb_silo_invalidate (self->silo);
+ g_rw_lock_reader_unlock (&self->silo_lock);
/* update AppStream metadata */
if (!gs_flatpak_refresh_appstream (self, cache_age, cancellable, error))
@@ -1636,20 +1656,17 @@
return xref;
}
-gboolean
-gs_flatpak_refine_app_state (GsFlatpak *self,
- GsApp *app,
- GCancellable *cancellable,
- GError **error)
+/* the _unlocked() version doesn't call gs_flatpak_rescan_appstream_store,
+ * in order to avoid taking the writer lock on self->silo_lock */
+static gboolean
+gs_flatpak_refine_app_state_unlocked (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
{
g_autoptr(FlatpakInstalledRef) ref = NULL;
- g_autoptr(GError) error_local = NULL;
g_autoptr(GPtrArray) refs = NULL;
- /* ensure valid */
- if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
- return FALSE;
-
/* already found */
if (gs_app_get_state (app) != AS_APP_STATE_UNKNOWN)
return TRUE;
@@ -1724,6 +1741,19 @@
return TRUE;
}
+gboolean
+gs_flatpak_refine_app_state (GsFlatpak *self,
+ GsApp *app,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* ensure valid */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ return gs_flatpak_refine_app_state_unlocked (self, app, cancellable, error);
+}
+
static GsApp *
gs_flatpak_create_runtime (GsFlatpak *self, GsApp *parent, const gchar *runtime)
{
@@ -1989,10 +2019,10 @@
/* is the app_runtime already installed? */
app_runtime = gs_app_get_runtime (app);
- if (!gs_flatpak_refine_app_state (self,
- app_runtime,
- cancellable,
- error))
+ if (!gs_flatpak_refine_app_state_unlocked (self,
+ app_runtime,
+ cancellable,
+ error))
return FALSE;
if (gs_app_get_state (app_runtime) == AS_APP_STATE_INSTALLED) {
g_debug ("runtime %s is already installed, so not adding size",
@@ -2048,6 +2078,7 @@
if (!ret) {
g_warning ("libflatpak failed to return application "
"size: %s", error_local->message);
+ g_clear_error (&error_local);
}
}
@@ -2107,22 +2138,23 @@
return TRUE;
}
-gboolean
-gs_flatpak_refine_app (GsFlatpak *self,
- GsApp *app,
- GsPluginRefineFlags flags,
- GCancellable *cancellable,
- GError **error)
+/* the _unlocked() version doesn't call gs_flatpak_rescan_appstream_store,
+ * in order to avoid taking the writer lock on self->silo_lock */
+static gboolean
+gs_flatpak_refine_app_unlocked (GsFlatpak *self,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
{
AsAppState old_state = gs_app_get_state (app);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
/* not us */
if (gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_FLATPAK)
return TRUE;
- /* ensure valid */
- if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
- return FALSE;
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
/* always do AppStream properties */
if (!gs_flatpak_refine_appstream (self, app, self->silo, flags, error))
@@ -2135,7 +2167,7 @@
}
/* check the installed state */
- if (!gs_flatpak_refine_app_state (self, app, cancellable, error)) {
+ if (!gs_flatpak_refine_app_state_unlocked (self, app, cancellable, error)) {
g_prefix_error (error, "failed to get state: ");
return FALSE;
}
@@ -2192,6 +2224,20 @@
}
gboolean
+gs_flatpak_refine_app (GsFlatpak *self,
+ GsApp *app,
+ GsPluginRefineFlags flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+ /* ensure valid */
+ if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
+ return FALSE;
+
+ return gs_flatpak_refine_app_unlocked (self, app, flags, cancellable, error);
+}
+
+gboolean
gs_flatpak_refine_wildcard (GsFlatpak *self, GsApp *app,
GsAppList *list, GsPluginRefineFlags refine_flags,
GCancellable *cancellable, GError **error)
@@ -2200,6 +2246,7 @@
g_autofree gchar *xpath = NULL;
g_autoptr(GError) error_local = NULL;
g_autoptr(GPtrArray) components = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
/* not enough info to find */
id = gs_app_get_id (app);
@@ -2210,6 +2257,8 @@
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
+
/* find all apps when matching any prefixes */
xpath = g_strdup_printf ("components/component/id[text()='%s']/..", id);
components = xb_silo_query (self->silo, xpath, 0, &error_local);
@@ -2229,7 +2278,7 @@
if (new == NULL)
return FALSE;
gs_flatpak_claim_app (self, new);
- if (!gs_flatpak_refine_app (self, new, refine_flags, cancellable, error))
+ if (!gs_flatpak_refine_app_unlocked (self, new, refine_flags, cancellable, error))
return FALSE;
gs_app_subsume_metadata (new, app);
gs_app_list_add (list, new);
@@ -2614,6 +2663,7 @@
gs_plugin_event_set_error (event, error_local);
gs_plugin_event_add_flag (event, GS_PLUGIN_EVENT_FLAG_WARNING);
gs_plugin_report_event (self->plugin, event);
+ g_clear_error (&error_local);
}
/* get this now, as it's not going to be available at install time */
@@ -2666,13 +2716,19 @@
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
if (!gs_appstream_search (self->plugin, self->silo, values, list_tmp,
cancellable, error))
return FALSE;
+
gs_flatpak_claim_app_list (self, list_tmp);
gs_app_list_add_list (list, list_tmp);
+
return TRUE;
}
@@ -2684,14 +2740,20 @@
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
if (!gs_appstream_add_category_apps (self->plugin, self->silo,
category, list_tmp,
cancellable, error))
return FALSE;
+
gs_flatpak_claim_app_list (self, list_tmp);
gs_app_list_add_list (list, list_tmp);
+
return TRUE;
}
@@ -2701,8 +2763,12 @@
GCancellable *cancellable,
GError **error)
{
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
return gs_appstream_add_categories (self->plugin, self->silo,
list, cancellable, error);
}
@@ -2714,12 +2780,18 @@
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
if (!gs_appstream_add_popular (self->plugin, self->silo, list_tmp,
cancellable, error))
return FALSE;
+
gs_app_list_add_list (list, list_tmp);
+
return TRUE;
}
@@ -2730,12 +2802,18 @@
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
if (!gs_appstream_add_featured (self->plugin, self->silo, list_tmp,
cancellable, error))
return FALSE;
+
gs_app_list_add_list (list, list_tmp);
+
return TRUE;
}
@@ -2747,12 +2825,18 @@
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
if (!gs_appstream_add_alternates (self->plugin, self->silo, app, list_tmp,
cancellable, error))
return FALSE;
+
gs_app_list_add_list (list, list_tmp);
+
return TRUE;
}
@@ -2764,13 +2848,19 @@
GError **error)
{
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
+
if (!gs_flatpak_rescan_appstream_store (self, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&self->silo_lock);
if (!gs_appstream_add_recent (self->plugin, self->silo, list_tmp, age,
cancellable, error))
return FALSE;
+
gs_flatpak_claim_app_list (self, list_tmp);
gs_app_list_add_list (list, list_tmp);
+
return TRUE;
}
@@ -2823,6 +2913,7 @@
g_object_unref (self->plugin);
g_hash_table_unref (self->broken_remotes);
g_mutex_clear (&self->broken_remotes_mutex);
+ g_rw_lock_clear (&self->silo_lock);
G_OBJECT_CLASS (gs_flatpak_parent_class)->finalize (object);
}
@@ -2837,6 +2928,10 @@
static void
gs_flatpak_init (GsFlatpak *self)
{
+ /* XbSilo needs external locking as we destroy the silo and build a new
+ * one when something changes */
+ g_rw_lock_init (&self->silo_lock);
+
g_mutex_init (&self->broken_remotes_mutex);
self->broken_remotes = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/plugins/flatpak/gs-plugin-flatpak.c new/gnome-software-3.32.3/plugins/flatpak/gs-plugin-flatpak.c
--- old/gnome-software-3.32.2/plugins/flatpak/gs-plugin-flatpak.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/plugins/flatpak/gs-plugin-flatpak.c 2019-05-24 21:51:51.000000000 +0200
@@ -58,6 +58,7 @@
permission = gs_utils_get_permission (action_id, NULL, &error_local);
if (permission == NULL) {
g_debug ("no permission for %s: %s", action_id, error_local->message);
+ g_clear_error (&error_local);
} else {
priv->has_system_helper = g_permission_get_allowed (permission) ||
g_permission_get_can_acquire (permission);
@@ -373,12 +374,13 @@
GCancellable *cancellable, GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
- g_autoptr(GError) error_local = NULL;
g_debug ("finding ref %s", ref);
for (guint i = 0; i < priv->flatpaks->len; i++) {
GsFlatpak *flatpak_tmp = g_ptr_array_index (priv->flatpaks, i);
g_autoptr(GsApp) app = NULL;
+ g_autoptr(GError) error_local = NULL;
+
app = gs_flatpak_ref_to_app (flatpak_tmp, ref, cancellable, &error_local);
if (app == NULL) {
g_debug ("%s", error_local->message);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/plugins/rpm-ostree/gs-plugin-rpm-ostree.c new/gnome-software-3.32.3/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
--- old/gnome-software-3.32.2/plugins/rpm-ostree/gs-plugin-rpm-ostree.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/plugins/rpm-ostree/gs-plugin-rpm-ostree.c 2019-05-24 21:51:51.000000000 +0200
@@ -1593,6 +1593,26 @@
return ret;
}
+static gchar **
+what_provides_decompose (gchar **values)
+{
+ GPtrArray *array = g_ptr_array_new ();
+
+ /* iter on each provide string, and wrap it with the Fedora prefix */
+ for (guint i = 0; values[i] != NULL; i++) {
+ g_ptr_array_add (array, g_strdup (values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("gstreamer0.10(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("gstreamer1(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("font(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("mimehandler(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("postscriptdriver(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("plasma4(%s)", values[i]));
+ g_ptr_array_add (array, g_strdup_printf ("plasma5(%s)", values[i]));
+ }
+ g_ptr_array_add (array, NULL);
+ return (gchar **) g_ptr_array_free (array, FALSE);
+}
+
gboolean
gs_plugin_add_search_what_provides (GsPlugin *plugin,
gchar **search,
@@ -1603,13 +1623,15 @@
GsPluginData *priv = gs_plugin_get_data (plugin);
g_autoptr(GMutexLocker) locker = NULL;
g_autoptr(GPtrArray) pkglist = NULL;
+ g_auto(GStrv) provides = NULL;
locker = g_mutex_locker_new (&priv->mutex);
if (priv->dnf_context == NULL)
return TRUE;
- pkglist = find_packages_by_provides (dnf_context_get_sack (priv->dnf_context), search);
+ provides = what_provides_decompose (search);
+ pkglist = find_packages_by_provides (dnf_context_get_sack (priv->dnf_context), provides);
for (guint i = 0; i < pkglist->len; i++) {
DnfPackage *pkg = g_ptr_array_index (pkglist, i);
g_autoptr(GsApp) app = NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/plugins/shell-extensions/gs-plugin-shell-extensions.c new/gnome-software-3.32.3/plugins/shell-extensions/gs-plugin-shell-extensions.c
--- old/gnome-software-3.32.2/plugins/shell-extensions/gs-plugin-shell-extensions.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/plugins/shell-extensions/gs-plugin-shell-extensions.c 2019-05-24 21:51:51.000000000 +0200
@@ -36,6 +36,7 @@
GsApp *cached_origin;
GSettings *settings;
XbSilo *silo;
+ GRWLock silo_lock;
};
typedef enum {
@@ -62,6 +63,10 @@
{
GsPluginData *priv = gs_plugin_alloc_data (plugin, sizeof(GsPluginData));
+ /* XbSilo needs external locking as we destroy the silo and build a new
+ * one when something changes */
+ g_rw_lock_init (&priv->silo_lock);
+
/* add source */
priv->cached_origin = gs_app_new (gs_plugin_get_name (plugin));
gs_app_set_kind (priv->cached_origin, AS_APP_KIND_SOURCE);
@@ -87,6 +92,7 @@
g_object_unref (priv->silo);
g_object_unref (priv->cached_origin);
g_object_unref (priv->settings);
+ g_rw_lock_clear (&priv->silo_lock);
}
void
@@ -413,6 +419,7 @@
const gchar *uuid;
g_autofree gchar *xpath = NULL;
g_autoptr(GError) error_local = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(XbNode) component = NULL;
/* repo not enabled */
@@ -446,9 +453,13 @@
gs_app_set_size_download (app, GS_APP_SIZE_UNKNOWABLE);
- /* find the component using the UUID */
+ /* check silo is valid */
if (!_check_silo (plugin, cancellable, error))
return FALSE;
+
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
+ /* find the component using the UUID */
xpath = g_strdup_printf ("components/component/custom/"
"value[@key='shell-extensions::uuid'][text()='%s']/../..",
uuid);
@@ -477,6 +488,7 @@
g_autofree gchar *xpath = NULL;
g_autoptr(GError) error_local = NULL;
g_autoptr(GPtrArray) components = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
/* repo not enabled */
if (!g_settings_get_boolean (priv->settings, "enable-shell-extensions-repo"))
@@ -491,6 +503,8 @@
if (id == NULL)
return TRUE;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
+
/* find all apps */
xpath = g_strdup_printf ("components/component/id[text()='%s']/..", id);
components = xb_silo_query (priv->silo, xpath, 0, &error_local);
@@ -726,9 +740,10 @@
/* parse each app */
for (guint i = 0; i < json_array_get_length (json_extensions_array); i++) {
- XbBuilderNode *component;
JsonNode *json_extension;
JsonObject *json_extension_obj;
+ g_autoptr(XbBuilderNode) component = NULL;
+
json_extension = json_array_get_element (json_extensions_array, i);
json_extension_obj = json_node_get_object (json_extension);
component = gs_plugin_shell_extensions_parse_app (plugin,
@@ -756,6 +771,7 @@
g_autofree gchar *fn = NULL;
g_autofree gchar *uri = NULL;
g_autoptr(GFile) file = NULL;
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GsApp) app_dl = gs_app_new (gs_plugin_get_name (plugin));
/* get cache filename */
@@ -788,8 +804,10 @@
}
/* be explicit */
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
if (priv->silo != NULL)
xb_silo_invalidate (priv->silo);
+
return TRUE;
}
@@ -802,16 +820,21 @@
g_autoptr(GError) error_local = NULL;
g_autoptr(GFile) blobfile = NULL;
g_autoptr(GFile) file = NULL;
+ g_autoptr(GRWLockReaderLocker) reader_locker = NULL;
+ g_autoptr(GRWLockWriterLocker) writer_locker = NULL;
g_autoptr(XbBuilder) builder = xb_builder_new ();
g_autoptr(XbBuilderSource) source = xb_builder_source_new ();
+ reader_locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
/* everything is okay */
if (priv->silo != NULL && xb_silo_is_valid (priv->silo)) {
g_debug ("silo already valid");
return TRUE;
}
+ g_clear_pointer (&reader_locker, g_rw_lock_reader_locker_free);
/* drat! silo needs regenerating */
+ writer_locker = g_rw_lock_writer_locker_new (&priv->silo_lock);
g_clear_object (&priv->silo);
/* verbose profiling */
@@ -883,11 +906,13 @@
GCancellable *cancellable, GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
if (!g_settings_get_boolean (priv->settings, "enable-shell-extensions-repo"))
return TRUE;
if (!_check_silo (plugin, cancellable, error))
return FALSE;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
if (!gs_appstream_search (plugin, priv->silo, values, list_tmp,
cancellable, error))
return FALSE;
@@ -901,11 +926,13 @@
GCancellable *cancellable, GError **error)
{
GsPluginData *priv = gs_plugin_get_data (plugin);
+ g_autoptr(GRWLockReaderLocker) locker = NULL;
g_autoptr(GsAppList) list_tmp = gs_app_list_new ();
if (!g_settings_get_boolean (priv->settings, "enable-shell-extensions-repo"))
return TRUE;
if (!_check_silo (plugin, cancellable, error))
return FALSE;
+ locker = g_rw_lock_reader_locker_new (&priv->silo_lock);
if (!gs_appstream_add_category_apps (plugin, priv->silo, category,
list_tmp, cancellable, error))
return FALSE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/src/gs-app-row.ui new/gnome-software-3.32.3/src/gs-app-row.ui
--- old/gnome-software-3.32.2/src/gs-app-row.ui 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/src/gs-app-row.ui 2019-05-24 21:51:52.000000000 +0200
@@ -71,7 +71,7 @@
<property name="xalign">0.0</property>
<property name="yalign">0.5</property>
<property name="ellipsize">end</property>
- <property name="label">▶</property>
+ <property name="label">→</property>
<style>
<class name="version-arrow-label"/>
</style>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/src/gs-details-page.c new/gnome-software-3.32.3/src/gs-details-page.c
--- old/gnome-software-3.32.2/src/gs-details-page.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/src/gs-details-page.c 2019-05-24 21:51:52.000000000 +0200
@@ -515,7 +515,6 @@
gs_screenshot_image_set_size (GS_SCREENSHOT_IMAGE (ssimg),
640,
48);
- gs_screenshot_image_set_use_desktop_background (GS_SCREENSHOT_IMAGE (ssimg), FALSE);
gs_screenshot_image_load_async (GS_SCREENSHOT_IMAGE (ssimg), NULL);
gtk_container_add (GTK_CONTAINER (self->box_details_screenshot_main), ssimg);
gtk_widget_set_visible (ssimg, TRUE);
@@ -1082,9 +1081,10 @@
pixbuf = gs_app_get_pixbuf (self->app);
if (pixbuf != NULL) {
gs_image_set_from_pixbuf (GTK_IMAGE (self->application_details_icon), pixbuf);
- gtk_widget_set_visible (self->application_details_icon, TRUE);
} else {
- gtk_widget_set_visible (self->application_details_icon, FALSE);
+ gtk_image_set_from_icon_name (GTK_IMAGE (self->application_details_icon),
+ "application-x-executable",
+ GTK_ICON_SIZE_DIALOG);
}
tmp = gs_app_get_url (self->app, AS_URL_KIND_HOMEPAGE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/src/gs-screenshot-image.c new/gnome-software-3.32.3/src/gs-screenshot-image.c
--- old/gnome-software-3.32.2/src/gs-screenshot-image.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/src/gs-screenshot-image.c 2019-05-24 21:51:52.000000000 +0200
@@ -11,12 +11,6 @@
#include
-#ifdef HAVE_GNOME_DESKTOP
-#define GNOME_DESKTOP_USE_UNSTABLE_API
-#include
-#include
-#endif
-
#include "gs-screenshot-image.h"
#include "gs-common.h"
@@ -35,7 +29,6 @@
SoupMessage *message;
gchar *filename;
const gchar *current_image;
- gboolean use_desktop_background;
guint width;
guint height;
guint scale;
@@ -66,91 +59,34 @@
ssimg->showing_image = FALSE;
}
-static GdkPixbuf *
-gs_screenshot_image_get_desktop_pixbuf (GsScreenshotImage *ssimg)
-{
-#ifdef HAVE_GNOME_DESKTOP
- g_autoptr(GnomeBG) bg = NULL;
- g_autoptr(GnomeDesktopThumbnailFactory) factory = NULL;
- g_autoptr(GSettings) settings = NULL;
-
- factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE);
- bg = gnome_bg_new ();
- settings = g_settings_new ("org.gnome.desktop.background");
- gnome_bg_load_from_preferences (bg, settings);
- return gnome_bg_create_thumbnail (bg, factory,
- gdk_screen_get_default (),
- (gint) ssimg->width,
- (gint) ssimg->height);
-#else
- return NULL;
-#endif
-}
-
-static gboolean
-gs_screenshot_image_use_desktop_background (GsScreenshotImage *ssimg, GdkPixbuf *pixbuf)
-{
- g_autoptr(AsImage) im = NULL;
-
- /* nothing to show, means no background mode */
- if (pixbuf == NULL)
- return FALSE;
- /* background mode explicitly disabled */
- if (!ssimg->use_desktop_background)
- return FALSE;
-
- /* use a temp AsImage */
- im = as_image_new ();
- as_image_set_pixbuf (im, pixbuf);
- return (as_image_get_alpha_flags (im) & AS_IMAGE_ALPHA_FLAG_INTERNAL) > 0;
-}
-
static void
as_screenshot_show_image (GsScreenshotImage *ssimg)
{
- g_autoptr(GdkPixbuf) pixbuf_bg = NULL;
g_autoptr(GdkPixbuf) pixbuf = NULL;
/* no need to composite */
if (ssimg->width == G_MAXUINT || ssimg->height == G_MAXUINT) {
- pixbuf_bg = gdk_pixbuf_new_from_file (ssimg->filename, NULL);
+ pixbuf = gdk_pixbuf_new_from_file (ssimg->filename, NULL);
} else {
/* this is always going to have alpha */
pixbuf = gdk_pixbuf_new_from_file_at_scale (ssimg->filename,
(gint) (ssimg->width * ssimg->scale),
(gint) (ssimg->height * ssimg->scale),
FALSE, NULL);
- if (pixbuf != NULL) {
- if (gs_screenshot_image_use_desktop_background (ssimg, pixbuf)) {
- pixbuf_bg = gs_screenshot_image_get_desktop_pixbuf (ssimg);
- if (pixbuf_bg == NULL) {
- pixbuf_bg = g_object_ref (pixbuf);
- } else {
- gdk_pixbuf_composite (pixbuf, pixbuf_bg,
- 0, 0,
- (gint) ssimg->width,
- (gint) ssimg->height,
- 0, 0, 1.0f, 1.0f,
- GDK_INTERP_NEAREST, 255);
- }
- } else {
- pixbuf_bg = g_object_ref (pixbuf);
- }
- }
}
/* show icon */
if (g_strcmp0 (ssimg->current_image, "image1") == 0) {
- if (pixbuf_bg != NULL) {
+ if (pixbuf != NULL) {
gs_image_set_from_pixbuf_with_scale (GTK_IMAGE (ssimg->image2),
- pixbuf_bg, (gint) ssimg->scale);
+ pixbuf, (gint) ssimg->scale);
}
gtk_stack_set_visible_child_name (GTK_STACK (ssimg->stack), "image2");
ssimg->current_image = "image2";
} else {
- if (pixbuf_bg != NULL) {
+ if (pixbuf != NULL) {
gs_image_set_from_pixbuf_with_scale (GTK_IMAGE (ssimg->image1),
- pixbuf_bg, (gint) ssimg->scale);
+ pixbuf, (gint) ssimg->scale);
}
gtk_stack_set_visible_child_name (GTK_STACK (ssimg->stack), "image1");
ssimg->current_image = "image1";
@@ -195,7 +131,7 @@
g_autoptr(AsImage) im = NULL;
gboolean ret;
const GPtrArray *images;
- g_autoptr(GError) local_error = NULL;
+ g_autoptr(GError) error_local = NULL;
g_autofree char *filename = NULL;
g_autofree char *size_dir = NULL;
g_autofree char *cache_kind = NULL;
@@ -239,7 +175,7 @@
cache_kind = g_build_filename ("screenshots", size_dir, NULL);
filename = gs_utils_get_cache_filename (cache_kind, basename,
GS_UTILS_CACHE_FLAG_WRITEABLE,
- &local_error);
+ &error_local);
if (filename == NULL) {
/* if we cannot get a cache filename, warn about that but do not
@@ -247,20 +183,20 @@
* operation */
g_warning ("Failed to get cache filename for counterpart "
"screenshot '%s' in folder '%s': %s", basename,
- cache_kind, local_error->message);
+ cache_kind, error_local->message);
return TRUE;
}
ret = as_image_save_filename (im, filename, width, height,
AS_IMAGE_SAVE_FLAG_PAD_16_9,
- &local_error);
+ &error_local);
if (!ret) {
/* if we cannot save this screenshot, warn about that but do not
* set a user's visible error because this is a complementary
* operation */
g_warning ("Failed to save screenshot '%s': %s", filename,
- local_error->message);
+ error_local->message);
}
return TRUE;
@@ -369,14 +305,6 @@
gtk_widget_set_size_request (ssimg->stack, (gint) width, (gint) height);
}
-void
-gs_screenshot_image_set_use_desktop_background (GsScreenshotImage *ssimg,
- gboolean use_desktop_background)
-{
- g_return_if_fail (GS_IS_SCREENSHOT_IMAGE (ssimg));
- ssimg->use_desktop_background = use_desktop_background;
-}
-
static gchar *
gs_screenshot_get_cachefn_for_url (const gchar *url)
{
@@ -592,7 +520,6 @@
{
AtkObject *accessible;
- ssimg->use_desktop_background = TRUE;
ssimg->settings = g_settings_new ("org.gnome.software");
ssimg->showing_image = FALSE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/src/gs-screenshot-image.h new/gnome-software-3.32.3/src/gs-screenshot-image.h
--- old/gnome-software-3.32.2/src/gs-screenshot-image.h 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/src/gs-screenshot-image.h 2019-05-24 21:51:52.000000000 +0200
@@ -28,9 +28,6 @@
void gs_screenshot_image_set_size (GsScreenshotImage *ssimg,
guint width,
guint height);
-void gs_screenshot_image_set_use_desktop_background
- (GsScreenshotImage *ssimg,
- gboolean use_desktop_background);
void gs_screenshot_image_load_async (GsScreenshotImage *ssimg,
GCancellable *cancellable);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gnome-software-3.32.2/src/gs-update-dialog.c new/gnome-software-3.32.3/src/gs-update-dialog.c
--- old/gnome-software-3.32.2/src/gs-update-dialog.c 2019-05-07 15:11:08.000000000 +0200
+++ new/gnome-software-3.32.3/src/gs-update-dialog.c 2019-05-24 21:51:52.000000000 +0200
@@ -355,7 +355,7 @@
/* have both */
if (version_current != NULL && version_update != NULL &&
g_strcmp0 (version_current, version_update) != 0) {
- return g_strdup_printf ("%s ▶ %s",
+ return g_strdup_printf ("%s → %s",
version_current,
version_update);
}