Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add a convertor from a SAT problem to pkg_jobs.
Vsevolod Stakhov committed 12 years ago
commit 789666c76e0d17d2ae5b90a4abf214e78b2fbf7a
parent 00663ac
2 files changed +26 -0
modified libpkg/pkg.h.in
@@ -1185,6 +1185,12 @@ struct pkg_solve_problem * pkg_solve_jobs_to_sat(struct pkg_jobs *j);
int pkg_solve_dimacs_export(struct pkg_solve_problem *problem, FILE *f);

/**
+
 * Move solved problem to the jobs structure
+
 * @return error code
+
 */
+
int pkg_solve_sat_to_jobs(struct pkg_solve_problem *problem, struct pkg_jobs *j);
+

+
/**
 * Free a SAT problem structure
 */
void pkg_solve_problem_free(struct pkg_solve_problem *problem);
modified libpkg/pkg_solve.c
@@ -675,3 +675,23 @@ pkg_solve_dimacs_export(struct pkg_solve_problem *problem, FILE *f)

	return (EPKG_OK);
}
+

+
int
+
pkg_solve_sat_to_jobs(struct pkg_solve_problem *problem, struct pkg_jobs *j)
+
{
+
	struct pkg_solve_variable *var, *vtmp;
+
	const char *origin;
+

+
	HASH_ITER(hd, problem->variables_by_digest, var, vtmp) {
+
		if (!var->resolved)
+
			return (EPKG_FATAL);
+

+
		pkg_get(var->pkg, PKG_ORIGIN, &origin);
+
		if (var->to_install && var->pkg->type != PKG_INSTALLED)
+
			HASH_ADD_KEYPTR(hh, j->jobs_add, origin, strlen(origin), var->pkg);
+
		else if (!var->to_install && var->pkg->type == PKG_INSTALLED)
+
			HASH_ADD_KEYPTR(hh, j->jobs_delete, origin, strlen(origin), var->pkg);
+
	}
+

+
	return (EPKG_OK);
+
}