From: Michael Tremer Date: Mon, 8 May 2023 12:15:27 +0000 (+0000) Subject: request: Implement multiinstall for kernel as pooljobs X-Git-Tag: 0.9.29~158 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7f5e36611928f07b4a8b844430193d38d043da83;p=pakfire.git request: Implement multiinstall for kernel as pooljobs Signed-off-by: Michael Tremer --- 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);