}
}
- int solved = 0;
-
// Solve the request
- while (!solved) {
- r = pakfire_request_solve(request);
- switch (r) {
- case 0:
- solved = 1;
- break;
-
- // Dependency error
- case 2:
- // Let the user choose a problem
- r = pakfire_ui_pick_solution(pakfire, request);
- if (r)
- goto ERROR;
- break;
-
- // Another error occured
- default:
- goto ERROR;
- }
- }
+ r = pakfire_request_solve(request);
+ if (r)
+ goto ERROR;
// Fetch the transaction
r = pakfire_request_get_transaction(request, &transaction);
if (r)
goto ERROR;
- int solved = 0;
-
// Solve the request
- while (!solved) {
- r = pakfire_request_solve(request);
- switch (r) {
- case 0:
- solved = 1;
- break;
-
- // Dependency error
- case 2:
- // Let the user choose a problem
- r = pakfire_ui_pick_solution(pakfire, request);
- if (r)
- goto ERROR;
-
- break;
-
- // Another error occured
- default:
- goto ERROR;
- }
- }
+ r = pakfire_request_solve(request);
+ if (r)
+ goto ERROR;
// Fetch the transaction
r = pakfire_request_get_transaction(request, &transaction);
#include <pakfire/request.h>
#include <pakfire/string.h>
#include <pakfire/transaction.h>
+#include <pakfire/ui.h>
#include <pakfire/util.h>
struct pakfire_request {
Solver* solver;
Queue jobs;
+
+ // Set if the request has been solved
+ int solved:1;
};
/*
return request->solver;
}
+static int pakfire_request_pick_solution(struct pakfire_request* request) {
+ // XXX TODO this is just a dummy
+ return pakfire_ui_pick_solution(request->pakfire, request);
+}
+
int pakfire_request_solve(struct pakfire_request* request) {
+ int r;
+
// Prepare pool
pakfire_pool_internalize(request->pakfire);
// Save time when we starting solving
clock_t solving_start = clock();
- if (solver_solve(request->solver, &request->jobs)) {
+ for (;;) {
+ r = solver_solve(request->solver, &request->jobs);
+ if (r == 0)
+ break;
+
+ // We land here, if the request could not be solved
+
#ifdef ENABLE_DEBUG
+ // Print all solutions
solver_printallsolutions(request->solver);
#endif
- return 2;
+ // Ask the user to pick a solution
+ r = pakfire_request_pick_solution(request);
+ if (r)
+ return r;
}
+ // Mark the request as solved
+ request->solved = 1;
+
// Save time when we finished solving
clock_t solving_end = clock();