From: Michael Schroeder Date: Tue, 7 May 2013 09:35:05 +0000 (+0200) Subject: add SOLVER_RULE_JOB_UNSUPPORTED and SOLVER_RULE_JOB_UNKNOWN_PACKAGE X-Git-Tag: upstream/0.4.0~140 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=400d90ae66c070919c7cec8dbbd9d47d39f50db4;p=platform%2Fupstream%2Flibsolv.git add SOLVER_RULE_JOB_UNSUPPORTED and SOLVER_RULE_JOB_UNKNOWN_PACKAGE --- diff --git a/src/problems.c b/src/problems.c index 1be6577..0b77c98 100644 --- a/src/problems.c +++ b/src/problems.c @@ -1041,8 +1041,12 @@ solver_problemruleinfo2str(Solver *solv, SolverRuleinfo type, Id source, Id targ return pool_tmpjoin(pool, "problem with installed package ", pool_solvid2str(pool, source), 0); case SOLVER_RULE_JOB: return "conflicting requests"; + case SOLVER_RULE_JOB_UNSUPPORTED: + return "unsupported request"; case SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP: return pool_tmpjoin(pool, "nothing provides requested ", pool_dep2str(pool, dep), 0); + case SOLVER_RULE_JOB_UNKNOWN_PACKAGE: + return pool_tmpjoin(pool, "package ", pool_dep2str(pool, dep), " does not exist"); case SOLVER_RULE_JOB_PROVIDED_BY_SYSTEM: return pool_tmpjoin(pool, pool_dep2str(pool, dep), " is provided by the system", 0); case SOLVER_RULE_RPM: diff --git a/src/rules.c b/src/rules.c index 317dc77..a144c40 100644 --- a/src/rules.c +++ b/src/rules.c @@ -2178,14 +2178,16 @@ solver_ruleinfo(Solver *solv, Id rid, Id *fromp, Id *top, Id *depp) *depp = solv->job.elements[jidx + 1]; if ((r->d == 0 || r->d == -1) && r->w2 == 0 && r->p == -SYSTEMSOLVABLE) { - if ((solv->job.elements[jidx] & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_INSTALL|SOLVER_SOLVABLE_NAME)) + Id how = solv->job.elements[jidx]; + if ((how & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_INSTALL|SOLVER_SOLVABLE_NAME)) + return SOLVER_RULE_JOB_UNKNOWN_PACKAGE; + if ((how & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES)) return SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP; - if ((solv->job.elements[jidx] & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_INSTALL|SOLVER_SOLVABLE_PROVIDES)) - return SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP; - if ((solv->job.elements[jidx] & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_ERASE|SOLVER_SOLVABLE_NAME)) + if ((how & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_ERASE|SOLVER_SOLVABLE_NAME)) return SOLVER_RULE_JOB_PROVIDED_BY_SYSTEM; - if ((solv->job.elements[jidx] & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_ERASE|SOLVER_SOLVABLE_PROVIDES)) + if ((how & (SOLVER_JOBMASK|SOLVER_SELECTMASK)) == (SOLVER_ERASE|SOLVER_SOLVABLE_PROVIDES)) return SOLVER_RULE_JOB_PROVIDED_BY_SYSTEM; + return SOLVER_RULE_JOB_UNSUPPORTED; } return SOLVER_RULE_JOB; } diff --git a/src/rules.h b/src/rules.h index 4d6b8ad..9205b86 100644 --- a/src/rules.h +++ b/src/rules.h @@ -63,6 +63,8 @@ typedef enum { SOLVER_RULE_JOB = 0x400, SOLVER_RULE_JOB_NOTHING_PROVIDES_DEP, SOLVER_RULE_JOB_PROVIDED_BY_SYSTEM, + SOLVER_RULE_JOB_UNKNOWN_PACKAGE, + SOLVER_RULE_JOB_UNSUPPORTED, SOLVER_RULE_DISTUPGRADE = 0x500, SOLVER_RULE_INFARCH = 0x600, SOLVER_RULE_CHOICE = 0x700, diff --git a/src/solver.c b/src/solver.c index e1fe034..69fbc35 100644 --- a/src/solver.c +++ b/src/solver.c @@ -3374,7 +3374,9 @@ solver_solve(Solver *solv, Queue *job) queue_push(&q, p); if (!q.count) { - /* no candidate found, make this an impossible rule */ + if (select == SOLVER_SOLVABLE_ONE_OF) + break; /* ignore empty installs */ + /* no candidate found or unsupported, make this an impossible rule */ queue_push(&q, -SYSTEMSOLVABLE); } p = queue_shift(&q); /* get first candidate */