]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Do not report alternatives for yumobs splits
authorMichael Schroeder <mls@suse.de>
Thu, 15 Dec 2022 10:50:04 +0000 (11:50 +0100)
committerMichael Schroeder <mls@suse.de>
Thu, 15 Dec 2022 10:50:04 +0000 (11:50 +0100)
src/solver.c
test/testcases/yumobs/split.t

index b012a3a8b3060a5e79255826b1a034fa0a6cba69..00815f7a46fd30502b7f1d3352e1c101429f8d1f 100644 (file)
@@ -1242,6 +1242,37 @@ takebranch(Solver *solv, int pos, int end, const char *msg, int disablerules)
   return setpropagatelearn(solv, level, p, disablerules, why, reason);
 }
 
+static void
+prune_yumobs(Solver *solv, Queue *dq, Id ruleid)
+{
+  Pool *pool = solv->pool;
+  Rule *r;
+  Map m;
+  int i, rid;
+  Id pp, p2, p = dq->elements[0];
+
+  if (!pool->solvables[p].obsoletes)
+    return;
+  map_init(&m, 0);
+  for (rid = solv->yumobsrules, r = solv->rules + rid; rid < solv->yumobsrules_end; rid++, r++)
+    {
+      if (r->p != -p)
+       continue;
+      if (!m.size)
+       map_grow(&m, pool->nsolvables);
+      FOR_RULELITERALS(p2, pp, r)
+       if (p2 > 0)
+         MAPSET(&m, p2);
+    }
+  for (i = 1; i < dq->count; i++)
+    if (!MAPTST(&m, dq->elements[i]))
+      break;
+  map_free(&m);
+  if (i == dq->count)
+    dq->count = 1;
+}
+
+
 /*-------------------------------------------------------------------
  *
  * select and install
@@ -1265,6 +1296,9 @@ selectandinstall(Solver *solv, int level, Queue *dq, int disablerules, Id ruleid
    * do some special supplements ordering */
   if (dq->count > 1 && solv->do_extra_reordering)
     reorder_dq_for_future_installed(solv, level, dq);
+  /* check if the candidates are all connected via yumobs rules */
+  if (dq->count > 1 && solv->yumobsrules_end > solv->yumobsrules)
+    prune_yumobs(solv, dq, ruleid);
   /* if we have multiple candidates we open a branch */
   if (dq->count > 1)
     createbranch(solv, level, dq, 0, ruleid);
index a3921edb97a56f2001135486460a3d495983542c..48d4eb35b9a512a809543b4701ab839ec6562624 100644 (file)
@@ -18,7 +18,7 @@ result transaction,problems <inline>
 nextjob
 solverflags yumobsoletes
 job update all packages
-result transaction,problems <inline>
+result transaction,problems,alternatives <inline>
 #>erase c-27-1.x86_64@system d-28-1.x86_64@available
 #>install d-28-1.x86_64@available
 #>install e-28-1.x86_64@available