]> git.ipfire.org Git - pakfire.git/commitdiff
request: Implement multiinstall for kernel as pooljobs
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 8 May 2023 12:15:27 +0000 (12:15 +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/pakfire.c
src/libpakfire/request.c

index 15e0024fcc5ea8be48ea9d117657f75a0a005eaf..5809de3443985d04b6a2481e2f67b1f27c32020f 100644 (file)
@@ -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)
index 1036fc7811f9ff6329bb0e68abace00e69270c12..99a42b37750de805ec25aba326601c8f82b01e8f 100644 (file)
@@ -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);