r = pakfire_packagelist_walk(build->packages, pakfire_build_install_package, request);
// Solve the request
- r = pakfire_request_solve(request, NULL);
+ r = pakfire_request_solve(request);
switch (r) {
// All okay
case 0:
struct pakfire_request* pakfire_request_ref(struct pakfire_request* request);
struct pakfire_request* pakfire_request_unref(struct pakfire_request* request);
-int pakfire_request_solve(struct pakfire_request* request,
- struct pakfire_transaction** transaction);
+int pakfire_request_solve(struct pakfire_request* request);
int pakfire_request_add(struct pakfire_request* request,
const enum pakfire_request_action action, const char* what, int flags);
int pakfire_request_next_problem(
struct pakfire_request* request, struct pakfire_problem** problem);
+int pakfire_request_get_transaction(struct pakfire_request* request,
+ struct pakfire_transaction** transaction);
+
#endif
#endif /* PAKFIRE_REQUEST_H */
// Solve the request
while (!solved) {
- r = pakfire_request_solve(request, &transaction);
+ r = pakfire_request_solve(request);
switch (r) {
case 0:
solved = 1;
}
}
+ // Fetch the transaction
+ r = pakfire_request_get_transaction(request, &transaction);
+ if (r)
+ goto ERROR;
+
// Set how many packages have been changed
if (changed)
*changed = pakfire_transaction_count(transaction);
// Solve the request
while (!solved) {
- r = pakfire_request_solve(request, &transaction);
+ r = pakfire_request_solve(request);
switch (r) {
case 0:
solved = 1;
}
}
+ // Fetch the transaction
+ r = pakfire_request_get_transaction(request, &transaction);
+ if (r)
+ goto ERROR;
+
// Set how many packages have been changed
if (changed)
*changed = pakfire_transaction_count(transaction);
return request->solver;
}
-int pakfire_request_solve(struct pakfire_request* request,
- struct pakfire_transaction** transaction) {
- int r;
-
+int pakfire_request_solve(struct pakfire_request* request) {
// Prepare pool
pakfire_pool_internalize(request->pakfire);
- // Reset pointer
- if (transaction)
- *transaction = NULL;
-
#ifdef ENABLE_DEBUG
Pool* pool = pakfire_get_solv_pool(request->pakfire);
solver_printdecisions(request->solver);
#endif
- // If the solving process was successful, we create the transaction
- if (transaction) {
- r = pakfire_transaction_create(transaction, request->pakfire, request->solver);
- if (r)
- goto ERROR;
- }
-
// All okay
return 0;
-
-ERROR:
- if (transaction && *transaction)
- pakfire_transaction_unref(*transaction);
-
- return r;
}
static int pakfire_request_is_file(const char* what) {
pakfire_problem_unref(problem);
return 0;
}
+
+int pakfire_request_get_transaction(struct pakfire_request* request,
+ struct pakfire_transaction** transaction) {
+ // XXX Check if we have solved successfully
+
+ // Create the transaction
+ return pakfire_transaction_create(transaction, request->pakfire, request->solver);
+}