Blob Blame History Raw
From 8542225bad5c1616b4ebe1ab78a6bf320726afd9 Mon Sep 17 00:00:00 2001
From: Michael Schroeder <mls@suse.de>
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