From: Michael Tremer Date: Sat, 3 Jul 2021 12:46:13 +0000 (+0000) Subject: request: Implement taking a solution X-Git-Tag: 0.9.28~1119 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=954f0a83cd92509c23bc0845a124943d367bc6a9;p=pakfire.git request: Implement taking a solution Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/solution.h b/src/libpakfire/include/pakfire/solution.h index bf26dc633..bdb8a683f 100644 --- a/src/libpakfire/include/pakfire/solution.h +++ b/src/libpakfire/include/pakfire/solution.h @@ -34,4 +34,11 @@ struct pakfire_solution* pakfire_solution_unref(struct pakfire_solution* solutio const char* pakfire_solution_to_string(struct pakfire_solution* solution); +#ifdef PAKFIRE_PRIVATE + +struct pakfire_problem* pakfire_solution_get_problem(struct pakfire_solution* solution); +Id pakfire_solution_get_id(struct pakfire_solution* solution); + +#endif /* PAKFIRE_PRIVATE */ + #endif /* PAKFIRE_SOLUTION_H */ diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index e6351e98c..2137a859e 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -291,6 +291,7 @@ global: pakfire_request_ref; pakfire_request_solve; pakfire_request_sync; + pakfire_request_take_solution; pakfire_request_upgrade; pakfire_request_upgrade_all; pakfire_request_upgrade_package; diff --git a/src/libpakfire/request.c b/src/libpakfire/request.c index 6767ca703..b736184ba 100644 --- a/src/libpakfire/request.c +++ b/src/libpakfire/request.c @@ -572,3 +572,18 @@ PAKFIRE_EXPORT int pakfire_request_verify(struct pakfire_request* request, int f return 0; } + +PAKFIRE_EXPORT int pakfire_request_take_solution(struct pakfire_request* request, + struct pakfire_solution* solution) { + struct pakfire_problem* problem = pakfire_solution_get_problem(solution); + + // Fetch IDs + Id problem_id = pakfire_problem_get_id(problem); + Id solution_id = pakfire_solution_get_id(solution); + + // Feed the solution into the solver + solver_take_solution(request->solver, problem_id, solution_id, &request->jobs); + + pakfire_problem_unref(problem); + return 0; +} diff --git a/src/libpakfire/solution.c b/src/libpakfire/solution.c index d9d530fa8..9a2f9c4a6 100644 --- a/src/libpakfire/solution.c +++ b/src/libpakfire/solution.c @@ -84,6 +84,14 @@ PAKFIRE_EXPORT struct pakfire_solution* pakfire_solution_unref(struct pakfire_so return NULL; } +struct pakfire_problem* pakfire_solution_get_problem(struct pakfire_solution* solution) { + return pakfire_problem_ref(solution->problem); +} + +Id pakfire_solution_get_id(struct pakfire_solution* solution) { + return solution->id; +} + static char* pakfire_solution_make_string(struct pakfire_solution* solution) { struct pakfire_request* request = pakfire_problem_get_request(solution->problem); Solver* solver = pakfire_request_get_solver(request);