-const char *
-solver_select2str(Pool *pool, Id select, Id what)
-{
- const char *s;
- char *b;
- if (select == SOLVER_SOLVABLE)
- return pool_solvid2str(pool, what);
- if (select == SOLVER_SOLVABLE_NAME)
- return pool_dep2str(pool, what);
- if (select == SOLVER_SOLVABLE_PROVIDES)
- {
- s = pool_dep2str(pool, what);
- b = pool_alloctmpspace(pool, 11 + strlen(s));
- sprintf(b, "providing %s", s);
- return b;
- }
- if (select == SOLVER_SOLVABLE_ONE_OF)
- {
- Id p;
- b = 0;
- while ((p = pool->whatprovidesdata[what++]) != 0)
- {
- s = pool_solvid2str(pool, p);
- if (b)
- b = pool_tmpappend(pool, b, ", ", s);
- else
- b = pool_tmpjoin(pool, s, 0, 0);
- pool_freetmpspace(pool, s);
- }
- return b ? b : "nothing";
- }
- if (select == SOLVER_SOLVABLE_REPO)
- {
- b = pool_alloctmpspace(pool, 20);
- sprintf(b, "repo #%d", what);
- return b;
- }
- if (select == SOLVER_SOLVABLE_ALL)
- return "all packages";
- return "unknown job select";
-}
-
-const char *
-pool_job2str(Pool *pool, Id how, Id what, Id flagmask)
-{
- Id select = how & SOLVER_SELECTMASK;
- const char *strstart = 0, *strend = 0;
- char *s;
- int o;
-
- switch (how & SOLVER_JOBMASK)
- {
- case SOLVER_NOOP:
- return "do nothing";
- case SOLVER_INSTALL:
- if (select == SOLVER_SOLVABLE && pool->installed && pool->solvables[what].repo == pool->installed)
- strstart = "keep ", strend = "installed";
- else if (select == SOLVER_SOLVABLE || select == SOLVER_SOLVABLE_NAME)
- strstart = "install ";
- else if (select == SOLVER_SOLVABLE_PROVIDES)
- strstart = "install a package ";
- else
- strstart = "install one of ";
- break;
- case SOLVER_ERASE:
- if (select == SOLVER_SOLVABLE && !(pool->installed && pool->solvables[what].repo == pool->installed))
- strstart = "keep ", strend = "unstalled";
- else if (select == SOLVER_SOLVABLE_PROVIDES)
- strstart = "deinstall all packages ";
- else
- strstart = "deinstall ";
- break;
- case SOLVER_UPDATE:
- strstart = "update ";
- break;
- case SOLVER_WEAKENDEPS:
- strstart = "weaken deps of ";
- break;
- case SOLVER_NOOBSOLETES:
- strstart = "multi version ";
- break;
- case SOLVER_LOCK:
- strstart = "update ";
- break;
- case SOLVER_DISTUPGRADE:
- strstart = "dist upgrade ";
- break;
- case SOLVER_VERIFY:
- strstart = "verify ";
- break;
- case SOLVER_DROP_ORPHANED:
- strstart = "deinstall ", strend = "if orphaned";
- break;
- case SOLVER_USERINSTALLED:
- strstart = "regard ", strend = "as userinstalled";
- break;
- default:
- strstart = "unknown job ";
- break;
- }
- s = pool_tmpjoin(pool, strstart, solver_select2str(pool, select, what), strend);
- if ((how & flagmask & ~(SOLVER_SELECTMASK|SOLVER_JOBMASK)) == 0)
- return s;
- o = strlen(s);
- s = pool_tmpappend(pool, s, " ", 0);
- if (how & SOLVER_WEAK)
- s = pool_tmpappend(pool, s, ",weak", 0);
- if (how & SOLVER_ESSENTIAL)
- s = pool_tmpappend(pool, s, ",essential", 0);
- if (how & SOLVER_CLEANDEPS)
- s = pool_tmpappend(pool, s, ",cleandeps", 0);
- if (how & SOLVER_SETEV)
- s = pool_tmpappend(pool, s, ",setev", 0);
- if (how & SOLVER_SETEVR)
- s = pool_tmpappend(pool, s, ",setevr", 0);
- if (how & SOLVER_SETARCH)
- s = pool_tmpappend(pool, s, ",setarch", 0);
- if (how & SOLVER_SETVENDOR)
- s = pool_tmpappend(pool, s, ",setvendor", 0);
- if (how & SOLVER_SETREPO)
- s = pool_tmpappend(pool, s, ",setrepo", 0);
- if (how & SOLVER_NOAUTOSET)
- s = pool_tmpappend(pool, s, ",noautoset", 0);
- if (s[o + 1] != ',')
- s = pool_tmpappend(pool, s, ",?", 0);
- s[o + 1] = '[';
- return pool_tmpappend(pool, s, "]", 0);
-}
-
-const char *
-solver_problemruleinfo2str(Solver *solv, SolverRuleinfo type, Id source, Id target, Id dep)
-{
- Pool *pool = solv->pool;
- char *s;
- switch (type)
- {
- case SOLVER_RULE_DISTUPGRADE:
- return pool_tmpjoin(pool, pool_solvid2str(pool, source), " does not belong to a distupgrade repository", 0);
- case SOLVER_RULE_INFARCH:
- return pool_tmpjoin(pool, pool_solvid2str(pool, source), " has inferior architecture", 0);
- case SOLVER_RULE_UPDATE:
- return pool_tmpjoin(pool, "problem with installed package ", pool_solvid2str(pool, source), 0);
- case SOLVER_RULE_JOB:
- return "conflicting requests";
- case SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP:
- return pool_tmpjoin(pool, "nothing provides requested ", pool_dep2str(pool, dep), 0);
- case SOLVER_RULE_RPM:
- return "some dependency problem";
- case SOLVER_RULE_RPM_NOT_INSTALLABLE:
- return pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), " is not installable");
- case SOLVER_RULE_RPM_NOTHING_PROVIDES_DEP:
- s = pool_tmpjoin(pool, "nothing provides ", pool_dep2str(pool, dep), 0);
- return pool_tmpappend(pool, s, " needed by ", pool_solvid2str(pool, source));
- case SOLVER_RULE_RPM_SAME_NAME:
- s = pool_tmpjoin(pool, "cannot install both ", pool_solvid2str(pool, source), 0);
- return pool_tmpappend(pool, s, " and ", pool_solvid2str(pool, target));
- case SOLVER_RULE_RPM_PACKAGE_CONFLICT:
- s = pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), 0);
- s = pool_tmpappend(pool, s, " conflicts with ", pool_dep2str(pool, dep));
- return pool_tmpappend(pool, s, " provided by ", pool_solvid2str(pool, target));
- case SOLVER_RULE_RPM_PACKAGE_OBSOLETES:
- s = pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), 0);
- s = pool_tmpappend(pool, s, " obsoletes ", pool_dep2str(pool, dep));
- return pool_tmpappend(pool, s, " provided by ", pool_solvid2str(pool, target));
- case SOLVER_RULE_RPM_INSTALLEDPKG_OBSOLETES:
- s = pool_tmpjoin(pool, "installed package ", pool_solvid2str(pool, source), 0);
- s = pool_tmpappend(pool, s, " obsoletes ", pool_dep2str(pool, dep));
- return pool_tmpappend(pool, s, " provided by ", pool_solvid2str(pool, target));
- case SOLVER_RULE_RPM_IMPLICIT_OBSOLETES:
- s = pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), 0);
- s = pool_tmpappend(pool, s, " implicitely obsoletes ", pool_dep2str(pool, dep));
- return pool_tmpappend(pool, s, " provided by ", pool_solvid2str(pool, target));
- case SOLVER_RULE_RPM_PACKAGE_REQUIRES:
- s = pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), " requires ");
- return pool_tmpappend(pool, s, pool_dep2str(pool, dep), ", but none of the providers can be installed");
- case SOLVER_RULE_RPM_SELF_CONFLICT:
- s = pool_tmpjoin(pool, "package ", pool_solvid2str(pool, source), " conflicts with ");
- return pool_tmpappend(pool, s, pool_dep2str(pool, dep), " provided by itself");
- default:
- return "bad problem rule type";
- }
-}
-
-const char *
-solver_solutionelement2str(Solver *solv, Id p, Id rp)
-{
- Pool *pool = solv->pool;
- if (p == SOLVER_SOLUTION_JOB)
- {
- Id how = solv->job.elements[rp - 1];
- Id what = solv->job.elements[rp];
- return pool_tmpjoin(pool, "do not ask to ", pool_job2str(pool, how, what, 0), 0);
- }
- else if (p == SOLVER_SOLUTION_INFARCH)
- {
- Solvable *s = pool->solvables + rp;
- if (solv->installed && s->repo == solv->installed)
- return pool_tmpjoin(pool, "keep ", pool_solvable2str(pool, s), " despite the inferior architecture");
- else
- return pool_tmpjoin(pool, "install ", pool_solvable2str(pool, s), " despite the inferior architecture");
- }
- else if (p == SOLVER_SOLUTION_DISTUPGRADE)
- {
- Solvable *s = pool->solvables + rp;
- if (solv->installed && s->repo == solv->installed)
- return pool_tmpjoin(pool, "keep obsolete ", pool_solvable2str(pool, s), 0);
- else
- return pool_tmpjoin(pool, "install ", pool_solvable2str(pool, s), " from excluded repository");
- }
- else if (p > 0 && rp == 0)
- return pool_tmpjoin(pool, "allow deinstallation of ", pool_solvid2str(pool, p), 0);
- else if (p > 0 && rp > 0)
- {
- const char *sp = pool_solvid2str(pool, p);
- const char *srp = pool_solvid2str(pool, rp);
- const char *str = pool_tmpjoin(pool, "allow replacement of ", sp, 0);
- return pool_tmpappend(pool, str, " with ", srp);
- }
- else
- return "bad solution element";
-}
-
-const char *
-policy_illegal2str(Solver *solv, int illegal, Solvable *s, Solvable *rs)
-{
- Pool *pool = solv->pool;
- const char *str;
- if (illegal == POLICY_ILLEGAL_DOWNGRADE)
- {
- str = pool_tmpjoin(pool, "downgrade of ", pool_solvable2str(pool, s), 0);
- return pool_tmpappend(pool, str, " to ", pool_solvable2str(pool, rs));
- }
- if (illegal == POLICY_ILLEGAL_ARCHCHANGE)
- {
- str = pool_tmpjoin(pool, "architecture change of ", pool_solvable2str(pool, s), 0);
- return pool_tmpappend(pool, str, " to ", pool_solvable2str(pool, rs));
- }
- if (illegal == POLICY_ILLEGAL_VENDORCHANGE)
- {
- str = pool_tmpjoin(pool, "vendor change from '", pool_id2str(pool, s->vendor), "' (");
- if (rs->vendor)
- {
- str = pool_tmpappend(pool, str, pool_solvable2str(pool, s), ") to '");
- str = pool_tmpappend(pool, str, pool_id2str(pool, rs->vendor), "' (");
- }
- else
- str = pool_tmpappend(pool, str, pool_solvable2str(pool, s), ") to no vendor (");
- return pool_tmpappend(pool, str, pool_solvable2str(pool, rs), ")");
- }
- return "unknown illegal change";
-}