diff --git a/.gitignore b/.gitignore index 376e4ca..7c848a3 100644 --- a/.gitignore +++ b/.gitignore @@ -111,3 +111,9 @@ /gnome-software-3.35.92.tar.xz /gnome-software-3.36.0.tar.xz /gnome-software-3.36.1.tar.xz +/gnome-software-3.37.92.tar.xz +/gnome-software-3.38.0.tar.xz +/gnome-software-3.38.1.tar.xz +/gnome-software-3.38.2.tar.xz +/f34.png +/f35.png diff --git a/0001-Revert-packagekit-Avoid-600000-allocations-when-comp.patch b/0001-Revert-packagekit-Avoid-600000-allocations-when-comp.patch new file mode 100644 index 0000000..0d293bb --- /dev/null +++ b/0001-Revert-packagekit-Avoid-600000-allocations-when-comp.patch @@ -0,0 +1,274 @@ +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 68f7eb64..813390b1 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,19 +374,12 @@ 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 04189204..7f566c72 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 495960dd..9367f5bf 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 n_semicolons = 0; +- +- /* compare up to and including the last semicolon */ +- for (gsize 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; +- } ++ gboolean ret; ++ g_auto(GStrv) split1 = NULL; ++ g_auto(GStrv) split2 = NULL; + +- return FALSE; ++ 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; + } + +-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); +-} + + 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 9f523684..0742ea3a 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); +-- +2.26.2 + diff --git a/0001-fedora-linux-distro-name.patch b/0001-fedora-linux-distro-name.patch new file mode 100644 index 0000000..e8fb659 --- /dev/null +++ b/0001-fedora-linux-distro-name.patch @@ -0,0 +1,14 @@ +diff -up gnome-software-3.38.2/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c.fedora-linux-distro-name gnome-software-3.38.2/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c +--- gnome-software-3.38.2/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c.fedora-linux-distro-name 2021-09-01 11:16:33.570032158 +0200 ++++ gnome-software-3.38.2/plugins/fedora-pkgdb-collections/gs-plugin-fedora-pkgdb-collections.c 2021-09-01 11:18:08.091022774 +0200 +@@ -319,7 +319,9 @@ _is_valid_upgrade (GsPlugin *plugin, Pkg + GsPluginData *priv = gs_plugin_get_data (plugin); + + /* only interested in upgrades to the same distro */ +- if (g_strcmp0 (item->name, priv->os_name) != 0) ++ if (g_strcmp0 (item->name, priv->os_name) != 0 && ++ /* Fedora 35+ is renamed to "Fedora Linux" and there is no "id" in the collections/ yet */ ++ g_strcmp0 (item->name, "Fedora Linux") != 0) + return FALSE; + + /* only interested in newer versions, but not more than N+2 */ diff --git a/gnome-software.spec b/gnome-software.spec index 1a95e6b..706e3cc 100644 --- a/gnome-software.spec +++ b/gnome-software.spec @@ -1,23 +1,28 @@ +%global appstream_glib_version 0.7.15 +%global libxmlb_version 0.1.7 %global glib2_version 2.61.1 %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.15 %global libsoup_version 2.52.0 -%global gsettings_desktop_schemas_version 3.12.0 %global gnome_desktop_version 3.18.0 +%global packagekit_version 1.1.1 %global fwupd_version 1.3.3 %global flatpak_version 1.5.1 -%global libxmlb_version 0.1.7 Name: gnome-software -Version: 3.36.1 -Release: 3%{?dist} +Version: 3.38.2 +Release: 4%{?dist} Summary: A software center for GNOME License: GPLv2+ URL: https://wiki.gnome.org/Apps/Software -Source0: https://download.gnome.org/sources/gnome-software/3.36/%{name}-%{version}.tar.xz +Source0: https://download.gnome.org/sources/gnome-software/3.38/%{name}-%{version}.tar.xz +# Resized and cropped /usr/share/backgrounds/f34/default/f34.png from f34-backgrounds-base +Source1: f34.png +# Resized and cropped /usr/share/backgrounds/f35/default/f35.png from f35-backgrounds-base +Source2: f35.png + +Patch01: 0001-fedora-linux-distro-name.patch BuildRequires: gcc BuildRequires: gettext @@ -28,7 +33,7 @@ BuildRequires: fwupd-devel >= %{fwupd_version} BuildRequires: glib2-devel >= %{glib2_version} BuildRequires: gnome-desktop3-devel BuildRequires: gnome-online-accounts-devel -BuildRequires: gsettings-desktop-schemas-devel >= %{gsettings_desktop_schemas_version} +BuildRequires: gsettings-desktop-schemas-devel BuildRequires: gspell-devel BuildRequires: gtk3-devel >= %{gtk3_version} BuildRequires: gtk-doc @@ -45,6 +50,7 @@ BuildRequires: ostree-devel BuildRequires: rpm-devel BuildRequires: rpm-ostree-devel BuildRequires: libgudev1-devel +BuildRequires: sysprof-devel BuildRequires: valgrind-devel Requires: appstream-data @@ -55,7 +61,7 @@ Requires: glib2%{?_isa} >= %{glib2_version} 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} >= %{gsettings_desktop_schemas_version} +Requires: gsettings-desktop-schemas%{?_isa} Requires: gtk3%{?_isa} >= %{gtk3_version} Requires: json-glib%{?_isa} >= %{json_glib_version} Requires: iso-codes @@ -117,6 +123,9 @@ This package includes the rpm-ostree backend. # remove unneeded dpkg plugin rm %{buildroot}%{_libdir}/gs-plugins-%{gs_plugin_version}/libgs_plugin_dpkg.so +# remove unneeded static library +rm %{buildroot}%{_libdir}/libgnomesoftware.a + # make the software center load faster desktop-file-edit %{buildroot}%{_datadir}/applications/org.gnome.Software.desktop \ --set-key=X-AppInstall-Package --set-value=%{name} @@ -127,6 +136,11 @@ cat >> %{buildroot}%{_datadir}/glib-2.0/schemas/org.gnome.software-fedora.gschem 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' ] 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 @@ -144,6 +158,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_datadir}/icons/hicolor/*/apps/org.gnome.Software.svg %{_datadir}/icons/hicolor/symbolic/apps/org.gnome.Software-symbolic.svg %{_datadir}/icons/hicolor/scalable/status/software-installed-symbolic.svg +%{_datadir}/gnome-software/backgrounds/ %{_datadir}/gnome-software/featured-*.svg %{_datadir}/gnome-software/featured-*.jpg %{_datadir}/metainfo/org.gnome.Software.appdata.xml @@ -160,7 +175,7 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_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-blocklist.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 @@ -203,6 +218,36 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop %{_datadir}/gtk-doc/html/gnome-software %changelog +* Fri Oct 01 2021 Milan Crha - 3.38.2-4 +- Update artwork for F35 upgrades + +* Wed Sep 01 2021 Milan Crha - 3.38.2-3 +- Add artwork for F35 upgrades +- Add patch to recognize 'Fedora Linux' upgrades + +* Wed Apr 28 2021 Milan Crha - 3.38.2-2 +- Add artwork for F34 upgrades + +* Thu Mar 11 2021 Kalev Lember - 3.38.2-1 +- Update to 3.38.2 + +* Mon Feb 08 2021 Richard Hughes - 3.38.1-1 +- New upstream version +- Fix package details not found for some packages +- Ignore harmless warnings when using unusual fwupd versions + +* Mon Sep 14 2020 Kalev Lember - 3.38.0-2 +- Revert an optimization that broke packagekit updates + +* Fri Sep 11 2020 Kalev Lember - 3.38.0-1 +- Update to 3.38.0 + +* Tue Sep 01 2020 Kalev Lember - 3.37.92-1 +- Update to 3.37.92 + +* Tue Aug 18 2020 Richard Hughes - 3.36.1-4 +- Rebuild for the libxmlb API bump. + * Sat Aug 01 2020 Fedora Release Engineering - 3.36.1-3 - Second attempt - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/sources b/sources index 27810b5..58e219d 100644 --- a/sources +++ b/sources @@ -1 +1,3 @@ -SHA512 (gnome-software-3.36.1.tar.xz) = 7d0e8c16192bbbc8f166db137dbd2e6ff9e85f7d3d37f63f41211ba3838e392bd87a8d9bf09d31b43f6d21e1a099ecdeff9114ae27fae40d563671f0bcbe50d4 +SHA512 (gnome-software-3.38.2.tar.xz) = f14f84cfb7cfce4d9d09d4d4053e8bcbc281aa2045e8d231f7c3bad9a9433334d91d6d93f787533ddf02a4161b808b8657d0301fd8bdca3f2d81da8c9b52518d +SHA512 (f34.png) = c332c7a0d7aa3f8868ec9b6ce1312a9c791c44fe0fdf3ca9ccf93b14cc0a35103c8d2cb154fa23363f3ffc81f060bd8cb454c9384ed0641b52ab7b3b5de6cc24 +SHA512 (f35.png) = 371d301263015ce9edd2605aa893788632226e9e4c66b10b5c9f509ed47d5c945dbb51ee8c2bf01dbf56c1f9180227bef1b8566347ae6e02245453118c4d47a8