From: Michael Schroeder Date: Fri, 25 Nov 2022 13:56:16 +0000 (+0100) Subject: Fix ruleinfo for recommends rules X-Git-Tag: 0.7.23~38 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e10d75eef0544004e492724f8ea2ca2c69b98f1b;p=thirdparty%2Flibsolv.git Fix ruleinfo for recommends rules Those are limited versions of pkg rules. --- diff --git a/src/rules.c b/src/rules.c index 1b0bf48d..ec02d836 100644 --- a/src/rules.c +++ b/src/rules.c @@ -3122,27 +3122,8 @@ solver_ruleinfo(Solver *solv, Id rid, Id *fromp, Id *top, Id *depp) } if (rid >= solv->recommendsrules && rid < solv->recommendsrules_end) { - Queue rq; - int i; - if (r->p >= 0) - return SOLVER_RULE_RECOMMENDS; - if (fromp) - *fromp = -r->p; - queue_init(&rq); - getpkgruleinfos(solv, r, &rq); - for (i = 0; i < rq.count; i += 4) - { - if (rq.elements[i] != SOLVER_RULE_RECOMMENDS) - continue; - if (fromp) - *fromp = rq.elements[i + 1]; - if (top) - *top = rq.elements[i + 2]; - if (depp) - *depp = rq.elements[i + 3]; - break; - } - queue_free(&rq); + if (solv->recommendsrules_info && fromp) + *fromp = solv->recommendsrules_info[rid - solv->recommendsrules]; return SOLVER_RULE_RECOMMENDS; } if (rid >= solv->learntrules) @@ -4396,10 +4377,19 @@ solver_ruleinfo2str(Solver *solv, SolverRuleinfo type, Id source, Id target, Id const char *s2; type = solver_ruleinfo(solv, source, &source, &target, &dep); s2 = solver_ruleinfo2str(solv, type, source, target, dep); - return pool_tmpjoin(pool, "limited version of ", s2, 0); + return pool_tmpjoin(pool, s2, " (limited version)", 0); } return "choice rule"; + case SOLVER_RULE_RECOMMENDS: + if (source > 0) + { + const char *s2; + type = solver_ruleinfo(solv, source, &source, &target, &dep); + s2 = solver_ruleinfo2str(solv, type, source, target, dep); + return pool_tmpjoin(pool, s2, " (limited version)", 0); + } + return "recommends rule"; default: - return "bad problem rule type"; + return "bad rule type"; } } diff --git a/src/solver.c b/src/solver.c index 468cbcb8..4bc75882 100644 --- a/src/solver.c +++ b/src/solver.c @@ -4822,7 +4822,7 @@ getdecisionlist(Solver *solv, Map *dm, Queue *decisionlistq) queue_empty(decisionlistq); queue_init(&iq); - for (ii = solv->decisionq.count - 1; ii >= 0; ii--) + for (ii = solv->decisionq.count - 1; ii > 0; ii--) { Id v = solv->decisionq.elements[ii]; Id vv = (v > 0 ? v : -v);