]> git.ipfire.org Git - pakfire.git/commitdiff
request: Fix passing solver flags
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 May 2023 12:05:46 +0000 (12:05 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 May 2023 12:24:36 +0000 (12:24 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/request.c

index 696632420a5d5f3ce9ccfd745e7b5814fa2e168f..1036fc7811f9ff6329bb0e68abace00e69270c12 100644 (file)
@@ -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;
 }