From 7f5e36611928f07b4a8b844430193d38d043da83 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 8 May 2023 12:15:27 +0000 Subject: [PATCH] request: Implement multiinstall for kernel as pooljobs Signed-off-by: Michael Tremer --- src/libpakfire/pakfire.c | 15 +++++++++++++++ src/libpakfire/request.c | 26 -------------------------- 2 files changed, 15 insertions(+), 26 deletions(-) diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 15e0024fc..5809de344 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -325,6 +325,21 @@ static int pakfire_populate_pool(struct pakfire* pakfire) { // Install namespace callback pool_setnamespacecallback(pool, pakfire_namespace_callback, pakfire); + // These packages can be installed multiple times simultaneously + static const char* pakfire_multiinstall_packages[] = { + "kernel", + "kernel-devel", + NULL, + }; + + for (const char** package = pakfire_multiinstall_packages; *package; package++) { + Id id = pakfire_str2dep(pakfire, *package); + if (!id) + continue; + + queue_push2(&pool->pooljobs, SOLVER_SOLVABLE_PROVIDES|SOLVER_MULTIVERSION, id); + } + // Open database in read-only mode and try to load all installed packages r = pakfire_db_open(&db, pakfire, PAKFIRE_DB_READWRITE); if (r) diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 1036fc781..99a42b377 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -56,15 +56,6 @@ struct pakfire_request { int solved:1; }; -/* - These packages can be installed multiple times simultaneously -*/ -const char* pakfire_multiinstall_packages[] = { - "kernel", - "kernel-devel", - NULL, -}; - static void pakfire_request_free(struct pakfire_request* request) { if (request->solver) solver_free(request->solver); @@ -74,19 +65,6 @@ static void pakfire_request_free(struct pakfire_request* request) { free(request); } -static void pakfire_request_add_packages(struct pakfire_request* request, - int flags, const char** packages) { - Pool* pool = pakfire_get_solv_pool(request->pakfire); - if (!pool) - return; - - for (const char** package = packages; *package; package++) { - Id id = pool_str2id(pool, *package, 1); - if (id) - queue_push2(&request->jobs, flags, id); - } -} - static void pakfire_request_lock_running_kernel(struct pakfire_request* request) { struct utsname utsname; char buffer[NAME_MAX]; @@ -125,10 +103,6 @@ static int setup_solver(struct pakfire_request* request, int flags) { if (flags & PAKFIRE_REQUEST_WITHOUT_RECOMMENDED) solver_set_flag(request->solver, SOLVER_FLAG_IGNORE_RECOMMENDED, 1); - // Add multiinstall packages - pakfire_request_add_packages(request, - SOLVER_MULTIVERSION|SOLVER_SOLVABLE_PROVIDES, pakfire_multiinstall_packages); - // Lock the running kernel if (pakfire_on_root(request->pakfire)) pakfire_request_lock_running_kernel(request); -- 2.39.5