#include <pakfire/parser.h>
#include <pakfire/private.h>
#include <pakfire/repo.h>
+#include <pakfire/request.h>
#include <pakfire/scriptlet.h>
#include <pakfire/util.h>
};
// Install the package into the build environment
- r = pakfire_install(pakfire, 0, packages, NULL, 0, NULL, NULL, NULL);
+ r = pakfire_install(pakfire, 0, packages, NULL, PAKFIRE_REQUEST_ESSENTIAL,
+ NULL, NULL, NULL);
if (r) {
ERROR(pakfire, "Could not install %s\n", path);
goto ERROR;
enum pakfire_request_job_flags {
PAKFIRE_REQUEST_KEEP_DEPS = 1 << 0,
PAKFIRE_REQUEST_KEEP_ORPHANED = 1 << 1,
+ PAKFIRE_REQUEST_ESSENTIAL = 1 << 2,
};
int pakfire_request_create(struct pakfire_request** request, struct pakfire* pakfire, int flags);
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;
+
+ 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)
// Get the solvable ID
Id id = pakfire_package_id(pkg);
+ // Translate flags
+ flags = pakfire_request_job_flags(flags);
+
// Add it to the job queue
queue_push2(&request->jobs, SOLVER_SOLVABLE|action|flags, id);
DEBUG(request->pakfire, "Found %d match(es) for '%s'\n", jobs.count / 2, what);
+ // Translate flags
+ const int job_flags = pakfire_request_job_flags(extra_flags);
+
// Set action and global flags
for (int i = 0; i < jobs.count; i += 2)
- jobs.elements[i] |= action | extra_flags;
+ jobs.elements[i] |= action | job_flags;
// Merge jobs into the main job queue
queue_insertn(&request->jobs, request->jobs.count, jobs.count, jobs.elements);