Related: RHEL-39682 (Backport upstream patches to fix recent regressions)

This commit is contained in:
Milan Crha 2024-07-25 18:43:08 +02:00
parent c5d0e5ec15
commit 2fe51254f7
2 changed files with 464 additions and 0 deletions

View File

@ -22,6 +22,10 @@ Patch1: package-remove-password-prompt.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2283063
Patch2: appstream-mark-pk-as-compulsory.patch
# https://github.com/PackageKit/PackageKit/pull/751
# https://github.com/PackageKit/PackageKit/pull/774
Patch3: runtime-warnings.patch
BuildRequires: glib2-devel >= %{glib2_version}
BuildRequires: xmlto
BuildRequires: gtk-doc

460
runtime-warnings.patch Normal file
View File

@ -0,0 +1,460 @@
From 671ef87143c0a68e5f11cfbd0c305caaebecc204 Mon Sep 17 00:00:00 2001
From: sid <sidtosh4@gmail.com>
Date: Fri, 10 May 2024 21:46:54 +0100
Subject: [PATCH] pkcon: Use appropriate callbacks for client / task async
calls
Fixes: #747
---
client/pk-console.c | 112 ++++++++++++++++++++++++++------------------
1 file changed, 66 insertions(+), 46 deletions(-)
diff --git a/client/pk-console.c b/client/pk-console.c
index 056e37e65..ad42c3b49 100644
--- a/client/pk-console.c
+++ b/client/pk-console.c
@@ -637,7 +637,7 @@ pk_console_progress_cb (PkProgress *progress, PkProgressType type, gpointer data
}
static void
-pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+pk_console_process_results (PkResults *results, PkConsoleCtx *ctx, const GError *finish_error)
{
const gchar *filename;
gboolean ret;
@@ -645,11 +645,8 @@ pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
PkPackageSack *sack;
PkRestartEnum restart;
PkRoleEnum role;
- PkConsoleCtx *ctx = (PkConsoleCtx *) data;
- g_autoptr(GError) error = NULL;
g_autoptr(GFile) file = NULL;
g_autoptr(PkError) error_code = NULL;
- g_autoptr(PkResults) results = NULL;
/* no more progress */
if (ctx->is_console) {
@@ -659,13 +656,11 @@ pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
g_print ("%s\n", _("Results:"));
}
- /* get the results */
- results = pk_task_generic_finish (PK_TASK (ctx->task), res, &error);
if (results == NULL) {
/* TRANSLATORS: we failed to get any results, which is pretty
* fatal in my book */
- g_print ("%s: %s\n", _("Fatal error"), error->message);
- switch (error->code - 0xff) {
+ g_print ("%s: %s\n", _("Fatal error"), finish_error->message);
+ switch (finish_error->code - 0xff) {
case PK_ERROR_ENUM_ALL_PACKAGES_ALREADY_INSTALLED:
case PK_ERROR_ENUM_REPO_NOT_AVAILABLE:
ctx->retval = PK_EXIT_CODE_NOTHING_USEFUL;
@@ -821,6 +816,7 @@ pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
/* write the sack to disk */
if (role == PK_ROLE_ENUM_GET_PACKAGES && filename != NULL) {
+ g_autoptr(GError) error = NULL;
file = g_file_new_for_path (filename);
ret = pk_package_sack_to_file (sack, file, &error);
if (!ret) {
@@ -833,6 +829,30 @@ pk_console_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
g_main_loop_quit (ctx->loop);
}
+static void
+pk_console_client_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(PkResults) results = NULL;
+ PkConsoleCtx *ctx = (PkConsoleCtx *) data;
+
+ results = pk_client_generic_finish (PK_CLIENT (ctx->task), res, &error);
+
+ pk_console_process_results (results, ctx, error);
+}
+
+static void
+pk_console_task_finished_cb (GObject *object, GAsyncResult *res, gpointer data)
+{
+ g_autoptr(GError) error = NULL;
+ g_autoptr(PkResults) results = NULL;
+ PkConsoleCtx *ctx = (PkConsoleCtx *) data;
+
+ results = pk_task_generic_finish (PK_TASK (ctx->task), res, &error);
+
+ pk_console_process_results (results, ctx, error);
+}
+
static gchar *
pk_console_resolve_package (PkConsoleCtx *ctx, const gchar *package_name, GError **error)
{
@@ -1057,7 +1077,7 @@ pk_console_install_packages (PkConsoleCtx *ctx, gchar **packages, GError **error
pk_task_install_packages_async (PK_TASK (ctx->task),
package_ids, ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1086,7 +1106,7 @@ pk_console_remove_packages (PkConsoleCtx *ctx, gchar **packages, gboolean autore
TRUE, autoremove,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1115,7 +1135,7 @@ pk_console_download_packages (PkConsoleCtx *ctx, gchar **packages, const gchar *
directory,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1145,7 +1165,7 @@ pk_console_update_packages (PkConsoleCtx *ctx, gchar **packages, GError **error)
package_ids,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1188,7 +1208,7 @@ pk_console_update_system (PkConsoleCtx *ctx, GError **error)
package_ids,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1200,7 +1220,7 @@ pk_console_upgrade_system (PkConsoleCtx *ctx, const gchar *distro_id, const gcha
pk_upgrade_kind_enum_from_string (upgrade_kind),
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1230,7 +1250,7 @@ pk_console_required_by (PkConsoleCtx *ctx, gchar **packages, GError **error)
TRUE,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1259,7 +1279,7 @@ pk_console_depends_on (PkConsoleCtx *ctx, gchar **packages, GError **error)
FALSE,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1275,7 +1295,7 @@ pk_console_get_details (PkConsoleCtx *ctx, gchar **packages, GError **error)
packages,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
return TRUE;
}
@@ -1296,7 +1316,7 @@ pk_console_get_details (PkConsoleCtx *ctx, gchar **packages, GError **error)
package_ids,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1307,7 +1327,7 @@ pk_console_get_details_local (PkConsoleCtx *ctx, gchar **files, GError **error)
files,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
return TRUE;
}
@@ -1318,7 +1338,7 @@ pk_console_get_files_local (PkConsoleCtx *ctx, gchar **files, GError **error)
files,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
return TRUE;
}
@@ -1334,7 +1354,7 @@ pk_console_get_files (PkConsoleCtx *ctx, gchar **packages, GError **error)
packages,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
return TRUE;
}
@@ -1355,7 +1375,7 @@ pk_console_get_files (PkConsoleCtx *ctx, gchar **packages, GError **error)
package_ids,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1383,7 +1403,7 @@ pk_console_get_update_detail (PkConsoleCtx *ctx, gchar **packages, GError **erro
package_ids,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
return TRUE;
}
@@ -1830,7 +1850,7 @@ main (int argc, char *argv[])
argv + 3,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (value, "details") == 0) {
if (details == NULL) {
@@ -1847,7 +1867,7 @@ main (int argc, char *argv[])
argv + 3,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (value, "group") == 0) {
if (details == NULL) {
@@ -1864,7 +1884,7 @@ main (int argc, char *argv[])
argv + 3,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (value, "file") == 0) {
if (details == NULL) {
@@ -1881,7 +1901,7 @@ main (int argc, char *argv[])
argv + 3,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else {
/* fallback to a generic search */
pk_task_search_details_async (PK_TASK (ctx->task),
@@ -1889,7 +1909,7 @@ main (int argc, char *argv[])
argv + 2,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
}
} else if (strcmp (mode, "install") == 0) {
@@ -1920,7 +1940,7 @@ main (int argc, char *argv[])
argv + 2,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "install-sig") == 0) {
if (value == NULL || details == NULL || parameter == NULL) {
@@ -1938,7 +1958,7 @@ main (int argc, char *argv[])
parameter,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
} else if (strcmp (mode, "remove") == 0) {
if (value == NULL) {
@@ -1992,7 +2012,7 @@ main (int argc, char *argv[])
value,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
} else if (strcmp (mode, "update") == 0) {
if (value == NULL) {
@@ -2019,7 +2039,7 @@ main (int argc, char *argv[])
argv + 2,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "repo-enable") == 0) {
if (value == NULL) {
@@ -2036,7 +2056,7 @@ main (int argc, char *argv[])
TRUE,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "repo-disable") == 0) {
if (value == NULL) {
@@ -2053,7 +2073,7 @@ main (int argc, char *argv[])
FALSE,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "repo-set-data") == 0) {
if (value == NULL || details == NULL || parameter == NULL) {
@@ -2070,7 +2090,7 @@ main (int argc, char *argv[])
parameter,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
} else if (strcmp (mode, "repo-remove") == 0) {
if (value == NULL || details == NULL) {
@@ -2088,14 +2108,14 @@ main (int argc, char *argv[])
atoi (details),
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
} else if (strcmp (mode, "repo-list") == 0) {
pk_task_get_repo_list_async (PK_TASK (ctx->task),
ctx->filters,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "get-time") == 0) {
PkRoleEnum role;
@@ -2144,7 +2164,7 @@ main (int argc, char *argv[])
pk_client_get_distro_upgrades_async (PK_CLIENT (ctx->task),
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
} else if (strcmp (mode, "get-update-detail") == 0) {
if (value == NULL) {
@@ -2186,7 +2206,7 @@ main (int argc, char *argv[])
argv + 2,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "get-details") == 0) {
if (value == NULL) {
@@ -2237,20 +2257,20 @@ main (int argc, char *argv[])
ctx->filters,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "get-categories") == 0) {
pk_task_get_categories_async (PK_TASK (ctx->task),
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "get-packages") == 0) {
pk_task_get_packages_async (PK_TASK (ctx->task),
ctx->filters,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "upgrade-system") == 0) {
/* do the system upgrade */
@@ -2341,7 +2361,7 @@ main (int argc, char *argv[])
10,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_client_finished_cb, ctx);
} else if (strcmp (mode, "refresh") == 0) {
gboolean force = (value != NULL && g_strcmp0 (value, "force") == 0);
@@ -2349,12 +2369,12 @@ main (int argc, char *argv[])
force,
ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "repair") == 0) {
pk_task_repair_system_async (PK_TASK (ctx->task), ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else if (strcmp (mode, "list-create") == 0) {
if (value == NULL) {
@@ -2386,7 +2406,7 @@ main (int argc, char *argv[])
g_free);
pk_task_get_packages_async (PK_TASK (ctx->task), ctx->filters, ctx->cancellable,
pk_console_progress_cb, ctx,
- pk_console_finished_cb, ctx);
+ pk_console_task_finished_cb, ctx);
} else {
error = g_error_new (PK_CONSOLE_ERROR,
PK_ERROR_ENUM_INTERNAL_ERROR,
From cbb5a6d5ca849e4dca5a68b13ee655146996f002 Mon Sep 17 00:00:00 2001
Date: Mon, 22 Jul 2024 12:20:16 +0200
Subject: [PATCH] pk-client: Fix runtime warning when backend does not support
role
The daemon returns "op not supported by the backend" as part of the method
call response, but this response can be received after the "Destroy" signal,
which causes infinite wait for the transaction end and runtime warnings
about NULL error being passed to the g_task_return_error() on the client side.
This is a regression from commit https://github.com/PackageKit/PackageKit/commit/44215db95d9cfda23045d9a9b97175519f473eb2
---
lib/packagekit-glib2/pk-client.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/packagekit-glib2/pk-client.c b/lib/packagekit-glib2/pk-client.c
index 735c718cb..3cbb0d859 100644
--- a/lib/packagekit-glib2/pk-client.c
+++ b/lib/packagekit-glib2/pk-client.c
@@ -1616,11 +1616,11 @@ pk_client_signal_cb (GDBusProxy *proxy,
if (g_strcmp0 (signal_name, "Destroy") == 0) {
g_autoptr(GError) local_error = NULL;
- if (state->waiting_for_finished)
+ if (state->waiting_for_finished) {
local_error = g_error_new_literal (PK_CLIENT_ERROR, PK_CLIENT_ERROR_FAILED,
"PackageKit transaction disappeared");
-
- pk_client_state_finish (state, g_steal_pointer (&local_error));
+ pk_client_state_finish (state, g_steal_pointer (&local_error));
+ }
return;
}
}