From 35ff8dcac7223c03925d324ee359a2abaaa2d7b3 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Wed, 14 Feb 2024 10:24:47 +0100 Subject: [PATCH] Also fulfill the update rule if we did a "special updater" update --- src/solver.c | 43 ++++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/src/solver.c b/src/solver.c index a1a41f67..04bf4731 100644 --- a/src/solver.c +++ b/src/solver.c @@ -1891,31 +1891,44 @@ resolve_installed(Solver *solv, int level, int disablerules, Queue *dq) } if (dq->count) queue_empty(dq); - /* find update candidates */ + /* update to best package of the special updaters */ if (specialupdaters && specialupdaters[i - installed->start] != 0) { get_special_updaters(solv, i, rr, dq); - /* if we have an update set rr to the feature rule */ if (dq->count) { - rr = solv->rules + solv->featurerules + (i - solv->installed->start); - if (!rr->p) /* update rule == feature rule? */ - rr = rr - solv->featurerules + solv->updaterules; + /* use the feature rule as reason */ + Rule *rrf = solv->rules + solv->featurerules + (i - solv->installed->start); + if (!rrf->p) + rrf = rrf - solv->featurerules + solv->updaterules; + olevel = level; + level = selectandinstall(solv, level, dq, disablerules, rrf - solv->rules, SOLVER_REASON_UPDATE_INSTALLED); + + if (level <= olevel) + { + if (level < passlevel) + break; /* trouble */ + if (level < olevel) + n = installed->start; /* redo all */ + i--; + n--; + continue; + } + if (dq->count) + queue_empty(dq); } + /* continue with checking the update rule */ } - else + /* update to best package of the update rule */ + FOR_RULELITERALS(p, pp, rr) { - /* update to best package of the update rule */ - FOR_RULELITERALS(p, pp, rr) + if (solv->decisionmap[p] > 0) { - if (solv->decisionmap[p] > 0) - { - dq->count = 0; /* already fulfilled */ - break; - } - if (!solv->decisionmap[p]) - queue_push(dq, p); + dq->count = 0; /* already fulfilled */ + break; } + if (!solv->decisionmap[p]) + queue_push(dq, p); } if (dq->count && solv->update_targets && solv->update_targets->elements[i - installed->start]) prune_to_update_targets(solv, solv->update_targets->elements + solv->update_targets->elements[i - installed->start], dq); -- 2.47.2