diff --git a/0001-Revert-packagekit-Avoid-600000-allocations-when-comp.patch b/0001-Revert-packagekit-Avoid-600000-allocations-when-comp.patch deleted file mode 100644 index 941266f..0000000 --- a/0001-Revert-packagekit-Avoid-600000-allocations-when-comp.patch +++ /dev/null @@ -1,271 +0,0 @@ -From b3a50ee2d6b93980d1808599ba003e9afc4feae5 Mon Sep 17 00:00:00 2001 -From: Kalev Lember -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); diff --git a/0001-crash-with-broken-theme.patch b/0001-crash-with-broken-theme.patch new file mode 100644 index 0000000..ddbef4a --- /dev/null +++ b/0001-crash-with-broken-theme.patch @@ -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); diff --git a/gnome-software-3.38.2.tar.xz b/gnome-software-3.38.2.tar.xz deleted file mode 100644 index b1497e1..0000000 Binary files a/gnome-software-3.38.2.tar.xz and /dev/null differ diff --git a/gnome-software-42.2.tar.xz b/gnome-software-42.2.tar.xz new file mode 100644 index 0000000..47677dd Binary files /dev/null and b/gnome-software-42.2.tar.xz differ diff --git a/gnome-software.spec b/gnome-software.spec index 2ef7b57..1b73763 100644 --- a/gnome-software.spec +++ b/gnome-software.spec @@ -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 - 42.2-1 +- Update to 42.2 + * Tue Mar 8 2022 weijin deng - 3.38.2-2 - Remove requires "appstream-data" whose repository isn't completely open and free