-void
-printprobleminfo(Solver *solv, Queue *job, Id problem)
-{
- Pool *pool = solv->pool;
- Id probr;
- Id dep, source, target;
- Solvable *s, *s2;
-
- probr = solver_findproblemrule(solv, problem);
- switch (solver_problemruleinfo(solv, job, probr, &dep, &source, &target))
- {
- case SOLVER_PROBLEM_UPDATE_RULE:
- s = pool_id2solvable(pool, source);
- POOL_DEBUG(SAT_DEBUG_RESULT, "problem with installed package %s\n", solvable2str(pool, s));
- return;
- case SOLVER_PROBLEM_JOB_RULE:
- POOL_DEBUG(SAT_DEBUG_RESULT, "conflicting requests\n");
- return;
- case SOLVER_PROBLEM_JOB_NOTHING_PROVIDES_DEP:
- POOL_DEBUG(SAT_DEBUG_RESULT, "nothing provides requested %s\n", dep2str(pool, dep));
- return;
- case SOLVER_PROBLEM_NOT_INSTALLABLE:
- s = pool_id2solvable(pool, source);
- POOL_DEBUG(SAT_DEBUG_RESULT, "package %s is not installable\n", solvable2str(pool, s));
- return;
- case SOLVER_PROBLEM_NOTHING_PROVIDES_DEP:
- s = pool_id2solvable(pool, source);
- POOL_DEBUG(SAT_DEBUG_RESULT, "nothing provides %s needed by %s\n", dep2str(pool, dep), solvable2str(pool, s));
- return;
- case SOLVER_PROBLEM_SAME_NAME:
- s = pool_id2solvable(pool, source);
- s2 = pool_id2solvable(pool, target);
- POOL_DEBUG(SAT_DEBUG_RESULT, "cannot install both %s and %s\n", solvable2str(pool, s), solvable2str(pool, s2));
- return;
- case SOLVER_PROBLEM_PACKAGE_CONFLICT:
- s = pool_id2solvable(pool, source);
- s2 = pool_id2solvable(pool, target);
- POOL_DEBUG(SAT_DEBUG_RESULT, "package %s conflicts with %s provided by %s\n", solvable2str(pool, s), dep2str(pool, dep), solvable2str(pool, s2));
- return;
- case SOLVER_PROBLEM_PACKAGE_OBSOLETES:
- s = pool_id2solvable(pool, source);
- s2 = pool_id2solvable(pool, target);
- POOL_DEBUG(SAT_DEBUG_RESULT, "package %s obsoletes %s provided by %s\n", solvable2str(pool, s), dep2str(pool, dep), solvable2str(pool, s2));
- return;
- case SOLVER_PROBLEM_DEP_PROVIDERS_NOT_INSTALLABLE:
- s = pool_id2solvable(pool, source);
- POOL_DEBUG(SAT_DEBUG_RESULT, "package %s requires %s, but none of the providers can be installed\n", solvable2str(pool, s), dep2str(pool, dep));
- return;
- }
-}
-
-void
-printsolutions(Solver *solv, Queue *job)
-{
- Pool *pool = solv->pool;
- int pcnt;
- Id p, rp, how, what;
- Id problem, solution, element;
- Solvable *s, *sd;
-
- POOL_DEBUG(SAT_DEBUG_RESULT, "Encountered problems! Here are the solutions:\n\n");
- pcnt = 1;
- problem = 0;
- while ((problem = solver_next_problem(solv, problem)) != 0)
- {
- POOL_DEBUG(SAT_DEBUG_RESULT, "Problem %d:\n", pcnt++);
- POOL_DEBUG(SAT_DEBUG_RESULT, "====================================\n");
- printprobleminfo(solv, job, problem);
- POOL_DEBUG(SAT_DEBUG_RESULT, "\n");
- solution = 0;
- while ((solution = solver_next_solution(solv, problem, solution)) != 0)
- {
- element = 0;
- while ((element = solver_next_solutionelement(solv, problem, solution, element, &p, &rp)) != 0)
- {
- if (p == 0)
- {
- /* job, rp is index into job queue */
- how = job->elements[rp - 1] & ~SOLVER_WEAK;
- what = job->elements[rp];
- switch (how)
- {
- case SOLVER_INSTALL_SOLVABLE:
- s = pool->solvables + what;
- if (solv->installed && s->repo == solv->installed)
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not keep %s installed\n", solvable2str(pool, s));
- else
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not install %s\n", solvable2str(pool, s));
- break;
- case SOLVER_ERASE_SOLVABLE:
- s = pool->solvables + what;
- if (solv->installed && s->repo == solv->installed)
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not deinstall %s\n", solvable2str(pool, s));
- else
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not forbid installation of %s\n", solvable2str(pool, s));
- break;
- case SOLVER_INSTALL_SOLVABLE_NAME:
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not install %s\n", dep2str(pool, what));
- break;
- case SOLVER_ERASE_SOLVABLE_NAME:
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not deinstall %s\n", dep2str(pool, what));
- break;
- case SOLVER_INSTALL_SOLVABLE_PROVIDES:
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not install a solvable providing %s\n", dep2str(pool, what));
- break;
- case SOLVER_ERASE_SOLVABLE_PROVIDES:
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not deinstall all solvables providing %s\n", dep2str(pool, what));
- break;
- case SOLVER_INSTALL_SOLVABLE_UPDATE:
- s = pool->solvables + what;
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do not install most recent version of %s\n", solvable2str(pool, s));
- break;
- default:
- POOL_DEBUG(SAT_DEBUG_RESULT, "- do something different\n");
- break;
- }
- }
- else
- {
- /* policy, replace p with rp */
- s = pool->solvables + p;
- sd = rp ? pool->solvables + rp : 0;
- if (sd)
- {
- int gotone = 0;
- if (!solv->allowdowngrade && evrcmp(pool, s->evr, sd->evr, EVRCMP_MATCH_RELEASE) > 0)
- {
- POOL_DEBUG(SAT_DEBUG_RESULT, "- allow downgrade of %s to %s\n", solvable2str(pool, s), solvable2str(pool, sd));
- gotone = 1;
- }
- if (!solv->allowarchchange && s->name == sd->name && s->arch != sd->arch && policy_illegal_archchange(solv, s, sd))
- {
- POOL_DEBUG(SAT_DEBUG_RESULT, "- allow architecture change of %s to %s\n", solvable2str(pool, s), solvable2str(pool, sd));
- gotone = 1;
- }
- if (!solv->allowvendorchange && s->name == sd->name && s->vendor != sd->vendor && policy_illegal_vendorchange(solv, s, sd))
- {
- if (sd->vendor)
- POOL_DEBUG(SAT_DEBUG_RESULT, "- allow vendor change from '%s' (%s) to '%s' (%s)\n", id2str(pool, s->vendor), solvable2str(pool, s), id2str(pool, sd->vendor), solvable2str(pool, sd));
- else
- POOL_DEBUG(SAT_DEBUG_RESULT, "- allow vendor change from '%s' (%s) to no vendor (%s)\n", id2str(pool, s->vendor), solvable2str(pool, s), solvable2str(pool, sd));
- gotone = 1;
- }
- if (!gotone)
- POOL_DEBUG(SAT_DEBUG_RESULT, "- allow replacement of %s with %s\n", solvable2str(pool, s), solvable2str(pool, sd));
- }
- else
- {
- POOL_DEBUG(SAT_DEBUG_RESULT, "- allow deinstallation of %s\n", solvable2str(pool, s));
- }
-
- }
- }
- POOL_DEBUG(SAT_DEBUG_RESULT, "\n");
- }
- }
-}
-