From 8542225bad5c1616b4ebe1ab78a6bf320726afd9 Mon Sep 17 00:00:00 2001 From: Michael Schroeder Date: Wed, 14 Oct 2015 14:30:46 +0200 Subject: [PATCH 6/6] Make keep_orphans also keep multiversion orphans installed Also make keep_orphanse add multiversion orphans to the update rule, thus enforcing that they stay installed. --- src/rules.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/rules.c b/src/rules.c index 97ccc6e..381cb22 100644 --- a/src/rules.c +++ b/src/rules.c @@ -1302,6 +1302,8 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all) if (j == 0 && p == -SYSTEMSOLVABLE && solv->dupmap_all) { queue_push(&solv->orphaned, s - pool->solvables); /* also treat as orphaned */ + if (solv->keep_orphans && !(solv->droporphanedmap_all || (solv->droporphanedmap.size && MAPTST(&solv->droporphanedmap, s - pool->solvables - solv->installed->start)))) + p = s - pool->solvables; /* keep this orphaned package installed */ j = qs.count; } qs.count = j; @@ -1844,6 +1846,12 @@ solver_addduprules(Solver *solv, Map *addedmap) r += solv->updaterules - solv->featurerules; if (r->p == p && !r->d) ip = p; + else if (solv->dupmap_all && solv->multiversion.size) + { + r = solv->rules + solv->updaterules + (p - solv->installed->start); + if (r->p == p) + ip = p; + } } if (!ip) solver_addrule(solv, -p, 0, 0); /* no match, sorry */ -- 2.4.3