!11 Update to 42.2

From: @weijin-deng 
Reviewed-by: @zhang__3125 
Signed-off-by: @zhang__3125
This commit is contained in:
openeuler-ci-bot 2022-07-01 05:13:10 +00:00 committed by Gitee
commit 53210f7a3c
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
5 changed files with 111 additions and 318 deletions

View File

@ -1,271 +0,0 @@
From b3a50ee2d6b93980d1808599ba003e9afc4feae5 Mon Sep 17 00:00:00 2001
From: Kalev Lember <klember@redhat.com>
Date: Mon, 14 Sep 2020 12:07:30 +0200
Subject: [PATCH] Revert "packagekit: Avoid 600000 allocations when comparing
package IDs"
This broke packagekit updates.
https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1061
https://bodhi.fedoraproject.org/updates/FEDORA-2020-7f57486c95#comment-1621958
This reverts commit 955570e4a5d737a9a4f85860fd7e483158e130c4.
---
.../packagekit/gs-plugin-packagekit-refine.c | 12 +-
.../gs-plugin-packagekit-url-to-app.c | 6 +-
plugins/packagekit/packagekit-common.c | 149 ++++++------------
plugins/packagekit/packagekit-common.h | 3 +-
4 files changed, 54 insertions(+), 116 deletions(-)
diff --git a/plugins/packagekit/gs-plugin-packagekit-refine.c b/plugins/packagekit/gs-plugin-packagekit-refine.c
index 68f7eb6..97c70dd 100644
--- a/plugins/packagekit/gs-plugin-packagekit-refine.c
+++ b/plugins/packagekit/gs-plugin-packagekit-refine.c
@@ -345,7 +345,6 @@ gs_plugin_packagekit_refine_details2 (GsPlugin *plugin,
g_autoptr(GPtrArray) array = NULL;
g_autoptr(GPtrArray) package_ids = NULL;
g_autoptr(PkResults) results = NULL;
- g_autoptr(GHashTable) details_collection = NULL;
package_ids = g_ptr_array_new_with_free_func (g_free);
for (i = 0; i < gs_app_list_length (list); i++) {
@@ -375,17 +374,11 @@ gs_plugin_packagekit_refine_details2 (GsPlugin *plugin,
return FALSE;
}
- /* get the results and copy them into a hash table for fast lookups:
- * there are typically 400 to 700 elements in @array, and 100 to 200
- * elements in @list, each with 1 or 2 source IDs to look up (but
- * sometimes 200) */
- array = pk_results_get_details_array (results);
- details_collection = gs_plugin_packagekit_details_array_to_hash (array);
-
/* set the update details for the update */
+ array = pk_results_get_details_array (results);
for (i = 0; i < gs_app_list_length (list); i++) {
app = gs_app_list_index (list, i);
- gs_plugin_packagekit_refine_details_app (plugin, details_collection, app);
+ gs_plugin_packagekit_refine_details_app (plugin, array, app);
}
return TRUE;
diff --git a/plugins/packagekit/gs-plugin-packagekit-url-to-app.c b/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
index 0418920..7f566c7 100644
--- a/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
+++ b/plugins/packagekit/gs-plugin-packagekit-url-to-app.c
@@ -106,15 +106,11 @@ gs_plugin_url_to_app (GsPlugin *plugin,
details = pk_results_get_details_array (results);
if (packages->len >= 1) {
- g_autoptr(GHashTable) details_collection = NULL;
-
if (gs_app_get_local_file (app) != NULL)
return TRUE;
- details_collection = gs_plugin_packagekit_details_array_to_hash (details);
-
gs_plugin_packagekit_resolve_packages_app (plugin, packages, app);
- gs_plugin_packagekit_refine_details_app (plugin, details_collection, app);
+ gs_plugin_packagekit_refine_details_app (plugin, details, app);
gs_app_list_add (list, app);
} else {
diff --git a/plugins/packagekit/packagekit-common.c b/plugins/packagekit/packagekit-common.c
index ed77b34..6914dde 100644
--- a/plugins/packagekit/packagekit-common.c
+++ b/plugins/packagekit/packagekit-common.c
@@ -388,127 +388,78 @@ gs_plugin_packagekit_set_metadata_from_package (GsPlugin *plugin,
pk_package_get_summary (package));
}
-/* Hash functions which compare PkPackageIds on NAME, VERSION and ARCH, but not DATA.
- * This is because some backends do not append the origin.
+/*
+ * gs_pk_compare_ids:
*
- * Borrowing some implementation details from pk-package-id.c, a package
- * ID is a semicolon-separated list of NAME;[VERSION];[ARCH];[DATA],
- * so a comparison which ignores DATA is just a strncmp() up to and
- * including the final semicolon.
- *
- * Doing it this way means zero allocations, which allows the hash and
- * equality functions to be fast. This is important when dealing with
- * large refine() package lists.
- *
- * The hash and equality functions assume that the IDs they are passed are
- * valid. */
-static guint
-package_id_hash (gconstpointer key)
-{
- const gchar *package_id = key;
- gchar *no_data;
- gsize i, last_semicolon = 0;
-
- /* find the last semicolon, which starts the DATA section */
- for (i = 0; package_id[i] != '\0'; i++) {
- if (package_id[i] == ';')
- last_semicolon = i;
- }
-
- /* exit early if the DATA section was empty */
- if (last_semicolon + 1 == i)
- return g_str_hash (package_id);
-
- /* extract up to (and including) the last semicolon into a local string */
- no_data = g_alloca (last_semicolon + 2);
- memcpy (no_data, package_id, last_semicolon + 1);
- no_data[last_semicolon + 1] = '\0';
-
- return g_str_hash (no_data);
-}
-
+ * Do not compare the repo. Some backends do not append the origin.
+ */
static gboolean
-package_id_equal (gconstpointer a,
- gconstpointer b)
+gs_pk_compare_ids (const gchar *package_id1, const gchar *package_id2)
{
- const gchar *package_id_a = a;
- const gchar *package_id_b = b;
- gsize i, n_semicolons = 0;
-
- /* compare up to and including the last semicolon */
- for (i = 0; package_id_a[i] != '\0' && package_id_b[i] != '\0'; i++) {
- if (package_id_a[i] != package_id_b[i])
- return FALSE;
- if (package_id_a[i] == ';')
- n_semicolons++;
- if (n_semicolons == 4)
- return TRUE;
- }
-
- return package_id_a[i] == package_id_b[i];
-}
-
-GHashTable *
-gs_plugin_packagekit_details_array_to_hash (GPtrArray *array)
-{
- g_autoptr(GHashTable) details_collection = NULL;
-
- details_collection = g_hash_table_new_full (package_id_hash, package_id_equal,
- NULL, NULL);
-
- for (gsize i = 0; i < array->len; i++) {
- PkDetails *details = g_ptr_array_index (array, i);
- g_hash_table_insert (details_collection,
- pk_details_get_package_id (details),
- details);
- }
-
- return g_steal_pointer (&details_collection);
+ gboolean ret;
+ g_auto(GStrv) split1 = NULL;
+ g_auto(GStrv) split2 = NULL;
+
+ split1 = pk_package_id_split (package_id1);
+ if (split1 == NULL)
+ return FALSE;
+ split2 = pk_package_id_split (package_id2);
+ if (split2 == NULL)
+ return FALSE;
+ ret = (g_strcmp0 (split1[PK_PACKAGE_ID_NAME],
+ split2[PK_PACKAGE_ID_NAME]) == 0 &&
+ g_strcmp0 (split1[PK_PACKAGE_ID_VERSION],
+ split2[PK_PACKAGE_ID_VERSION]) == 0 &&
+ g_strcmp0 (split1[PK_PACKAGE_ID_ARCH],
+ split2[PK_PACKAGE_ID_ARCH]) == 0);
+ return ret;
}
void
gs_plugin_packagekit_refine_details_app (GsPlugin *plugin,
- GHashTable *details_collection,
+ GPtrArray *array,
GsApp *app)
{
GPtrArray *source_ids;
PkDetails *details;
const gchar *package_id;
+ guint i;
guint j;
guint64 size = 0;
- /* @source_ids can have as many as 200 elements (google-noto); typically
- * it has 1 or 2
- *
- * @details_collection is typically a large list of apps in the
- * repository, on the order of 400 or 700 apps */
source_ids = gs_app_get_source_ids (app);
for (j = 0; j < source_ids->len; j++) {
package_id = g_ptr_array_index (source_ids, j);
- details = g_hash_table_lookup (details_collection, package_id);
- if (details == NULL)
- continue;
-
- if (gs_app_get_license (app) == NULL) {
- g_autofree gchar *license_spdx = NULL;
- license_spdx = as_utils_license_to_spdx (pk_details_get_license (details));
- if (license_spdx != NULL) {
- gs_app_set_license (app,
- GS_APP_QUALITY_LOWEST,
- license_spdx);
+ for (i = 0; i < array->len; i++) {
+ /* right package? */
+ details = g_ptr_array_index (array, i);
+ if (!gs_pk_compare_ids (package_id,
+ pk_details_get_package_id (details))) {
+ continue;
}
+ if (gs_app_get_license (app) == NULL) {
+ g_autofree gchar *license_spdx = NULL;
+ license_spdx = as_utils_license_to_spdx (pk_details_get_license (details));
+ if (license_spdx != NULL) {
+ gs_app_set_license (app,
+ GS_APP_QUALITY_LOWEST,
+ license_spdx);
+ }
+ }
+ if (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE) == NULL) {
+ gs_app_set_url (app,
+ AS_URL_KIND_HOMEPAGE,
+ pk_details_get_url (details));
+ }
+ if (gs_app_get_description (app) == NULL) {
+ gs_app_set_description (app,
+ GS_APP_QUALITY_LOWEST,
+ pk_details_get_description (details));
+ }
+ size += pk_details_get_size (details);
+ break;
+
}
- if (gs_app_get_url (app, AS_URL_KIND_HOMEPAGE) == NULL) {
- gs_app_set_url (app,
- AS_URL_KIND_HOMEPAGE,
- pk_details_get_url (details));
- }
- if (gs_app_get_description (app) == NULL) {
- gs_app_set_description (app,
- GS_APP_QUALITY_LOWEST,
- pk_details_get_description (details));
- }
- size += pk_details_get_size (details);
}
/* the size is the size of all sources */
diff --git a/plugins/packagekit/packagekit-common.h b/plugins/packagekit/packagekit-common.h
index 9f52368..0742ea3 100644
--- a/plugins/packagekit/packagekit-common.h
+++ b/plugins/packagekit/packagekit-common.h
@@ -30,9 +30,8 @@ void gs_plugin_packagekit_resolve_packages_app (GsPlugin *plugin,
void gs_plugin_packagekit_set_metadata_from_package (GsPlugin *plugin,
GsApp *app,
PkPackage *package);
-GHashTable * gs_plugin_packagekit_details_array_to_hash (GPtrArray *array);
void gs_plugin_packagekit_refine_details_app (GsPlugin *plugin,
- GHashTable *details_collection,
+ GPtrArray *array,
GsApp *app);
void gs_plugin_packagekit_set_packaging_format (GsPlugin *plugin,
GsApp *app);

View File

@ -0,0 +1,38 @@
Subject: [PATCH] gs-feature-tile: Do not abort when the theme is broken
Just print a warning when the theme doesn't provide 'theme_fg_color' and
fallback to black color.
Closes https://gitlab.gnome.org/GNOME/gnome-software/-/issues/1228
diff -up gnome-software-42.rc/src/gs-feature-tile.c.1 gnome-software-42.rc/src/gs-feature-tile.c
--- gnome-software-42.rc/src/gs-feature-tile.c.1 2022-03-04 16:23:58.566735700 +0100
+++ gnome-software-42.rc/src/gs-feature-tile.c 2022-03-07 08:06:29.046595524 +0100
@@ -411,7 +411,6 @@ gs_feature_tile_refresh (GsAppTile *self
if (key_colors != tile->key_colors_cache) {
g_autoptr(GArray) colors = NULL;
GdkRGBA fg_rgba;
- gboolean fg_rgba_valid;
GsHSBC fg_hsbc;
const GsHSBC *chosen_hsbc;
GsHSBC chosen_hsbc_modified;
@@ -429,8 +428,17 @@ gs_feature_tile_refresh (GsAppTile *self
* @min_abs_contrast contrast with the foreground, so
* that the text is legible.
*/
- fg_rgba_valid = gtk_style_context_lookup_color (context, "theme_fg_color", &fg_rgba);
- g_assert (fg_rgba_valid);
+ if (!gtk_style_context_lookup_color (context, "theme_fg_color", &fg_rgba)) {
+ static gboolean i_know = FALSE;
+ if (!i_know) {
+ i_know = TRUE;
+ g_warning ("The theme doesn't provide 'theme_fg_color', fallbacking to black");
+ }
+ fg_rgba.red = 0.0;
+ fg_rgba.green = 0.0;
+ fg_rgba.blue = 0.0;
+ fg_rgba.alpha = 1.0;
+ }
gtk_rgb_to_hsv (fg_rgba.red, fg_rgba.green, fg_rgba.blue,
&fg_hsbc.hue, &fg_hsbc.saturation, &fg_hsbc.brightness);

Binary file not shown.

BIN
gnome-software-42.2.tar.xz Normal file

Binary file not shown.

View File

@ -1,29 +1,59 @@
%global appstream_version 0.14.0
%global libadwaita_version 1.0.1
%global libxmlb_version 0.1.7
%global glib2_version 2.61.1
%global gtk4_version 4.4.0
%global json_glib_version 1.2.0
%global libsoup_version 2.52.0
%global packagekit_version 1.1.1
%global fwupd_version 1.3.3
%global flatpak_version 1.5.1
Name: gnome-software
Version: 3.38.2
Release: 2
Version: 42.2
Release: 1
Summary: GNOME software Store
License: GPLv2+
URL: https://wiki.gnome.org/Apps/Software
Source0: https://download.gnome.org/sources/gnome-software/3.38/gnome-software-%{version}.tar.xz
Patch0001: 0001-Revert-packagekit-Avoid-600000-allocations-when-comp.patch
Source0: https://download.gnome.org/sources/gnome-software/42/%{name}-%{version}.tar.xz
Patch01: 0001-crash-with-broken-theme.patch
BuildRequires: gettext libxslt docbook-style-xsl desktop-file-utils
BuildRequires: fwupd-devel >= 1.0.3 glib2-devel >= 2.61.1 gnome-desktop3-devel
BuildRequires: gsettings-desktop-schemas-devel >= 3.12.0 gnome-online-accounts-devel
BuildRequires: gspell-devel gtk3-devel >= 3.22.4 gtk-doc json-glib-devel >= 1.2.0
BuildRequires: libappstream-glib-devel >= 0.7.14-3 libdnf-devel libsoup-devel meson
BuildRequires: PackageKit-glib-devel >= 1.1.1 polkit-devel libxmlb-devel >= 0.1.7
BuildRequires: flatpak-devel >= 1.5.1 ostree-devel rpm-ostree-devel
BuildRequires: gettext libxslt docbook-style-xsl desktop-file-utils gtk-doc
BuildRequires: gnome-desktop3-devel gspell-devel polkit-devel ostree-devel rpm-ostree-devel
BuildRequires: gsettings-desktop-schemas-devel gnome-online-accounts-devel
BuildRequires: libappstream-glib-devel >= 0.7.14-3 libdnf-devel libsoup-devel
BuildRequires: libgudev1-devel valgrind-devel rpm-devel sysprof-devel
BuildRequires: gcc gcc-c++
BuildRequires: gcc gcc-c++ meson appstream-devel
BuildRequires: pkgconfig(gtk4) >= %{gtk4_version}
BuildRequires: fwupd-devel >= %{fwupd_version}
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: json-glib-devel >= %{json_glib_version}
BuildRequires: pkgconfig(libadwaita-1) >= %{libadwaita_version}
BuildRequires: libxmlb-devel >= %{libxmlb_version}
BuildRequires: PackageKit-glib-devel >= %{packagekit_version}
BuildRequires: flatpak-devel >= %{flatpak_version}
#BuildRequires: sysprof-capture-devel
#BuildRequires: malcontent-devel
#BuildRequires: malcontent-ui-devel
Requires: epiphany-runtime
Requires: flatpak >= 1.5.1 flatpak-libs >= 1.5.1 fwupd >= 1.0.3 glib2 >= 2.61.0
Requires: gnome-desktop3 >= 3.18.0 gnome-menus gsettings-desktop-schemas >= 3.12.0
Requires: gtk3 >= 3.22.4 json-glib >= 1.2.0 iso-codes libappstream-glib >= 0.7.14-3
Requires: librsvg2 libsoup >= 2.52.0 PackageKit >= 1.1.1 snapd-login-service
Requires: flatpak%{?_isa} >= %{flatpak_version}
Requires: flatpak-libs >= %{flatpak_version}
Requires: fwupd%{?_isa} >= %{fwupd_version}
Requires: glib2%{?_isa} >= %{glib2_version}
Requires: json-glib%{?_isa} >= %{json_glib_version}
Requires: libsoup%{?_isa} >= %{libsoup_version}
Requires: libxmlb%{?_isa} >= %{libxmlb_version}
Requires: PackageKit%{?_isa} >= %{packagekit_version}
Requires: gnome-desktop3 >= 3.18.0 gnome-menus gsettings-desktop-schemas
Requires: gtk3 >= 3.22.4 iso-codes libappstream-glib >= 0.7.14-3
Requires: librsvg2 snapd-login-service
Requires: rpm-ostree%{?_isa}
Provides: gnome-software-snap = %{version}-%{release}
Provides: gnome-software-editor = %{version}-%{release}
Obsoletes: gnome-software-snap < %{version}-%{release}
Obsoletes: gnome-software-editor < 3.35.1
Supplements: (gnome-software%{?_isa} and rpm-ostree%{?_isa})
%description
AppStore like management of Application fir your GNOME Desktop.
@ -34,30 +64,28 @@ Requires: gnome-software = %{version}-%{release}
%description devel
This subpackage contains the header files for developing GNOME software store plugins.
%package help
Summary: Help documentation for the GNOME software store.
%description help
Help documentation for the GNOME software store.
%package editor
Summary: Editor for designing banners for GNOME Software
Requires: gnome-software = %{version}-%{release}
%description editor
Editor is used to design banners for GNOME Software.
%package_help
%prep
%autosetup -n gnome-software-%{version} -p1
%build
%meson -Dsnap=false -Dgudev=true -Dpackagekit=true -Dexternal_appstream=false -Drpm_ostree=false \
-Dtests=false -Dmalcontent=false
%meson \
-Dsnap=false \
-Dgudev=true \
-Dpackagekit=true \
-Dpackagekit_autoremove=true \
-Dexternal_appstream=false \
-Drpm_ostree=true \
-Dsoup2=true \
-Dtests=false \
-Dmalcontent=false
%meson_build
%install
%meson_install
desktop-file-edit %{buildroot}%{_datadir}/applications/org.gnome.Software.desktop \
--set-key=X-AppInstall-Package --set-value=gnome-software
--set-key=X-AppInstall-Package --set-value=%{name}
install -d %{buildroot}%{_datadir}/gnome-software/backgrounds
%delete_la_and_a
@ -68,42 +96,40 @@ install -d %{buildroot}%{_datadir}/gnome-software/backgrounds
desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
%files -f gnome-software.lang
%doc AUTHORS README.md COPYING
%license COPYING
%{_bindir}/gnome-software
%{_datadir}/applications/gnome-software-local-file.desktop
%{_datadir}/applications/org.gnome.Software.desktop
%dir %{_datadir}/gnome-software
%{_datadir}/icons/hicolor/*
%{_datadir}/icons/hicolor/*/*/*.svg
%{_datadir}/gnome-software/backgrounds/
%{_datadir}/gnome-software/{*.png,featured-*.svg,featured-*.jpg}
%{_datadir}/metainfo/*.xml
%dir %{_libdir}/gs-plugins-13
%{_libdir}/gs-plugins-13/*.so
%{_sysconfdir}/xdg/autostart/gnome-software-service.desktop
%{_datadir}/app-info/xmls/org.gnome.Software.Featured.xml
%{_libdir}/gnome-software/plugins-18/*.so
%{_libdir}/gnome-software/libgnomesoftware.so.18
%{_sysconfdir}/xdg/autostart/org.gnome.Software.desktop
%{_datadir}/swcatalog/xml/org.gnome.Software.Popular.xml
%{_datadir}/swcatalog/xml/org.gnome.Software.Featured.xml
%{_datadir}/dbus-1/services/org.freedesktop.PackageKit.service
%{_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
%{_libexecdir}/{gnome-software-cmd,gnome-software-restarter}
#%{_libdir}/gs-plugins-12/libgs_plugin_snap.so
#%{_datadir}/metainfo/org.gnome.Software.Plugin.Snap.metainfo.xml
%files devel
%{_libdir}/gnome-software/libgnomesoftware.so
%{_libdir}/pkgconfig/gnome-software.pc
%dir %{_includedir}/gnome-software
%{_includedir}/gnome-software/*.h
%dir %{_datadir}/doc/gnome-software
%{_datadir}/gtk-doc/html/gnome-software
%files help
#%{_mandir}/man1/gnome-software-editor.1*
%{_mandir}/man1/gnome-software.1.gz
%files editor
#%{_bindir}/gnome-software-editor
#%{_datadir}/applications/org.gnome.Software.Editor.desktop
%doc AUTHORS README.md
%{_datadir}/doc/gnome-software/README.md
%{_mandir}/man1/gnome-software.1.*
%changelog
* Tue Jun 28 2022 weijin deng <weijin.deng@turbolinux.com.cn> - 42.2-1
- Update to 42.2
* Tue Mar 8 2022 weijin deng <weijin.deng@turbolinux.com.cn> - 3.38.2-2
- Remove requires "appstream-data" whose repository isn't completely open and free