]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Make keep_orphans also keep multiversion orphans installed
authorMichael Schroeder <mls@suse.de>
Wed, 14 Oct 2015 12:30:46 +0000 (14:30 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 14 Oct 2015 12:30:46 +0000 (14:30 +0200)
Also make keep_orphanse add multiversion orphans to the
update rule, thus enforcing that they stay installed.

src/rules.c

index 97ccc6eaaab0558cba3e492979018dc7f98b51be..381cb22c689f4fdcce3b1aa94ea7864309f88028 100644 (file)
@@ -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 */