Update to 3.28.1
This commit is contained in:
parent
62fcf143d1
commit
ac1bbf92f0
1
.gitignore
vendored
1
.gitignore
vendored
@ -89,3 +89,4 @@
|
||||
/gnome-software-3.27.90.tar.xz
|
||||
/gnome-software-3.27.92.tar.xz
|
||||
/gnome-software-3.28.0.tar.xz
|
||||
/gnome-software-3.28.1.tar.xz
|
||||
|
@ -1,52 +0,0 @@
|
||||
From 2a0f56590f4c86550c8603e1de5a97e57426ff2a Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Tue, 13 Mar 2018 13:08:39 +0100
|
||||
Subject: [PATCH] Revert "Revert "trivial: Use new libappstream-glib to build
|
||||
the ID""
|
||||
|
||||
We've now fixed the appstream generator to match the generated ID in
|
||||
https://github.com/hughsie/appstream-glib/commit/1f7ff84a04c227bccb60c76f461f3dccbe372f7a
|
||||
|
||||
This reverts commit c9dbd646c3f7d23699685f320baefcb12198298f.
|
||||
---
|
||||
plugins/shell-extensions/gs-plugin-shell-extensions.c | 10 ++--------
|
||||
1 file changed, 2 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/plugins/shell-extensions/gs-plugin-shell-extensions.c b/plugins/shell-extensions/gs-plugin-shell-extensions.c
|
||||
index 8edee560b904..f55eb2fbc5e8 100644
|
||||
--- a/plugins/shell-extensions/gs-plugin-shell-extensions.c
|
||||
+++ b/plugins/shell-extensions/gs-plugin-shell-extensions.c
|
||||
@@ -105,12 +105,6 @@ gs_plugin_adopt_app (GsPlugin *plugin, GsApp *app)
|
||||
}
|
||||
}
|
||||
|
||||
-static gchar *
|
||||
-gs_plugin_shell_extensions_id_from_uuid (const gchar *uuid)
|
||||
-{
|
||||
- return g_strdup_printf ("%s.shell-extension", uuid);
|
||||
-}
|
||||
-
|
||||
static AsAppState
|
||||
gs_plugin_shell_extensions_convert_state (guint value)
|
||||
{
|
||||
@@ -143,7 +137,7 @@ gs_plugin_shell_extensions_parse_installed (GsPlugin *plugin,
|
||||
g_autoptr(AsIcon) ic = NULL;
|
||||
g_autoptr(GsApp) app = NULL;
|
||||
|
||||
- id = gs_plugin_shell_extensions_id_from_uuid (uuid);
|
||||
+ id = as_utils_appstream_id_build (uuid);
|
||||
app = gs_app_new (id);
|
||||
gs_app_set_metadata (app, "GnomeSoftware::Creator",
|
||||
gs_plugin_get_name (plugin));
|
||||
@@ -540,7 +534,7 @@ gs_plugin_shell_extensions_parse_app (GsPlugin *plugin,
|
||||
tmp = json_object_get_string_member (json_app, "uuid");
|
||||
if (tmp != NULL) {
|
||||
g_autofree gchar *id = NULL;
|
||||
- id = gs_plugin_shell_extensions_id_from_uuid (tmp);
|
||||
+ id = as_utils_appstream_id_build (tmp);
|
||||
as_app_set_id (app, id);
|
||||
as_app_add_metadata (app, "shell-extensions::uuid", tmp);
|
||||
}
|
||||
--
|
||||
2.16.2
|
||||
|
@ -1,53 +1,3 @@
|
||||
From 047a077a0ac308fabe002ad3099b8e1f2f24eccd Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 15 Mar 2018 11:23:52 +0100
|
||||
Subject: [PATCH] appstream: Don't compare appstream origin to package origin
|
||||
|
||||
Use new as_utils_unique_id_match() from appstream-glib 0.7.8 to ignore
|
||||
origin when matching AsApp to GsApp. In Fedora, we have all of system
|
||||
appstream coming from system-installed appstream-data package that has
|
||||
origin "fedora", but actual packages come from e.g. "updates-testing"
|
||||
which doesn't match up.
|
||||
---
|
||||
plugins/core/gs-plugin-appstream.c | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/plugins/core/gs-plugin-appstream.c b/plugins/core/gs-plugin-appstream.c
|
||||
index 9ca091112231..3cd95c586eae 100644
|
||||
--- a/plugins/core/gs-plugin-appstream.c
|
||||
+++ b/plugins/core/gs-plugin-appstream.c
|
||||
@@ -527,11 +527,28 @@ gs_plugin_refine_wildcard (GsPlugin *plugin,
|
||||
g_autoptr(GsApp) new = NULL;
|
||||
|
||||
/* is compatible */
|
||||
+#if AS_CHECK_VERSION(0,7,8)
|
||||
+ if (!as_utils_unique_id_match (gs_app_get_unique_id (app),
|
||||
+ as_app_get_unique_id (item),
|
||||
+ AS_UNIQUE_ID_MATCH_FLAG_SCOPE |
|
||||
+ AS_UNIQUE_ID_MATCH_FLAG_BUNDLE_KIND |
|
||||
+ /* don't match origin as AsApp appstream
|
||||
+ * origin can differ from package origin */
|
||||
+ AS_UNIQUE_ID_MATCH_FLAG_KIND |
|
||||
+ AS_UNIQUE_ID_MATCH_FLAG_ID |
|
||||
+ AS_UNIQUE_ID_MATCH_FLAG_BRANCH)) {
|
||||
+ g_debug ("does not match unique ID constraints: %s, %s",
|
||||
+ gs_app_get_unique_id (app),
|
||||
+ as_app_get_unique_id (item));
|
||||
+ continue;
|
||||
+ }
|
||||
+#else
|
||||
if (!as_utils_unique_id_equal (gs_app_get_unique_id (app),
|
||||
as_app_get_unique_id (item))) {
|
||||
g_debug ("does not match unique ID constraints");
|
||||
continue;
|
||||
}
|
||||
+#endif
|
||||
|
||||
/* does the app have an installation method */
|
||||
if (as_app_get_pkgname_default (item) == NULL &&
|
||||
--
|
||||
2.16.2
|
||||
|
||||
diff --git a/plugins/core/gs-plugin-appstream.c b/plugins/core/gs-plugin-appstream.c
|
||||
index 3cd95c586eae..8e558824caca 100644
|
||||
--- a/plugins/core/gs-plugin-appstream.c
|
||||
|
@ -1,30 +0,0 @@
|
||||
From 5b24280921bee7fd7ad045641fe7afecf39d8130 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Tue, 13 Mar 2018 22:22:27 +0100
|
||||
Subject: [PATCH] plugin loader: Don't abort() for refine errors
|
||||
|
||||
When refining a wildcard app fails, don't abort(), but instead warn and
|
||||
return NULL. Refining can fail legitimately, e.g. when there's no
|
||||
network access to refine a system app with pkgdb data.
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1554986
|
||||
---
|
||||
lib/gs-plugin-loader.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/lib/gs-plugin-loader.c b/lib/gs-plugin-loader.c
|
||||
index 55d8dde837a5..6e956b82acad 100644
|
||||
--- a/lib/gs-plugin-loader.c
|
||||
+++ b/lib/gs-plugin-loader.c
|
||||
@@ -3749,7 +3749,7 @@ gs_plugin_loader_app_create (GsPluginLoader *plugin_loader, const gchar *unique_
|
||||
plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE, NULL);
|
||||
helper = gs_plugin_loader_helper_new (plugin_loader, plugin_job);
|
||||
if (!gs_plugin_loader_run_refine (helper, list, NULL, &error)) {
|
||||
- g_error ("%s", error->message);
|
||||
+ g_warning ("%s", error->message);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
--
|
||||
2.16.2
|
||||
|
@ -1,290 +0,0 @@
|
||||
From c5cc2dc34fab191e9b40097fd1e53a84f3a47177 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Wed, 21 Mar 2018 09:48:22 +0100
|
||||
Subject: [PATCH 1/9] generic updates: Don't put wildcard apps in the os update
|
||||
object
|
||||
|
||||
Wildcard apps are filtered from the updates list after refine() and we
|
||||
may end up with an empty OsUpdate object if we add wildcard apps to it
|
||||
and there are no other updates.
|
||||
|
||||
Fixes: https://gitlab.gnome.org/GNOME/gnome-software/issues/332
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1558754
|
||||
---
|
||||
plugins/core/gs-plugin-generic-updates.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/plugins/core/gs-plugin-generic-updates.c b/plugins/core/gs-plugin-generic-updates.c
|
||||
index 2fc805b7f157..733983a2929c 100644
|
||||
--- a/plugins/core/gs-plugin-generic-updates.c
|
||||
+++ b/plugins/core/gs-plugin-generic-updates.c
|
||||
@@ -96,6 +96,8 @@ gs_plugin_refine (GsPlugin *plugin,
|
||||
/* do we have any packages left that are not apps? */
|
||||
for (guint i = 0; i < gs_app_list_length (list); i++) {
|
||||
GsApp *app_tmp = gs_app_list_index (list, i);
|
||||
+ if (gs_app_has_quirk (app_tmp, AS_APP_QUIRK_MATCH_ANY_PREFIX))
|
||||
+ continue;
|
||||
if (gs_plugin_generic_updates_merge_os_update (app_tmp))
|
||||
gs_app_list_add (os_updates, app_tmp);
|
||||
}
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From d2fd28a7d86b1c7f379e1ebcf105cd4f86d76630 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Wed, 21 Mar 2018 11:28:19 +0100
|
||||
Subject: [PATCH 2/9] Add a self test for the generic-updates plugin
|
||||
|
||||
This also covers the fix in the previous commit.
|
||||
---
|
||||
plugins/core/gs-self-test.c | 81 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 81 insertions(+)
|
||||
|
||||
diff --git a/plugins/core/gs-self-test.c b/plugins/core/gs-self-test.c
|
||||
index 66ab4fd28cc4..dc27daa37d5b 100644
|
||||
--- a/plugins/core/gs-self-test.c
|
||||
+++ b/plugins/core/gs-self-test.c
|
||||
@@ -104,6 +104,83 @@ gs_plugins_core_os_release_func (GsPluginLoader *plugin_loader)
|
||||
g_assert (app3 == app);
|
||||
}
|
||||
|
||||
+static void
|
||||
+gs_plugins_core_generic_updates_func (GsPluginLoader *plugin_loader)
|
||||
+{
|
||||
+ gboolean ret;
|
||||
+ GsApp *os_update;
|
||||
+ GPtrArray *related;
|
||||
+ g_autoptr(GsPluginJob) plugin_job = NULL;
|
||||
+ g_autoptr(GsPluginJob) plugin_job2 = NULL;
|
||||
+ g_autoptr(GError) error = NULL;
|
||||
+ g_autoptr(GsApp) app1 = NULL;
|
||||
+ g_autoptr(GsApp) app2 = NULL;
|
||||
+ g_autoptr(GsApp) app_wildcard = NULL;
|
||||
+ g_autoptr(GsAppList) list = NULL;
|
||||
+ g_autoptr(GsAppList) list_wildcard = NULL;
|
||||
+
|
||||
+ /* drop all caches */
|
||||
+ gs_plugin_loader_setup_again (plugin_loader);
|
||||
+
|
||||
+ /* create a list with generic apps */
|
||||
+ list = gs_app_list_new ();
|
||||
+ app1 = gs_app_new ("package1");
|
||||
+ app2 = gs_app_new ("package2");
|
||||
+ gs_app_set_kind (app1, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_set_kind (app2, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_set_state (app1, AS_APP_STATE_UPDATABLE);
|
||||
+ gs_app_set_state (app2, AS_APP_STATE_UPDATABLE);
|
||||
+ gs_app_add_source (app1, "package1");
|
||||
+ gs_app_add_source (app2, "package2");
|
||||
+ gs_app_list_add (list, app1);
|
||||
+ gs_app_list_add (list, app2);
|
||||
+
|
||||
+ /* refine to make the generic-updates plugin merge them into a single OsUpdate item */
|
||||
+ plugin_job = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
|
||||
+ "list", list,
|
||||
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS,
|
||||
+ NULL);
|
||||
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job, NULL, &error);
|
||||
+ gs_test_flush_main_context ();
|
||||
+ g_assert_no_error (error);
|
||||
+ g_assert (ret);
|
||||
+
|
||||
+ /* make sure there is one entry, the os update */
|
||||
+ g_assert_cmpint (gs_app_list_length (list), ==, 1);
|
||||
+ os_update = gs_app_list_index (list, 0);
|
||||
+
|
||||
+ /* make sure the os update is valid */
|
||||
+ g_assert_cmpstr (gs_app_get_id (os_update), ==, "org.gnome.Software.OsUpdate");
|
||||
+ g_assert_cmpint (gs_app_get_kind (os_update), ==, AS_APP_KIND_OS_UPDATE);
|
||||
+ g_assert (gs_app_has_quirk (os_update, AS_APP_QUIRK_IS_PROXY));
|
||||
+
|
||||
+ /* must have two related apps, the ones we added earlier */
|
||||
+ related = gs_app_get_related (os_update);
|
||||
+ g_assert_cmpint (related->len, ==, 2);
|
||||
+
|
||||
+ /* another test to make sure that we don't get an OsUpdate item created for wildcard apps */
|
||||
+ list_wildcard = gs_app_list_new ();
|
||||
+ app_wildcard = gs_app_new ("nosuchapp.desktop");
|
||||
+ gs_app_add_quirk (app_wildcard, AS_APP_QUIRK_MATCH_ANY_PREFIX);
|
||||
+ gs_app_set_kind (app_wildcard, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_list_add (list_wildcard, app_wildcard);
|
||||
+ plugin_job2 = gs_plugin_job_newv (GS_PLUGIN_ACTION_REFINE,
|
||||
+ "list", list_wildcard,
|
||||
+ "refine-flags", GS_PLUGIN_REFINE_FLAGS_REQUIRE_UPDATE_DETAILS,
|
||||
+ NULL);
|
||||
+ ret = gs_plugin_loader_job_action (plugin_loader, plugin_job2, NULL, &error);
|
||||
+ gs_test_flush_main_context ();
|
||||
+ g_assert_no_error (error);
|
||||
+ g_assert (ret);
|
||||
+
|
||||
+ /* no OsUpdate item created */
|
||||
+ for (guint i = 0; i < gs_app_list_length (list_wildcard); i++) {
|
||||
+ GsApp *app_tmp = gs_app_list_index (list_wildcard, i);
|
||||
+ g_assert_cmpint (gs_app_get_kind (app_tmp), !=, AS_APP_KIND_OS_UPDATE);
|
||||
+ g_assert (!gs_app_has_quirk (app_tmp, AS_APP_QUIRK_IS_PROXY));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
@@ -115,6 +192,7 @@ main (int argc, char **argv)
|
||||
const gchar *xml;
|
||||
const gchar *whitelist[] = {
|
||||
"appstream",
|
||||
+ "generic-updates",
|
||||
"icons",
|
||||
"os-release",
|
||||
NULL
|
||||
@@ -180,6 +258,9 @@ main (int argc, char **argv)
|
||||
g_test_add_data_func ("/gnome-software/plugins/core/os-release",
|
||||
plugin_loader,
|
||||
(GTestDataFunc) gs_plugins_core_os_release_func);
|
||||
+ g_test_add_data_func ("/gnome-software/plugins/core/generic-updates",
|
||||
+ plugin_loader,
|
||||
+ (GTestDataFunc) gs_plugins_core_generic_updates_func);
|
||||
return g_test_run ();
|
||||
}
|
||||
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 9eab01082b07acd525b8a390ab6b43136cf400a5 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 22 Mar 2018 13:03:55 +0100
|
||||
Subject: [PATCH 5/9] generic updates: Only put packages in the OS Update item
|
||||
|
||||
Make sure we don't put flatpaks in the OS Update item as this is by
|
||||
design only for hiding low level system package updates.
|
||||
|
||||
flatpaks use online updates and packages use offline updates; if we mix
|
||||
them up in a single OS Update item this breaks the updates page where
|
||||
we're supposed to group online and offline updates separately.
|
||||
|
||||
https://gitlab.gnome.org/GNOME/gnome-software/issues/332
|
||||
---
|
||||
plugins/core/gs-plugin-generic-updates.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/plugins/core/gs-plugin-generic-updates.c b/plugins/core/gs-plugin-generic-updates.c
|
||||
index 733983a2929c..d8e2db39e3df 100644
|
||||
--- a/plugins/core/gs-plugin-generic-updates.c
|
||||
+++ b/plugins/core/gs-plugin-generic-updates.c
|
||||
@@ -33,10 +33,16 @@ gs_plugin_initialize (GsPlugin *plugin)
|
||||
static gboolean
|
||||
gs_plugin_generic_updates_merge_os_update (GsApp *app)
|
||||
{
|
||||
+ /* this is only for grouping system-installed packages */
|
||||
+ if (gs_app_get_bundle_kind (app) != AS_BUNDLE_KIND_PACKAGE ||
|
||||
+ gs_app_get_scope (app) != AS_APP_SCOPE_SYSTEM)
|
||||
+ return FALSE;
|
||||
+
|
||||
if (gs_app_get_kind (app) == AS_APP_KIND_GENERIC)
|
||||
return TRUE;
|
||||
if (gs_app_get_kind (app) == AS_APP_KIND_SOURCE)
|
||||
return TRUE;
|
||||
+
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 223b9f9a6bb5fc500aeee0a392ba909c0fdec097 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 22 Mar 2018 14:08:49 +0100
|
||||
Subject: [PATCH 6/9] trivial: Fix the "OS Updates" self test
|
||||
|
||||
Adapt the test now that we're only putting package updates in "OS
|
||||
Updates" after commit 9eab01082b07acd525b8a390ab6b43136cf400a5.
|
||||
---
|
||||
plugins/core/gs-self-test.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/plugins/core/gs-self-test.c b/plugins/core/gs-self-test.c
|
||||
index dc27daa37d5b..da22aaebb231 100644
|
||||
--- a/plugins/core/gs-self-test.c
|
||||
+++ b/plugins/core/gs-self-test.c
|
||||
@@ -128,6 +128,10 @@ gs_plugins_core_generic_updates_func (GsPluginLoader *plugin_loader)
|
||||
app2 = gs_app_new ("package2");
|
||||
gs_app_set_kind (app1, AS_APP_KIND_GENERIC);
|
||||
gs_app_set_kind (app2, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_set_bundle_kind (app1, AS_BUNDLE_KIND_PACKAGE);
|
||||
+ gs_app_set_bundle_kind (app2, AS_BUNDLE_KIND_PACKAGE);
|
||||
+ gs_app_set_scope (app1, AS_APP_SCOPE_SYSTEM);
|
||||
+ gs_app_set_scope (app2, AS_APP_SCOPE_SYSTEM);
|
||||
gs_app_set_state (app1, AS_APP_STATE_UPDATABLE);
|
||||
gs_app_set_state (app2, AS_APP_STATE_UPDATABLE);
|
||||
gs_app_add_source (app1, "package1");
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 22e217f3725307dce12d477bad2593912e2b72d6 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 22 Mar 2018 14:33:02 +0100
|
||||
Subject: [PATCH 7/9] trivial: Fix dummy plugin self test
|
||||
|
||||
Adapt for commit 9eab01082b07acd525b8a390ab6b43136cf400a5.
|
||||
---
|
||||
plugins/dummy/gs-plugin-dummy.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/plugins/dummy/gs-plugin-dummy.c b/plugins/dummy/gs-plugin-dummy.c
|
||||
index e238ab54c51e..5293fe3b3ddc 100644
|
||||
--- a/plugins/dummy/gs-plugin-dummy.c
|
||||
+++ b/plugins/dummy/gs-plugin-dummy.c
|
||||
@@ -384,6 +384,8 @@ gs_plugin_add_updates (GsPlugin *plugin,
|
||||
gs_app_set_update_details (app, "Fix several memory leaks.");
|
||||
gs_app_set_update_urgency (app, AS_URGENCY_KIND_LOW);
|
||||
gs_app_set_kind (app, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
|
||||
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
|
||||
gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
|
||||
gs_app_add_source (app, "libvirt-glib-devel");
|
||||
gs_app_add_source_id (app, "libvirt-glib-devel;0.0.1;noarch;fedora");
|
||||
@@ -398,6 +400,8 @@ gs_plugin_add_updates (GsPlugin *plugin,
|
||||
gs_app_set_update_details (app, "Do not crash when using libvirt.");
|
||||
gs_app_set_update_urgency (app, AS_URGENCY_KIND_HIGH);
|
||||
gs_app_set_kind (app, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
|
||||
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
|
||||
gs_app_set_state (app, AS_APP_STATE_UPDATABLE_LIVE);
|
||||
gs_app_add_source (app, "chiron-libs");
|
||||
gs_app_add_source_id (app, "chiron-libs;0.0.1;i386;updates-testing");
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 732951dbe669aa5db4e6a6157f7b71a6fbce51b6 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 22 Mar 2018 15:05:20 +0100
|
||||
Subject: [PATCH 9/9] trivial: rpm-ostree: Set bundle kind and scope for
|
||||
updates
|
||||
|
||||
This ensures that updates get correctly grouped under "OS Updates" item
|
||||
after commit 9eab01082b07acd525b8a390ab6b43136cf400a5.
|
||||
---
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index cb3d3d4f9bad..aae2e6dbd6dc 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -320,6 +320,8 @@ make_app (GVariant *variant)
|
||||
gs_app_set_management_plugin (app, "rpm-ostree");
|
||||
gs_app_set_size_download (app, 0);
|
||||
gs_app_set_kind (app, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
|
||||
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
|
||||
|
||||
details = g_variant_get_child_value (variant, 2);
|
||||
g_return_val_if_fail (details != NULL, NULL);
|
||||
--
|
||||
2.16.2
|
||||
|
@ -10,20 +10,16 @@
|
||||
%global flatpak_version 0.9.4
|
||||
|
||||
Name: gnome-software
|
||||
Version: 3.28.0
|
||||
Release: 5%{?dist}
|
||||
Version: 3.28.1
|
||||
Release: 1%{?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.28/%{name}-%{version}.tar.xz
|
||||
|
||||
# Backported from upstream
|
||||
Patch0: 0001-Revert-Revert-trivial-Use-new-libappstream-glib-to-b.patch
|
||||
Patch1: 0001-plugin-loader-Don-t-abort-for-refine-errors.patch
|
||||
# Lower appstream-glib version check as we have new API backported
|
||||
Patch2: 0001-appstream-Don-t-compare-appstream-origin-to-package-.patch
|
||||
Patch3: empty-os-updates.patch
|
||||
Patch4: rpm-ostree-updates.patch
|
||||
|
||||
BuildRequires: gettext
|
||||
BuildRequires: libxslt
|
||||
@ -217,6 +213,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/*.desktop
|
||||
%{_mandir}/man1/gnome-software-editor.1*
|
||||
|
||||
%changelog
|
||||
* Mon Apr 09 2018 Kalev Lember <klember@redhat.com> - 3.28.1-1
|
||||
- Update to 3.28.1
|
||||
|
||||
* Thu Mar 29 2018 Kalev Lember <klember@redhat.com> - 3.28.0-5
|
||||
- Fix empty OS Updates showing up
|
||||
- Make rpm-ostree update triggering work
|
||||
|
@ -1,803 +0,0 @@
|
||||
From 433feac892472ca2c6ab2cf074117100764a3f75 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 22 Mar 2018 15:00:56 +0100
|
||||
Subject: [PATCH] trivial: rpm-ostree: Update rpmostree1 dbus interface
|
||||
description
|
||||
|
||||
---
|
||||
.../rpm-ostree/org.projectatomic.rpmostree1.xml | 81 ++++++++++++++++++++--
|
||||
1 file changed, 76 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml b/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
|
||||
index 0a4a915c6493..edfa28f319bd 100644
|
||||
--- a/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
|
||||
+++ b/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
|
||||
@@ -23,8 +23,10 @@
|
||||
<!-- The system root path -->
|
||||
<property name="Path" type="s" access="read"/>
|
||||
|
||||
- <!-- The values are (method-name, sender-name) -->
|
||||
+ <!-- The values are (method-name, sender-name, object path) -->
|
||||
<property name="ActiveTransaction" type="(sss)" access="read"/>
|
||||
+ <!-- A DBus address - connect to it to access its methods -->
|
||||
+ <property name="ActiveTransactionPath" type="s" access="read"/>
|
||||
|
||||
<!-- (Currently) optional method to denote the client plans
|
||||
to either invoke methods on the daemon, or monitor status.
|
||||
@@ -48,6 +50,9 @@
|
||||
<method name="ReloadConfig">
|
||||
</method>
|
||||
|
||||
+ <!-- none, check -->
|
||||
+ <property name="AutomaticUpdatePolicy" type="s" access="read"/>
|
||||
+
|
||||
<method name="CreateOSName">
|
||||
<arg type="s" name="name"/>
|
||||
<arg type="o" name="result" direction="out"/>
|
||||
@@ -74,12 +79,36 @@
|
||||
'timestamp' (type 't')
|
||||
'origin' (type 's')
|
||||
'signatures' (type 'av')
|
||||
+ 'gpg-enabled' (type 'b')
|
||||
+ 'ref-has-new-commit' (type 'b')
|
||||
+ TRUE if 'checksum' refers to a new base commit we're not booted in.
|
||||
+ 'rpm-diff' (type 'a{sv}')
|
||||
+ 'upgraded' (type 'a(us(ss)(ss))')
|
||||
+ 'downgraded' (type 'a(us(ss)(ss))')
|
||||
+ 'removed' (type 'a(usss)')
|
||||
+ 'added' (type 'a(usss)')
|
||||
+ 'advisories' (type 'a(suuasa{sv})')
|
||||
-->
|
||||
<property name="CachedUpdate" type="a{sv}" access="read"/>
|
||||
<property name="HasCachedUpdateRpmDiff" type="b" access="read"/>
|
||||
|
||||
- <!-- NONE, DIFF, PREPARE, REBOOT -->
|
||||
- <property name="AutomaticUpdatePolicy" type="s" access="read"/>
|
||||
+ <!-- Available options:
|
||||
+ "mode" (type 's')
|
||||
+ One of auto, none, check. Defaults to auto, which follows configured
|
||||
+ policy (available in AutomaticUpdatePolicy property).
|
||||
+ "output-to-self" (type 'b')
|
||||
+ Whether output should go to the daemon itself rather than the
|
||||
+ transaction. Defaults to TRUE.
|
||||
+
|
||||
+ If automatic updates are not enabled, @enabled will be FALSE and
|
||||
+ @transaction_address will be the empty string.
|
||||
+ -->
|
||||
+ <method name="AutomaticUpdateTrigger">
|
||||
+ <arg type="a{sv}" name="options" direction="in"/>
|
||||
+ <arg type="b" name="enabled" direction="out"/>
|
||||
+ <arg type="s" name="transaction_address" direction="out"/>
|
||||
+ </method>
|
||||
+
|
||||
<property name="Name" type="s" access="read"/>
|
||||
|
||||
<method name="GetDeploymentsRpmDiff">
|
||||
@@ -218,17 +247,44 @@
|
||||
<arg type="s" name="transaction_address" direction="out"/>
|
||||
</method>
|
||||
|
||||
+ <!-- Available options:
|
||||
+ "reboot" (type 'b')
|
||||
+ -->
|
||||
+ <method name="KernelArgs">
|
||||
+ <arg type="s" name="existing_kernel_arg_string"/>
|
||||
+ <arg type="as" name="kernel_args_added" direction="in"/>
|
||||
+ <arg type="as" name="kernel_args_replaced" direction="in"/>
|
||||
+ <arg type="as" name="kernel_args_removed" direction="in"/>
|
||||
+ <arg type="a{sv}" name="options" direction="in"/>
|
||||
+ <arg type="s" name="transaction_address" direction="out"/>
|
||||
+ </method>
|
||||
+
|
||||
+ <method name="GetDeploymentBootConfig">
|
||||
+ <arg type="s" name="deployid" />
|
||||
+ <arg type="b" name="is_pending" direction="in"/>
|
||||
+ <arg type="a{sv}" name="bootconfig" direction="out"/>
|
||||
+ </method>
|
||||
+
|
||||
<method name="Cleanup">
|
||||
<arg type="as" name="elements" direction="in"/>
|
||||
<arg type="s" name="transaction_address" direction="out"/>
|
||||
</method>
|
||||
|
||||
+ <method name="RefreshMd">
|
||||
+ <arg type="a{sv}" name="options" direction="in"/>
|
||||
+ <arg type="s" name="transaction_address" direction="out"/>
|
||||
+ </method>
|
||||
+
|
||||
<!-- Available modifiers:
|
||||
"set-refspec" (type 's')
|
||||
"set-revision" (type 's')
|
||||
"install-packages" (type 'as')
|
||||
"uninstall-packages" (type 'as')
|
||||
"install-local-packages" (type 'ah')
|
||||
+ "override-remove-packages" (type 'as')
|
||||
+ "override-reset-packages" (type 'as')
|
||||
+ "override-replace-packages" (type 'as')
|
||||
+ "override-replace-local-packages" (type 'ah')
|
||||
|
||||
Available options:
|
||||
"reboot" (type 'b')
|
||||
@@ -244,8 +300,20 @@
|
||||
Do not pull a base layer from the remote. Not valid if
|
||||
either "set-refspec" or "set-revision" is specified.
|
||||
"dry-run" (type 'b')
|
||||
- Stop short of deploying the new tree. If
|
||||
- layering packages, the pkg diff is printed.
|
||||
+ Stop short of deploying the new tree. If layering packages,
|
||||
+ the pkg diff is printed but packages are not downloaded or
|
||||
+ imported.
|
||||
+ "no-overrides" (type 'b')
|
||||
+ Remove all active overrides. Not valid if any override
|
||||
+ modifiers are specified.
|
||||
+ "cache-only" (type 'b')
|
||||
+ Do not update rpmmd repo metadata cache or ostree refspec.
|
||||
+ Not valid if "download-only" is specified.
|
||||
+ "download-only" (type 'b')
|
||||
+ Update rpmmd repo metadata cache and ostree refspec. Do not
|
||||
+ perform any deployments. This is like "dry-run" except that
|
||||
+ the latter does not download and import packages. Not valid
|
||||
+ if "cache-only" or "dry-run" is specified.
|
||||
-->
|
||||
<method name="UpdateDeployment">
|
||||
<arg type="a{sv}" name="modifiers" direction="in"/>
|
||||
@@ -273,6 +341,9 @@
|
||||
|
||||
<interface name="org.projectatomic.rpmostree1.Transaction">
|
||||
|
||||
+ <!-- A single-line human-readable string -->
|
||||
+ <property name="Title" type="s" access="read"/>
|
||||
+
|
||||
<!-- Yes, we can. -->
|
||||
<method name="Cancel"/>
|
||||
|
||||
--
|
||||
2.16.2
|
||||
|
||||
From bea127b2be371c80ace8a0a49295c2046b58fbd8 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 29 Mar 2018 15:31:27 +0200
|
||||
Subject: [PATCH 1/7] rpm-ostree: Use Upgrade instead of DownloadUpdateRpmDiff
|
||||
|
||||
Upgrade is new do-it-all API that supersedes DownloadUpdateRpmDiff and
|
||||
many other individual rpm-ostree dbus methods.
|
||||
---
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 45 +++++++++++++++++++++++++++----
|
||||
1 file changed, 40 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index aae2e6dbd6dc..5b173dfdd509 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -364,6 +364,29 @@ make_app (GVariant *variant)
|
||||
return g_steal_pointer (&app);
|
||||
}
|
||||
|
||||
+static GVariant *
|
||||
+make_rpmostree_options_variant (gboolean reboot,
|
||||
+ gboolean allow_downgrade,
|
||||
+ gboolean cache_only,
|
||||
+ gboolean download_only,
|
||||
+ gboolean skip_purge,
|
||||
+ gboolean no_pull_base,
|
||||
+ gboolean dry_run,
|
||||
+ gboolean no_overrides)
|
||||
+{
|
||||
+ GVariantDict dict;
|
||||
+ g_variant_dict_init (&dict, NULL);
|
||||
+ g_variant_dict_insert (&dict, "reboot", "b", reboot);
|
||||
+ g_variant_dict_insert (&dict, "allow-downgrade", "b", allow_downgrade);
|
||||
+ g_variant_dict_insert (&dict, "cache-only", "b", cache_only);
|
||||
+ g_variant_dict_insert (&dict, "download-only", "b", download_only);
|
||||
+ g_variant_dict_insert (&dict, "skip-purge", "b", skip_purge);
|
||||
+ g_variant_dict_insert (&dict, "no-pull-base", "b", no_pull_base);
|
||||
+ g_variant_dict_insert (&dict, "dry-run", "b", dry_run);
|
||||
+ g_variant_dict_insert (&dict, "no-overrides", "b", no_overrides);
|
||||
+ return g_variant_ref_sink (g_variant_dict_end (&dict));
|
||||
+}
|
||||
+
|
||||
gboolean
|
||||
gs_plugin_refresh (GsPlugin *plugin,
|
||||
guint cache_age,
|
||||
@@ -375,11 +398,23 @@ gs_plugin_refresh (GsPlugin *plugin,
|
||||
|
||||
if (flags & GS_PLUGIN_REFRESH_FLAGS_METADATA) {
|
||||
g_autofree gchar *transaction_address = NULL;
|
||||
-
|
||||
- if (!gs_rpmostree_os_call_download_update_rpm_diff_sync (priv->os_proxy,
|
||||
- &transaction_address,
|
||||
- cancellable,
|
||||
- error)) {
|
||||
+ g_autoptr(GVariant) options = NULL;
|
||||
+
|
||||
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
|
||||
+ FALSE, /* allow-downgrade */
|
||||
+ FALSE, /* cache-only */
|
||||
+ TRUE, /* download-only */
|
||||
+ FALSE, /* skip-purge */
|
||||
+ FALSE, /* no-pull-base */
|
||||
+ FALSE, /* dry-run */
|
||||
+ FALSE); /* no-overrides */
|
||||
+ if (!gs_rpmostree_os_call_upgrade_sync (priv->os_proxy,
|
||||
+ options,
|
||||
+ NULL /* fd list */,
|
||||
+ &transaction_address,
|
||||
+ NULL /* fd list out */,
|
||||
+ cancellable,
|
||||
+ error)) {
|
||||
gs_utils_error_convert_gio (error);
|
||||
return FALSE;
|
||||
}
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 533ab16b0a671bb8e39c6c0b6afa4c4438a5cb70 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 29 Mar 2018 18:13:05 +0200
|
||||
Subject: [PATCH 2/7] rpm-ostree: Avoid using GetCachedUpdateRpmDiff dbus
|
||||
method
|
||||
|
||||
rpm-ostree GetCachedUpdateRpmDiff method doesn't handle layered packages
|
||||
correctly. Instead, this commit switches to using the newer CachedUpdate
|
||||
property instead which has all the info we need for add_updates().
|
||||
---
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 196 +++++++++++++++++++++---------
|
||||
1 file changed, 140 insertions(+), 56 deletions(-)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index 5b173dfdd509..64a86bef9549 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -303,16 +303,14 @@ out:
|
||||
}
|
||||
|
||||
static GsApp *
|
||||
-make_app (GVariant *variant)
|
||||
+app_from_modified_pkg_variant (GVariant *variant)
|
||||
{
|
||||
g_autoptr(GsApp) app = NULL;
|
||||
- g_autoptr(GVariant) details = NULL;
|
||||
- const char *old_name, *old_evr, *old_arch;
|
||||
- const char *new_name, *new_evr, *new_arch;
|
||||
- gboolean have_old = FALSE;
|
||||
- gboolean have_new = FALSE;
|
||||
+ const char *name;
|
||||
+ const char *old_evr, *old_arch;
|
||||
+ const char *new_evr, *new_arch;
|
||||
|
||||
- app = gs_app_new (NULL);
|
||||
+ g_variant_get (variant, "(us(ss)(ss))", NULL /* type*/, &name, &old_evr, &old_arch, &new_evr, &new_arch);
|
||||
|
||||
/* create new app */
|
||||
app = gs_app_new (NULL);
|
||||
@@ -323,42 +321,51 @@ make_app (GVariant *variant)
|
||||
gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
|
||||
gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
|
||||
|
||||
- details = g_variant_get_child_value (variant, 2);
|
||||
- g_return_val_if_fail (details != NULL, NULL);
|
||||
+ /* update or downgrade */
|
||||
+ gs_app_add_source (app, name);
|
||||
+ gs_app_set_version (app, old_evr);
|
||||
+ gs_app_set_update_version (app, new_evr);
|
||||
+ gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
|
||||
|
||||
- have_old = g_variant_lookup (details,
|
||||
- "PreviousPackage", "(&s&s&s)",
|
||||
- &old_name, &old_evr, &old_arch);
|
||||
+ g_debug ("!%s-%s-%s\n", name, old_evr, old_arch);
|
||||
+ g_debug ("=%s-%s-%s\n", name, new_evr, new_arch);
|
||||
|
||||
- have_new = g_variant_lookup (details,
|
||||
- "NewPackage", "(&s&s&s)",
|
||||
- &new_name, &new_evr, &new_arch);
|
||||
+ return g_steal_pointer (&app);
|
||||
+}
|
||||
|
||||
- if (have_old && have_new) {
|
||||
- g_assert (g_strcmp0 (old_name, new_name) == 0);
|
||||
+static GsApp *
|
||||
+app_from_single_pkg_variant (GVariant *variant, gboolean addition)
|
||||
+{
|
||||
+ g_autoptr(GsApp) app = NULL;
|
||||
+ const char *name;
|
||||
+ const char *evr;
|
||||
+ const char *arch;
|
||||
|
||||
- /* update */
|
||||
- gs_app_add_source (app, old_name);
|
||||
- gs_app_set_version (app, old_evr);
|
||||
- gs_app_set_update_version (app, new_evr);
|
||||
- gs_app_set_state (app, AS_APP_STATE_UPDATABLE);
|
||||
+ g_variant_get (variant, "(usss)", NULL /* type*/, &name, &evr, &arch);
|
||||
|
||||
- g_print ("!%s-%s-%s\n", old_name, old_evr, old_arch);
|
||||
- g_print ("=%s-%s-%s\n", new_name, new_evr, new_arch);
|
||||
- } else if (have_old) {
|
||||
- /* removal */
|
||||
- gs_app_add_source (app, old_name);
|
||||
- gs_app_set_version (app, old_evr);
|
||||
- gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
|
||||
+ /* create new app */
|
||||
+ app = gs_app_new (NULL);
|
||||
+ gs_app_add_quirk (app, AS_APP_QUIRK_NEEDS_REBOOT);
|
||||
+ gs_app_set_management_plugin (app, "rpm-ostree");
|
||||
+ gs_app_set_size_download (app, 0);
|
||||
+ gs_app_set_kind (app, AS_APP_KIND_GENERIC);
|
||||
+ gs_app_set_bundle_kind (app, AS_BUNDLE_KIND_PACKAGE);
|
||||
+ gs_app_set_scope (app, AS_APP_SCOPE_SYSTEM);
|
||||
|
||||
- g_print ("-%s-%s-%s\n", old_name, old_evr, old_arch);
|
||||
- } else if (have_new) {
|
||||
- /* install */
|
||||
- gs_app_add_source (app, new_name);
|
||||
- gs_app_set_version (app, new_evr);
|
||||
+ if (addition) {
|
||||
+ /* addition */
|
||||
+ gs_app_add_source (app, name);
|
||||
+ gs_app_set_version (app, evr);
|
||||
gs_app_set_state (app, AS_APP_STATE_AVAILABLE);
|
||||
|
||||
- g_print ("+%s-%s-%s\n", new_name, new_evr, new_arch);
|
||||
+ g_debug ("+%s-%s-%s\n", name, evr, arch);
|
||||
+ } else {
|
||||
+ /* removal */
|
||||
+ gs_app_add_source (app, name);
|
||||
+ gs_app_set_version (app, evr);
|
||||
+ gs_app_set_state (app, AS_APP_STATE_UNAVAILABLE);
|
||||
+
|
||||
+ g_debug ("-%s-%s-%s\n", name, evr, arch);
|
||||
}
|
||||
|
||||
return g_steal_pointer (&app);
|
||||
@@ -438,33 +445,110 @@ gs_plugin_add_updates (GsPlugin *plugin,
|
||||
GError **error)
|
||||
{
|
||||
GsPluginData *priv = gs_plugin_get_data (plugin);
|
||||
- g_autoptr(GVariant) result = NULL;
|
||||
- g_autoptr(GVariant) details = NULL;
|
||||
- GVariantIter iter;
|
||||
- GVariant *child;
|
||||
-
|
||||
- if (!gs_rpmostree_os_call_get_cached_update_rpm_diff_sync (priv->os_proxy,
|
||||
- "",
|
||||
- &result,
|
||||
- &details,
|
||||
- cancellable,
|
||||
- error)) {
|
||||
- gs_utils_error_convert_gio (error);
|
||||
+ g_autoptr(GVariant) cached_update = NULL;
|
||||
+ g_autoptr(GVariant) rpm_diff = NULL;
|
||||
+ const gchar *checksum = NULL;
|
||||
+ const gchar *version = NULL;
|
||||
+ g_auto(GVariantDict) cached_update_dict;
|
||||
+
|
||||
+ cached_update = gs_rpmostree_os_dup_cached_update (priv->os_proxy);
|
||||
+ g_variant_dict_init (&cached_update_dict, cached_update);
|
||||
+
|
||||
+ if (!g_variant_dict_lookup (&cached_update_dict, "checksum", "&s", &checksum)) {
|
||||
+ g_set_error_literal (error,
|
||||
+ GS_PLUGIN_ERROR,
|
||||
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
+ "no 'checksum' in CachedUpdate dict");
|
||||
return FALSE;
|
||||
}
|
||||
+ if (!g_variant_dict_lookup (&cached_update_dict, "version", "&s", &version)) {
|
||||
+ g_set_error_literal (error,
|
||||
+ GS_PLUGIN_ERROR,
|
||||
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
+ "no 'version' in CachedUpdate dict");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ g_debug ("got CachedUpdate version '%s', checksum '%s'", version, checksum);
|
||||
+
|
||||
+ rpm_diff = g_variant_dict_lookup_value (&cached_update_dict, "rpm-diff", G_VARIANT_TYPE ("a{sv}"));
|
||||
+ if (rpm_diff != NULL) {
|
||||
+ GVariantIter iter;
|
||||
+ GVariant *child;
|
||||
+ g_autoptr(GVariant) upgraded = NULL;
|
||||
+ g_autoptr(GVariant) downgraded = NULL;
|
||||
+ g_autoptr(GVariant) removed = NULL;
|
||||
+ g_autoptr(GVariant) added = NULL;
|
||||
+ g_auto(GVariantDict) rpm_diff_dict;
|
||||
+ g_variant_dict_init (&rpm_diff_dict, rpm_diff);
|
||||
+
|
||||
+ upgraded = g_variant_dict_lookup_value (&rpm_diff_dict, "upgraded", G_VARIANT_TYPE ("a(us(ss)(ss))"));
|
||||
+ if (upgraded == NULL) {
|
||||
+ g_set_error_literal (error,
|
||||
+ GS_PLUGIN_ERROR,
|
||||
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
+ "no 'upgraded' in rpm-diff dict");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ downgraded = g_variant_dict_lookup_value (&rpm_diff_dict, "downgraded", G_VARIANT_TYPE ("a(us(ss)(ss))"));
|
||||
+ if (downgraded == NULL) {
|
||||
+ g_set_error_literal (error,
|
||||
+ GS_PLUGIN_ERROR,
|
||||
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
+ "no 'downgraded' in rpm-diff dict");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ removed = g_variant_dict_lookup_value (&rpm_diff_dict, "removed", G_VARIANT_TYPE ("a(usss)"));
|
||||
+ if (removed == NULL) {
|
||||
+ g_set_error_literal (error,
|
||||
+ GS_PLUGIN_ERROR,
|
||||
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
+ "no 'removed' in rpm-diff dict");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ added = g_variant_dict_lookup_value (&rpm_diff_dict, "added", G_VARIANT_TYPE ("a(usss)"));
|
||||
+ if (added == NULL) {
|
||||
+ g_set_error_literal (error,
|
||||
+ GS_PLUGIN_ERROR,
|
||||
+ GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
+ "no 'added' in rpm-diff dict");
|
||||
+ return FALSE;
|
||||
+ }
|
||||
|
||||
- if (g_variant_n_children (result) == 0)
|
||||
- return TRUE;
|
||||
+ /* iterate over all upgraded packages and add them */
|
||||
+ g_variant_iter_init (&iter, upgraded);
|
||||
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
|
||||
+ g_autoptr(GsApp) app = app_from_modified_pkg_variant (child);
|
||||
+ if (app != NULL)
|
||||
+ gs_app_list_add (list, app);
|
||||
+ g_variant_unref (child);
|
||||
+ }
|
||||
+
|
||||
+ /* iterate over all downgraded packages and add them */
|
||||
+ g_variant_iter_init (&iter, downgraded);
|
||||
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
|
||||
+ g_autoptr(GsApp) app = app_from_modified_pkg_variant (child);
|
||||
+ if (app != NULL)
|
||||
+ gs_app_list_add (list, app);
|
||||
+ g_variant_unref (child);
|
||||
+ }
|
||||
|
||||
- /* GVariant format should be a(sua{sv}) */
|
||||
- g_variant_iter_init (&iter, result);
|
||||
+ /* iterate over all removed packages and add them */
|
||||
+ g_variant_iter_init (&iter, removed);
|
||||
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
|
||||
+ g_autoptr(GsApp) app = app_from_single_pkg_variant (child, FALSE);
|
||||
+ if (app != NULL)
|
||||
+ gs_app_list_add (list, app);
|
||||
+ g_variant_unref (child);
|
||||
+ }
|
||||
|
||||
- while ((child = g_variant_iter_next_value (&iter)) != NULL) {
|
||||
- g_autoptr(GsApp) app = make_app (child);
|
||||
- if (app != NULL) {
|
||||
- gs_app_list_add (list, app);
|
||||
+ /* iterate over all added packages and add them */
|
||||
+ g_variant_iter_init (&iter, added);
|
||||
+ while ((child = g_variant_iter_next_value (&iter)) != NULL) {
|
||||
+ g_autoptr(GsApp) app = app_from_single_pkg_variant (child, TRUE);
|
||||
+ if (app != NULL)
|
||||
+ gs_app_list_add (list, app);
|
||||
+ g_variant_unref (child);
|
||||
}
|
||||
- g_variant_unref (child);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 5c2c66a4843a4d783796e50bb639edb1cf6a4831 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 29 Mar 2018 20:31:23 +0200
|
||||
Subject: [PATCH 3/7] rpm-ostree: Implement triggering an update
|
||||
|
||||
We only downloaded and showed updates so far, but didn't actually
|
||||
implement triggering an update. This commit is the missing piece for
|
||||
making rpm-ostree updates work.
|
||||
---
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 80 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 80 insertions(+)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index 64a86bef9549..68de8943927a 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -35,6 +35,7 @@ struct GsPluginData {
|
||||
GsRPMOSTreeSysroot *sysroot_proxy;
|
||||
OstreeRepo *ot_repo;
|
||||
OstreeSysroot *ot_sysroot;
|
||||
+ gboolean update_triggered;
|
||||
};
|
||||
|
||||
void
|
||||
@@ -554,6 +555,85 @@ gs_plugin_add_updates (GsPlugin *plugin,
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
+static gboolean
|
||||
+trigger_rpmostree_update (GsPlugin *plugin,
|
||||
+ GsApp *app,
|
||||
+ GCancellable *cancellable,
|
||||
+ GError **error)
|
||||
+{
|
||||
+ GsPluginData *priv = gs_plugin_get_data (plugin);
|
||||
+ g_autofree gchar *transaction_address = NULL;
|
||||
+ g_autoptr(GVariant) options = NULL;
|
||||
+
|
||||
+ /* if we can process this online do not require a trigger */
|
||||
+ if (gs_app_get_state (app) != AS_APP_STATE_UPDATABLE)
|
||||
+ return TRUE;
|
||||
+
|
||||
+ /* only process this app if was created by this plugin */
|
||||
+ if (g_strcmp0 (gs_app_get_management_plugin (app), gs_plugin_get_name (plugin)) != 0)
|
||||
+ return TRUE;
|
||||
+
|
||||
+ /* already in correct state */
|
||||
+ if (priv->update_triggered)
|
||||
+ return TRUE;
|
||||
+
|
||||
+ /* trigger the update */
|
||||
+ options = make_rpmostree_options_variant (FALSE, /* reboot */
|
||||
+ FALSE, /* allow-downgrade */
|
||||
+ TRUE, /* cache-only */
|
||||
+ FALSE, /* download-only */
|
||||
+ FALSE, /* skip-purge */
|
||||
+ FALSE, /* no-pull-base */
|
||||
+ FALSE, /* dry-run */
|
||||
+ FALSE); /* no-overrides */
|
||||
+ if (!gs_rpmostree_os_call_upgrade_sync (priv->os_proxy,
|
||||
+ options,
|
||||
+ NULL /* fd list */,
|
||||
+ &transaction_address,
|
||||
+ NULL /* fd list out */,
|
||||
+ cancellable,
|
||||
+ error)) {
|
||||
+ gs_utils_error_convert_gio (error);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
|
||||
+ transaction_address,
|
||||
+ cancellable,
|
||||
+ error)) {
|
||||
+ gs_utils_error_convert_gio (error);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ priv->update_triggered = TRUE;
|
||||
+
|
||||
+ /* success */
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+gboolean
|
||||
+gs_plugin_update_app (GsPlugin *plugin,
|
||||
+ GsApp *app,
|
||||
+ GCancellable *cancellable,
|
||||
+ GError **error)
|
||||
+{
|
||||
+ GPtrArray *related = gs_app_get_related (app);
|
||||
+
|
||||
+ /* we don't currently don't put all updates in the OsUpdate proxy app */
|
||||
+ if (!gs_app_has_quirk (app, AS_APP_QUIRK_IS_PROXY))
|
||||
+ return trigger_rpmostree_update (plugin, app, cancellable, error);
|
||||
+
|
||||
+ /* try to trigger each related app */
|
||||
+ for (guint i = 0; i < related->len; i++) {
|
||||
+ GsApp *app_tmp = g_ptr_array_index (related, i);
|
||||
+ if (!trigger_rpmostree_update (plugin, app_tmp, cancellable, error))
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ /* success */
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
static void
|
||||
resolve_packages_app (GsPlugin *plugin,
|
||||
GPtrArray *pkglist,
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 50ba9b1682e9d04627127914419e926778e6e21e Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 29 Mar 2018 20:55:14 +0200
|
||||
Subject: [PATCH 4/7] rpm-ostree: Avoid downloading updates during
|
||||
gnome-software startup
|
||||
|
||||
Only download updates when GS_PLUGIN_REFRESH_FLAGS_PAYLOAD is specified,
|
||||
so that we don't block gnome-software startup with update downloads.
|
||||
---
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index 68de8943927a..2e8681c980b5 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -404,7 +404,7 @@ gs_plugin_refresh (GsPlugin *plugin,
|
||||
{
|
||||
GsPluginData *priv = gs_plugin_get_data (plugin);
|
||||
|
||||
- if (flags & GS_PLUGIN_REFRESH_FLAGS_METADATA) {
|
||||
+ if (flags & GS_PLUGIN_REFRESH_FLAGS_PAYLOAD) {
|
||||
g_autofree gchar *transaction_address = NULL;
|
||||
g_autoptr(GVariant) options = NULL;
|
||||
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 2503def95fbd1e6d7d299219d5cd0a6d591cfec6 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 29 Mar 2018 21:03:19 +0200
|
||||
Subject: [PATCH 5/7] rpm-ostree: Don't return an error if we haven't
|
||||
downloaded any updates yet
|
||||
|
||||
---
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 19 +++++--------------
|
||||
1 file changed, 5 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index 2e8681c980b5..e03f59385efa 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -455,20 +455,11 @@ gs_plugin_add_updates (GsPlugin *plugin,
|
||||
cached_update = gs_rpmostree_os_dup_cached_update (priv->os_proxy);
|
||||
g_variant_dict_init (&cached_update_dict, cached_update);
|
||||
|
||||
- if (!g_variant_dict_lookup (&cached_update_dict, "checksum", "&s", &checksum)) {
|
||||
- g_set_error_literal (error,
|
||||
- GS_PLUGIN_ERROR,
|
||||
- GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
- "no 'checksum' in CachedUpdate dict");
|
||||
- return FALSE;
|
||||
- }
|
||||
- if (!g_variant_dict_lookup (&cached_update_dict, "version", "&s", &version)) {
|
||||
- g_set_error_literal (error,
|
||||
- GS_PLUGIN_ERROR,
|
||||
- GS_PLUGIN_ERROR_INVALID_FORMAT,
|
||||
- "no 'version' in CachedUpdate dict");
|
||||
- return FALSE;
|
||||
- }
|
||||
+ if (!g_variant_dict_lookup (&cached_update_dict, "checksum", "&s", &checksum))
|
||||
+ return TRUE;
|
||||
+ if (!g_variant_dict_lookup (&cached_update_dict, "version", "&s", &version))
|
||||
+ return TRUE;
|
||||
+
|
||||
g_debug ("got CachedUpdate version '%s', checksum '%s'", version, checksum);
|
||||
|
||||
rpm_diff = g_variant_dict_lookup_value (&cached_update_dict, "rpm-diff", G_VARIANT_TYPE ("a{sv}"));
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From 68f4c49157188e499bd36ef6e56239c78be5cc09 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 29 Mar 2018 21:41:08 +0200
|
||||
Subject: [PATCH 6/7] rpm-ostree: Ensure D-Bus properties are updated before
|
||||
reading them
|
||||
|
||||
Use new Reload() API in rpm-ostree 2018.4 to make sure the daemon emits
|
||||
all D-Bus properties before reading them.
|
||||
---
|
||||
meson.build | 2 +-
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 6 ++++++
|
||||
plugins/rpm-ostree/org.projectatomic.rpmostree1.xml | 6 ++++++
|
||||
3 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/meson.build b/meson.build
|
||||
index 53d10370249f..c22a34bb3894 100644
|
||||
--- a/meson.build
|
||||
+++ b/meson.build
|
||||
@@ -154,7 +154,7 @@ endif
|
||||
|
||||
if get_option('enable-rpm-ostree')
|
||||
ostree = dependency('ostree-1')
|
||||
- rpm_ostree = dependency('rpm-ostree-1')
|
||||
+ rpm_ostree = dependency('rpm-ostree-1', version : '>= 2018.4')
|
||||
endif
|
||||
|
||||
if get_option('enable-ubuntu-reviews')
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index e03f59385efa..d811df6f0cc3 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -452,6 +452,9 @@ gs_plugin_add_updates (GsPlugin *plugin,
|
||||
const gchar *version = NULL;
|
||||
g_auto(GVariantDict) cached_update_dict;
|
||||
|
||||
+ /* ensure D-Bus properties are updated before reading them */
|
||||
+ gs_rpmostree_sysroot_call_reload_sync (priv->sysroot_proxy, cancellable, error);
|
||||
+
|
||||
cached_update = gs_rpmostree_os_dup_cached_update (priv->os_proxy);
|
||||
g_variant_dict_init (&cached_update_dict, cached_update);
|
||||
|
||||
@@ -658,6 +661,9 @@ gs_plugin_refine (GsPlugin *plugin,
|
||||
g_auto(GStrv) layered_packages = NULL;
|
||||
g_autofree gchar *checksum = NULL;
|
||||
|
||||
+ /* ensure D-Bus properties are updated before reading them */
|
||||
+ gs_rpmostree_sysroot_call_reload_sync (priv->sysroot_proxy, cancellable, error);
|
||||
+
|
||||
booted_deployment = gs_rpmostree_os_dup_booted_deployment (priv->os_proxy);
|
||||
g_assert (g_variant_lookup (booted_deployment,
|
||||
"packages", "^as",
|
||||
diff --git a/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml b/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
|
||||
index edfa28f319bd..5e5bf0704508 100644
|
||||
--- a/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
|
||||
+++ b/plugins/rpm-ostree/org.projectatomic.rpmostree1.xml
|
||||
@@ -47,6 +47,12 @@
|
||||
<arg type="a{sv}" name="options" direction="in"/>
|
||||
</method>
|
||||
|
||||
+ <!-- Reload sysroot if changed. This can also be used as a way to sync with the daemon
|
||||
+ to ensure e.g. D-Bus properties are updated before reading them. -->
|
||||
+ <method name="Reload">
|
||||
+ </method>
|
||||
+
|
||||
+ <!-- Like Reload, but also reload configuration files. -->
|
||||
<method name="ReloadConfig">
|
||||
</method>
|
||||
|
||||
--
|
||||
2.16.2
|
||||
|
||||
|
||||
From aca91ce6ca1ad4525335ad88276ccc970c7d2852 Mon Sep 17 00:00:00 2001
|
||||
From: Kalev Lember <klember@redhat.com>
|
||||
Date: Thu, 29 Mar 2018 22:34:29 +0200
|
||||
Subject: [PATCH 7/7] rpm-ostree: Use new AutomaticUpdateTrigger API
|
||||
|
||||
It doesn't appear to be enough to just download updates with
|
||||
Upgrade(download-only=true), but we also need to call
|
||||
AutomaticUpdateTrigger(check=true) to actually make the CachedUpdate
|
||||
property show up.
|
||||
---
|
||||
plugins/rpm-ostree/gs-plugin-rpm-ostree.c | 28 ++++++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
diff --git a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
index d811df6f0cc3..2e8bda940cc5 100644
|
||||
--- a/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
+++ b/plugins/rpm-ostree/gs-plugin-rpm-ostree.c
|
||||
@@ -436,6 +436,34 @@ gs_plugin_refresh (GsPlugin *plugin,
|
||||
}
|
||||
}
|
||||
|
||||
+ if (flags & GS_PLUGIN_REFRESH_FLAGS_PAYLOAD) {
|
||||
+ g_autofree gchar *transaction_address = NULL;
|
||||
+ g_autoptr(GVariant) options = NULL;
|
||||
+ GVariantDict dict;
|
||||
+
|
||||
+ g_variant_dict_init (&dict, NULL);
|
||||
+ g_variant_dict_insert (&dict, "mode", "s", "check");
|
||||
+ options = g_variant_ref_sink (g_variant_dict_end (&dict));
|
||||
+
|
||||
+ if (!gs_rpmostree_os_call_automatic_update_trigger_sync (priv->os_proxy,
|
||||
+ options,
|
||||
+ NULL,
|
||||
+ &transaction_address,
|
||||
+ cancellable,
|
||||
+ error)) {
|
||||
+ gs_utils_error_convert_gio (error);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+
|
||||
+ if (!gs_rpmostree_transaction_get_response_sync (priv->sysroot_proxy,
|
||||
+ transaction_address,
|
||||
+ cancellable,
|
||||
+ error)) {
|
||||
+ gs_utils_error_convert_gio (error);
|
||||
+ return FALSE;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
--
|
||||
2.16.2
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (gnome-software-3.28.0.tar.xz) = 44df87554e996f2a4019ffd88daafba873554ab766a1e075b22ba8ebd6aa758f768449dfa2cce6a1f3700ec732bd2c9a710d428b5e563a456190a3b802411298
|
||||
SHA512 (gnome-software-3.28.1.tar.xz) = 9a2b040307c5c4eb38e0cce41cd830f54e68adf6ac02f2aea30c1894ef2ec8e332dd1bfce699602629843cced4c3f660324e0aa8698591a57c40b13a3e474ded
|
||||
|
Loading…
Reference in New Issue
Block a user