From: Michael Tremer Date: Fri, 25 Jun 2021 15:30:47 +0000 (+0000) Subject: request: Move multiinstall packages X-Git-Tag: 0.9.28~1172 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=df42ab4073371c2dbd0ede8e243dc1a3f1f1d7a4;p=pakfire.git request: Move multiinstall packages Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 0da3f13b3..d56adfe2e 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -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) diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 37b3b2ad9..8187d7bca 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -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);