]> git.ipfire.org Git - pakfire.git/commitdiff
request: Move multiinstall packages
authorMichael Tremer <michael.tremer@ipfire.org>
Fri, 25 Jun 2021 15:30:47 +0000 (15:30 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Fri, 25 Jun 2021 15:30:47 +0000 (15:30 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/libpakfire/pakfire.c
src/libpakfire/request.c

index 0da3f13b3bff133afca9f01b3b68dbcd155c6345..d56adfe2eff40cd8cb7206b3d1e5f2d3c24645d0 100644 (file)
@@ -116,15 +116,6 @@ static const struct pakfire_feature {
        { NULL },
 };
 
-/*
-       These packages can be installed multiple times simultaneously
-*/
-const char* pakfire_multiinstall_packages[] = {
-       "kernel",
-       "kernel-devel",
-       NULL,
-};
-
 int pakfire_on_root(Pakfire pakfire) {
        return (strcmp(pakfire->path, "/") == 0);
 }
@@ -425,10 +416,6 @@ static int pakfire_populate_pool(Pakfire pakfire) {
        // Install namespace callback
        pool_setnamespacecallback(pool, pakfire_namespace_callback, pakfire);
 
-       // Add multiinstall packages
-       pakfire_pool_add_multiinstall(pool);
-
-
        // 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 37b3b2ad91a3db2a2762f0f45c2c99e18fc3b90d..8187d7bca4378614f3537bb0351705489400ebd7 100644 (file)
@@ -52,6 +52,15 @@ struct pakfire_request {
        Queue jobs;
 };
 
+/*
+       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);
@@ -61,6 +70,19 @@ 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];
@@ -102,6 +124,10 @@ static int setup_solver(struct pakfire_request* request, int flags) {
        /* no arch change for forcebest */
        solver_set_flag(request->solver, SOLVER_FLAG_BEST_OBEY_POLICY, 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);