#ifndef PAKFIRE_REQUEST_H
#define PAKFIRE_REQUEST_H
-#include <solv/queue.h>
-#include <solv/transaction.h>
-
#include <pakfire/types.h>
+struct pakfire_request;
+
enum _pakfire_request_op_flags {
PAKFIRE_CHECK_INSTALLED = 1 << 0,
PAKFIRE_CLEAN_DEPS = 1 << 1,
PAKFIRE_SOLVER_ALLOW_VENDORCHANGE = 1 << 5,
};
-PakfireRequest pakfire_request_create(Pakfire pakfire);
+int pakfire_request_create(struct pakfire_request** request, Pakfire pakfire);
-PakfireRequest pakfire_request_ref(PakfireRequest request);
-PakfireRequest pakfire_request_unref(PakfireRequest request);
+struct pakfire_request* pakfire_request_ref(struct pakfire_request* request);
+struct pakfire_request* pakfire_request_unref(struct pakfire_request* request);
-int pakfire_request_solve(PakfireRequest request, int flags);
-PakfireProblem pakfire_request_get_problems(PakfireRequest request);
-PakfireTransaction pakfire_request_get_transaction(PakfireRequest request);
+int pakfire_request_solve(struct pakfire_request* request, int flags);
+PakfireProblem pakfire_request_get_problems(struct pakfire_request* request);
+PakfireTransaction pakfire_request_get_transaction(struct pakfire_request* request);
-int pakfire_request_install(PakfireRequest request, PakfirePackage package);
-int pakfire_request_install_relation(PakfireRequest request, PakfireRelation relation);
-int pakfire_request_install_selector(PakfireRequest request, PakfireSelector selector);
+int pakfire_request_install(struct pakfire_request* request, PakfirePackage package);
+int pakfire_request_install_relation(struct pakfire_request* request, PakfireRelation relation);
+int pakfire_request_install_selector(struct pakfire_request* request, PakfireSelector selector);
-int pakfire_request_erase(PakfireRequest request, PakfirePackage package, int flags);
-int pakfire_request_erase_relation(PakfireRequest request, PakfireRelation relation, int flags);
-int pakfire_request_erase_selector(PakfireRequest request, PakfireSelector selector, int flags);
+int pakfire_request_erase(struct pakfire_request* request, PakfirePackage package, int flags);
+int pakfire_request_erase_relation(struct pakfire_request* request, PakfireRelation relation, int flags);
+int pakfire_request_erase_selector(struct pakfire_request* request, PakfireSelector selector, int flags);
-int pakfire_request_upgrade(PakfireRequest request, PakfirePackage package);
-int pakfire_request_upgrade_relation(PakfireRequest request, PakfireRelation relation);
-int pakfire_request_upgrade_selector(PakfireRequest request, PakfireSelector selector);
+int pakfire_request_upgrade(struct pakfire_request* request, PakfirePackage package);
+int pakfire_request_upgrade_relation(struct pakfire_request* request, PakfireRelation relation);
+int pakfire_request_upgrade_selector(struct pakfire_request* request, PakfireSelector selector);
-int pakfire_request_upgrade_all(PakfireRequest request);
-int pakfire_request_distupgrade(PakfireRequest request);
+int pakfire_request_upgrade_all(struct pakfire_request* request);
+int pakfire_request_distupgrade(struct pakfire_request* request);
-int pakfire_request_lock(PakfireRequest request, PakfirePackage package);
-int pakfire_request_lock_relation(PakfireRequest request, PakfireRelation relation);
-int pakfire_request_lock_selector(PakfireRequest request, PakfireSelector selector);
+int pakfire_request_lock(struct pakfire_request* request, PakfirePackage package);
+int pakfire_request_lock_relation(struct pakfire_request* request, PakfireRelation relation);
+int pakfire_request_lock_selector(struct pakfire_request* request, PakfireSelector selector);
-int pakfire_request_verify(PakfireRequest request);
+int pakfire_request_verify(struct pakfire_request* request);
#ifdef PAKFIRE_PRIVATE
#include <solv/solver.h>
-Pakfire pakfire_request_get_pakfire(PakfireRequest request);
-Solver* pakfire_request_get_solver(PakfireRequest request);
+Pakfire pakfire_request_get_pakfire(struct pakfire_request* request);
+Solver* pakfire_request_get_solver(struct pakfire_request* request);
#endif
#include <pakfire/types.h>
#include <pakfire/util.h>
-struct _PakfireRequest {
+struct pakfire_request {
Pakfire pakfire;
- Queue queue;
+ int nrefs;
+
Solver* solver;
Transaction* transaction;
- int nrefs;
-};
-PAKFIRE_EXPORT PakfireRequest pakfire_request_create(Pakfire pakfire) {
- PakfireRequest request = calloc(1, sizeof(*request));
- if (request) {
- DEBUG(pakfire, "Allocated Request at %p\n", request);
- request->nrefs = 1;
+ Queue queue;
+};
- request->pakfire = pakfire_ref(pakfire);
- queue_init(&request->queue);
- }
+PAKFIRE_EXPORT int pakfire_request_create(struct pakfire_request** request, Pakfire pakfire) {
+ struct pakfire_request* req = calloc(1, sizeof(*req));
+ if (!req)
+ return ENOMEM;
- return request;
-}
+ req->pakfire = pakfire_ref(pakfire);
+ req->nrefs = 1;
-PAKFIRE_EXPORT PakfireRequest pakfire_request_ref(PakfireRequest request) {
- request->nrefs++;
+ queue_init(&req->queue);
- return request;
+ *request = req;
+ return 0;
}
-static void pakfire_request_free(PakfireRequest request) {
- DEBUG(request->pakfire, "Releasing Request at %p\n", request);
-
+static void pakfire_request_free(struct pakfire_request* request) {
if (request->transaction)
transaction_free(request->transaction);
-
if (request->solver)
solver_free(request->solver);
-
queue_free(&request->queue);
pakfire_unref(request->pakfire);
free(request);
}
-PAKFIRE_EXPORT PakfireRequest pakfire_request_unref(PakfireRequest request) {
- if (!request)
- return NULL;
+PAKFIRE_EXPORT struct pakfire_request* pakfire_request_ref(struct pakfire_request* request) {
+ request->nrefs++;
+
+ return request;
+}
+PAKFIRE_EXPORT struct pakfire_request* pakfire_request_unref(struct pakfire_request* request) {
if (--request->nrefs > 0)
return request;
return NULL;
}
-Pakfire pakfire_request_get_pakfire(PakfireRequest request) {
+Pakfire pakfire_request_get_pakfire(struct pakfire_request* request) {
return pakfire_ref(request->pakfire);
}
-Solver* pakfire_request_get_solver(PakfireRequest request) {
+Solver* pakfire_request_get_solver(struct pakfire_request* request) {
return request->solver;
}
-static int init_solver(PakfireRequest request, int flags) {
+static int init_solver(struct pakfire_request* request, int flags) {
Pool* p = pakfire_get_solv_pool(request->pakfire);
if (!p->installed)
return 0;
}
-static int solve(PakfireRequest request, Queue* queue) {
+static int solve(struct pakfire_request* request, Queue* queue) {
/* Remove any previous transactions */
if (request->transaction) {
transaction_free(request->transaction);
return 0;
}
-PAKFIRE_EXPORT int pakfire_request_solve(PakfireRequest request, int flags) {
+PAKFIRE_EXPORT int pakfire_request_solve(struct pakfire_request* request, int flags) {
int r = init_solver(request, flags);
if (r) {
ERROR(request->pakfire, "Could not initialize the solver: %s\n", strerror(errno));
return r;
}
-PAKFIRE_EXPORT PakfireProblem pakfire_request_get_problems(PakfireRequest request) {
+PAKFIRE_EXPORT PakfireProblem pakfire_request_get_problems(struct pakfire_request* request) {
Id problem = 0;
PakfireProblem ret = NULL;
return ret;
}
-PAKFIRE_EXPORT PakfireTransaction pakfire_request_get_transaction(PakfireRequest request) {
+PAKFIRE_EXPORT PakfireTransaction pakfire_request_get_transaction(struct pakfire_request* request) {
if (!request->transaction)
return NULL;
return pakfire_transaction_create(request->pakfire, request->transaction);
}
-PAKFIRE_EXPORT int pakfire_request_install(PakfireRequest request, PakfirePackage package) {
+PAKFIRE_EXPORT int pakfire_request_install(struct pakfire_request* request, PakfirePackage package) {
queue_push2(&request->queue, SOLVER_SOLVABLE|SOLVER_INSTALL, pakfire_package_id(package));
return 0;
}
-PAKFIRE_EXPORT int pakfire_request_install_relation(PakfireRequest request, PakfireRelation relation) {
+PAKFIRE_EXPORT int pakfire_request_install_relation(struct pakfire_request* request, PakfireRelation relation) {
return pakfire_relation2queue(relation, &request->queue, SOLVER_INSTALL);
}
-PAKFIRE_EXPORT int pakfire_request_install_selector(PakfireRequest request, PakfireSelector selector) {
+PAKFIRE_EXPORT int pakfire_request_install_selector(struct pakfire_request* request, PakfireSelector selector) {
return pakfire_selector2queue(selector, &request->queue, SOLVER_INSTALL);
}
return additional;
}
-PAKFIRE_EXPORT int pakfire_request_erase(PakfireRequest request, PakfirePackage package, int flags) {
+PAKFIRE_EXPORT int pakfire_request_erase(struct pakfire_request* request, PakfirePackage package, int flags) {
int additional = erase_flags(flags);
queue_push2(&request->queue, SOLVER_SOLVABLE|SOLVER_ERASE|additional, pakfire_package_id(package));
return 0;
}
-PAKFIRE_EXPORT int pakfire_request_erase_relation(PakfireRequest request, PakfireRelation relation, int flags) {
+PAKFIRE_EXPORT int pakfire_request_erase_relation(struct pakfire_request* request, PakfireRelation relation, int flags) {
int additional = erase_flags(flags);
return pakfire_relation2queue(relation, &request->queue, SOLVER_ERASE|additional);
}
-PAKFIRE_EXPORT int pakfire_request_erase_selector(PakfireRequest request, PakfireSelector selector, int flags) {
+PAKFIRE_EXPORT int pakfire_request_erase_selector(struct pakfire_request* request, PakfireSelector selector, int flags) {
int additional = erase_flags(flags);
return pakfire_selector2queue(selector, &request->queue, SOLVER_ERASE|additional);
}
-PAKFIRE_EXPORT int pakfire_request_upgrade(PakfireRequest request, PakfirePackage package) {
+PAKFIRE_EXPORT int pakfire_request_upgrade(struct pakfire_request* request, PakfirePackage package) {
return pakfire_request_install(request, package);
}
-PAKFIRE_EXPORT int pakfire_request_upgrade_relation(PakfireRequest request, PakfireRelation relation) {
+PAKFIRE_EXPORT int pakfire_request_upgrade_relation(struct pakfire_request* request, PakfireRelation relation) {
return pakfire_relation2queue(relation, &request->queue, SOLVER_UPDATE);
}
-PAKFIRE_EXPORT int pakfire_request_upgrade_selector(PakfireRequest request, PakfireSelector selector) {
+PAKFIRE_EXPORT int pakfire_request_upgrade_selector(struct pakfire_request* request, PakfireSelector selector) {
return pakfire_selector2queue(selector, &request->queue, SOLVER_UPDATE);
}
-PAKFIRE_EXPORT int pakfire_request_upgrade_all(PakfireRequest request) {
+PAKFIRE_EXPORT int pakfire_request_upgrade_all(struct pakfire_request* request) {
queue_push2(&request->queue, SOLVER_UPDATE|SOLVER_SOLVABLE_ALL, 0);
return 0;
}
-PAKFIRE_EXPORT int pakfire_request_distupgrade(PakfireRequest request) {
+PAKFIRE_EXPORT int pakfire_request_distupgrade(struct pakfire_request* request) {
queue_push2(&request->queue, SOLVER_DISTUPGRADE|SOLVER_SOLVABLE_ALL, 0);
return 0;
}
-PAKFIRE_EXPORT int pakfire_request_lock(PakfireRequest request, PakfirePackage package) {
+PAKFIRE_EXPORT int pakfire_request_lock(struct pakfire_request* request, PakfirePackage package) {
queue_push2(&request->queue, SOLVER_SOLVABLE|SOLVER_LOCK, pakfire_package_id(package));
return 0;
}
-PAKFIRE_EXPORT int pakfire_request_lock_relation(PakfireRequest request, PakfireRelation relation) {
+PAKFIRE_EXPORT int pakfire_request_lock_relation(struct pakfire_request* request, PakfireRelation relation) {
return pakfire_relation2queue(relation, &request->queue, SOLVER_LOCK);
}
-PAKFIRE_EXPORT int pakfire_request_lock_selector(PakfireRequest request, PakfireSelector selector) {
+PAKFIRE_EXPORT int pakfire_request_lock_selector(struct pakfire_request* request, PakfireSelector selector) {
return pakfire_selector2queue(selector, &request->queue, SOLVER_LOCK);
}
-PAKFIRE_EXPORT int pakfire_request_verify(PakfireRequest request) {
+PAKFIRE_EXPORT int pakfire_request_verify(struct pakfire_request* request) {
queue_push2(&request->queue, SOLVER_VERIFY|SOLVER_SOLVABLE_ALL, 0);
return 0;