From: Michael Tremer Date: Fri, 4 Nov 2022 11:27:25 +0000 (+0000) Subject: requests: Move the solution picking here X-Git-Tag: 0.9.28~135 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=46f0079d5ec9c26bb7527c682b37f3dbae6e2e38;p=pakfire.git requests: Move the solution picking here Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 427a40fa2..92809d0b9 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -1751,29 +1751,10 @@ static int pakfire_perform_transaction( } } - 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); @@ -1877,30 +1858,10 @@ static int pakfire_perform_transaction_simple(struct pakfire* pakfire, int solve 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); diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 8cc773d8c..696632420 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -42,6 +42,7 @@ #include #include #include +#include #include struct pakfire_request { @@ -50,6 +51,9 @@ struct pakfire_request { Solver* solver; Queue jobs; + + // Set if the request has been solved + int solved:1; }; /* @@ -214,7 +218,14 @@ Solver* pakfire_request_get_solver(struct pakfire_request* request) { 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); @@ -230,14 +241,27 @@ int pakfire_request_solve(struct pakfire_request* request) { // 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();