From 4f40b7d663b13fb851581a15dc30f9b4d7d50434 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 8 May 2023 12:05:46 +0000 Subject: [PATCH] request: Fix passing solver flags Signed-off-by: Michael Tremer --- src/libpakfire/request.c | 49 ++++++++++------------------------------ 1 file changed, 12 insertions(+), 37 deletions(-) diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 696632420..1036fc781 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -74,36 +74,12 @@ static void pakfire_request_free(struct pakfire_request* request) { free(request); } -/* - This function translates any modifying flags into flags for libsolv -*/ -static int pakfire_request_job_flags(int flags) { - int solver_flags = 0; - - // Essential jobs - if (flags & PAKFIRE_REQUEST_ESSENTIAL) - solver_flags |= SOLVER_ESSENTIAL; - - // Keep any dependencies - if (!(flags & PAKFIRE_REQUEST_KEEP_DEPS)) - solver_flags |= SOLVER_CLEANDEPS; - - // Drop orphans - if (!(flags & PAKFIRE_REQUEST_KEEP_ORPHANED)) - solver_flags |= SOLVER_DROP_ORPHANED; - - return solver_flags; -} - 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; - // Translate flags - flags = pakfire_request_job_flags(flags); - for (const char** package = packages; *package; package++) { Id id = pool_str2id(pool, *package, 1); if (id) @@ -283,7 +259,7 @@ static int pakfire_request_is_file(const char* what) { static int __pakfire_request_add(struct pakfire_request* request, const enum pakfire_request_action action, const Id type, const Id id, int flags) { Id _action = ID_NULL; - int permitted_flags = PAKFIRE_REQUEST_ESSENTIAL; + int solvflags = 0; // Check if type/ID is not set for actions that don't support it switch (action) { @@ -300,6 +276,10 @@ static int __pakfire_request_add(struct pakfire_request* request, } } + // Essential jobs + if (flags & PAKFIRE_REQUEST_ESSENTIAL) + solvflags |= SOLVER_ESSENTIAL; + // Select the correct action switch (action) { case PAKFIRE_REQ_INSTALL: @@ -309,7 +289,9 @@ static int __pakfire_request_add(struct pakfire_request* request, case PAKFIRE_REQ_ERASE: _action = SOLVER_ERASE; - permitted_flags |= PAKFIRE_REQUEST_KEEP_DEPS; + // Should we keep any dependencies? + if (!(flags & PAKFIRE_REQUEST_KEEP_DEPS)) + solvflags |= SOLVER_CLEANDEPS; break; case PAKFIRE_REQ_UPDATE: @@ -323,7 +305,9 @@ static int __pakfire_request_add(struct pakfire_request* request, case PAKFIRE_REQ_SYNC: _action = SOLVER_DISTUPGRADE|SOLVER_SOLVABLE_ALL; - permitted_flags |= PAKFIRE_REQUEST_KEEP_ORPHANED; + // Drop orphans? + if (!(flags & PAKFIRE_REQUEST_KEEP_ORPHANED)) + solvflags |= SOLVER_DROP_ORPHANED; break; case PAKFIRE_REQ_LOCK: @@ -335,17 +319,8 @@ static int __pakfire_request_add(struct pakfire_request* request, break; } - // Filter out any unsupported flags for the selected action - flags &= permitted_flags; - - // Translate flags - flags = pakfire_request_job_flags(flags); - - // XXX reset flags because the translation is broken - flags = 0; - // Add it to the job queue - queue_push2(&request->jobs, _action|type|flags, id); + queue_push2(&request->jobs, _action|type|solvflags, id); return 0; } -- 2.39.5