Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package libsolv for openSUSE:Factory checked 
in at 2022-03-28 17:00:17
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libsolv (Old)
 and      /work/SRC/openSUSE:Factory/.libsolv.new.1900 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libsolv"

Mon Mar 28 17:00:17 2022 rev:87 rq:964914 version:0.7.22

Changes:
--------
--- /work/SRC/openSUSE:Factory/libsolv/libsolv.changes  2022-03-15 
19:04:45.468941518 +0100
+++ /work/SRC/openSUSE:Factory/.libsolv.new.1900/libsolv.changes        
2022-03-28 17:01:06.501013974 +0200
@@ -1,0 +2,9 @@
+Mon Mar 21 10:05:32 CET 2022 - m...@suse.de
+
+- reworked choice rule generation to cover more usecases
+- support SOLVABLE_PREREQ_IGNOREINST in the ordering code
+  [bsc#1196514]
+- support parsing of Debian's Multi-Arch indicator
+- bump version to 0.7.22
+
+-------------------------------------------------------------------

Old:
----
  libsolv-0.7.21.tar.bz2

New:
----
  libsolv-0.7.22.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libsolv.spec ++++++
--- /var/tmp/diff_new_pack.VmT4iH/_old  2022-03-28 17:01:06.925014550 +0200
+++ /var/tmp/diff_new_pack.VmT4iH/_new  2022-03-28 17:01:06.929014556 +0200
@@ -56,7 +56,7 @@
 %bcond_with zypp
 
 Name:           libsolv
-Version:        0.7.21
+Version:        0.7.22
 Release:        0
 Summary:        Package dependency solver using a satisfiability algorithm
 License:        BSD-3-Clause

++++++ libsolv-0.7.21.tar.bz2 -> libsolv-0.7.22.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/NEWS new/libsolv-0.7.22/NEWS
--- old/libsolv-0.7.21/NEWS     2022-02-25 17:38:17.000000000 +0100
+++ new/libsolv-0.7.22/NEWS     2022-03-21 10:24:18.000000000 +0100
@@ -1,6 +1,13 @@
 
 This file contains the major changes between libsolv versions:
 
+Version 0.7.22
+- selected bug fixes:
+  * reworked choice rule generation to cover more usecases
+  * support SOLVABLE_PREREQ_IGNOREINST in the ordering code
+- new features:
+  * support parsing of Debian's Multi-Arch indicator
+
 Version 0.7.21
 - selected bug fixes:
   * fix segfault on conflict resolution when using bindings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/VERSION.cmake 
new/libsolv-0.7.22/VERSION.cmake
--- old/libsolv-0.7.21/VERSION.cmake    2022-02-25 17:38:17.000000000 +0100
+++ new/libsolv-0.7.22/VERSION.cmake    2022-03-21 10:24:18.000000000 +0100
@@ -49,5 +49,5 @@
 
 SET(LIBSOLV_MAJOR "0")
 SET(LIBSOLV_MINOR "7")
-SET(LIBSOLV_PATCH "21")
+SET(LIBSOLV_PATCH "22")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/ext/repo_deb.c 
new/libsolv-0.7.22/ext/repo_deb.c
--- old/libsolv-0.7.21/ext/repo_deb.c   2021-10-18 12:19:20.000000000 +0200
+++ new/libsolv-0.7.22/ext/repo_deb.c   2022-03-21 10:24:18.000000000 +0100
@@ -462,6 +462,10 @@
              checksumtype = REPOKEY_TYPE_MD5;
            }
          break;
+       case 'M' << 8 | 'U':
+         if (!strcasecmp(tag, "multi-arch"))
+           repodata_set_poolstr(data, s - pool->solvables, SOLVABLE_MULTIARCH, 
q);
+         break;
        case 'P' << 8 | 'A':
          if (!strcasecmp(tag, "package"))
            s->name = pool_str2id(pool, q, 1);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/package/libsolv.changes 
new/libsolv-0.7.22/package/libsolv.changes
--- old/libsolv-0.7.21/package/libsolv.changes  2022-02-25 17:38:17.000000000 
+0100
+++ new/libsolv-0.7.22/package/libsolv.changes  2022-03-21 10:24:18.000000000 
+0100
@@ -1,4 +1,13 @@
 -------------------------------------------------------------------
+Mon Mar 21 10:05:32 CET 2022 - m...@suse.de
+
+- reworked choice rule generation to cover more usecases
+- support SOLVABLE_PREREQ_IGNOREINST in the ordering code
+  [bsc#1196514]
+- support parsing of Debian's Multi-Arch indicator
+- bump version to 0.7.22
+
+-------------------------------------------------------------------
 Fri Feb 25 17:32:20 CET 2022 - m...@suse.de
 
 - fix segfault on conflict resolution when using bindings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/src/knownid.h 
new/libsolv-0.7.22/src/knownid.h
--- old/libsolv-0.7.21/src/knownid.h    2021-08-30 09:26:04.000000000 +0200
+++ new/libsolv-0.7.22/src/knownid.h    2022-03-21 10:24:18.000000000 +0100
@@ -270,7 +270,8 @@
 KNOWNID(SOLVABLE_ISDEFAULT,            "solvable:isdefault"),
 KNOWNID(SOLVABLE_LANGONLY,             "solvable:langonly"),
 
-KNOWNID(UPDATE_COLLECTIONLIST,      "update:collectionlist"),  /* list of 
UPDATE_COLLECTION (actually packages) and UPDATE_MODULE */
+KNOWNID(UPDATE_COLLECTIONLIST,         "update:collectionlist"),       /* list 
of UPDATE_COLLECTION (actually packages) and UPDATE_MODULE */
+KNOWNID(SOLVABLE_MULTIARCH,            "solvable:multiarch"),          /* 
debian multi-arch field */
 
 KNOWNID(ID_NUM_INTERNAL,               0)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/src/rules.c 
new/libsolv-0.7.22/src/rules.c
--- old/libsolv-0.7.21/src/rules.c      2021-10-18 12:19:20.000000000 +0200
+++ new/libsolv-0.7.22/src/rules.c      2022-03-16 15:19:46.000000000 +0100
@@ -3255,6 +3255,12 @@
 
 
 /* check if the newest versions of pi still provides the dependency we're 
looking for */
+/* pi: installed package
+ * r: rule for the dependency
+ * m: map with all positive elements of r
+ * return 0: at least one provider
+ * return 1: the newest versions do not provide the dependency
+ */
 static int
 solver_choicerulecheck(Solver *solv, Id pi, Rule *r, Map *m, Queue *q)
 {
@@ -3303,94 +3309,6 @@
   return 1;    /* none of the new packages provided it */
 }
 
-static int
-solver_choicerulecheck2(Solver *solv, Id pi, Id pt, Queue *q)
-{
-  Pool *pool = solv->pool;
-  Rule *ur;
-  Id p, pp;
-  int i;
-
-  if (!q->count || q->elements[0] != pi)
-    {
-      if (q->count)
-        queue_empty(q);
-      ur = solv->rules + solv->updaterules + (pi - pool->installed->start);
-      if (!ur->p)
-        ur = solv->rules + solv->featurerules + (pi - pool->installed->start);
-      if (!ur->p)
-       return 1;               /* orphaned, thus newest */
-      queue_push2(q, pi, 0);
-      FOR_RULELITERALS(p, pp, ur)
-       if (p > 0 && p != pi)
-         queue_push(q, p);
-      queue_push(q, pi);
-    }
-  if (q->count <= 3)
-    return q->count == 3 && q->elements[2] == pt ? 1 : 0;
-  if (!q->elements[1])
-    {
-      queue_deleten(q, 0, 2);
-      policy_filter_unwanted(solv, q, POLICY_MODE_CHOOSE);
-      queue_unshift(q, 1);     /* filter mark */
-      queue_unshift(q, pi);
-    }
-  for (i = 2; i < q->count; i++)
-    if (q->elements[i] == pt)
-      return 1;
-  return 0;    /* not newest */
-}
-
-static int
-solver_choicerulecheck3(Solver *solv, Id pt, Queue *q)
-{
-  Pool *pool = solv->pool;
-  Id p, pp;
-  int i;
-
-  if (!q->count || q->elements[0] != pt)
-    {
-      Solvable *s = pool->solvables + pt;
-      if (q->count)
-        queue_empty(q);
-      /* no installed package, so check all with same name */
-      queue_push2(q, pt, 0);
-      FOR_PROVIDES(p, pp, s->name)
-        if (pool->solvables[p].name == s->name && p != pt)
-          queue_push(q, p);
-      queue_push(q, pt);
-    }
-  if (q->count <= 3)
-    return q->count == 3 && q->elements[2] == pt ? 1 : 0;
-  if (!q->elements[1])
-    {
-      queue_deleten(q, 0, 2);
-      policy_filter_unwanted(solv, q, POLICY_MODE_CHOOSE);
-      queue_unshift(q, 1);     /* filter mark */
-      queue_unshift(q, pt);
-    }
-  for (i = 2; i < q->count; i++)
-    if (q->elements[i] == pt)
-      return 1;
-  return 0;    /* not newest */
-}
-
-static inline void
-queue_removeelement(Queue *q, Id el)
-{
-  int i, j;
-  for (i = 0; i < q->count; i++)
-    if (q->elements[i] == el)
-      break;
-  if (i < q->count)
-    {
-      for (j = i++; i < q->count; i++)
-       if (q->elements[i] != el)
-         q->elements[j++] = q->elements[i];
-      queue_truncate(q, j);
-    }
-}
-
 static Id
 choicerule_find_installed(Pool *pool, Id p)
 {
@@ -3439,14 +3357,14 @@
   Pool *pool = solv->pool;
   Map m, mneg;
   Rule *r;
-  Queue q, qi, qcheck, qcheck2, infoq;
+  Queue q, qi, qcheck, infoq;
   int i, j, rid, havechoice, negcnt;
   Id p, d, pp, p2;
   Solvable *s;
   Id lastaddedp, lastaddedd;
   int lastaddedcnt;
   unsigned int now;
-  int isnewest = 0;
+  int isinstalled;
 
   solv->choicerules = solv->nrules;
   if (!pool->installed)
@@ -3458,7 +3376,6 @@
   queue_init(&q);
   queue_init(&qi);
   queue_init(&qcheck);
-  queue_init(&qcheck2);
   queue_init(&infoq);
   map_init(&m, pool->nsolvables);
   map_init(&mneg, pool->nsolvables);
@@ -3478,20 +3395,28 @@
       if (r->p >= 0 || ((r->d == 0 || r->d == -1) && r->w2 <= 0))
        continue;       /* only look at requires rules */
       /* solver_printrule(solv, SOLV_DEBUG_RESULT, r); */
-      queue_empty(&q);
       queue_empty(&qi);
       havechoice = 0;
+      isinstalled = 0;
       FOR_RULELITERALS(p, pp, r)
        {
          if (p < 0)
-           continue;
+           {
+             Solvable *s = pool->solvables - p;
+             p2 = s->repo == pool->installed ? -p : 0;
+             if (p2)
+               {
+                 if (!(solv->updatemap_all || (solv->updatemap.size && 
MAPTST(&solv->updatemap, p2 - solv->installed->start))))
+                   isinstalled = 1;
+               }
+             continue;
+           }
          s = pool->solvables + p;
          if (!s->repo)
            continue;
          if (s->repo == pool->installed)
            {
              queue_push2(&qi, p, p);
-             queue_push(&q, p);
              continue;
            }
          /* find an installed package p2 that we can update/downgrade to p */
@@ -3503,7 +3428,6 @@
              if (policy_is_illegal(solv, pool->solvables + p2, s, 0))
                continue;
              queue_push2(&qi, p2, p);
-             queue_push(&q, p);
              continue;
            }
          /* package p is independent of the installed ones */
@@ -3512,47 +3436,31 @@
 #if 0
       printf("havechoice: %d qcount %d qicount %d\n", havechoice, q.count, 
qi.count);
 #endif
-      if (!havechoice || !q.count || !qi.count)
+      if (!havechoice || !qi.count)
        continue;       /* no choice */
 
       FOR_RULELITERALS(p, pp, r)
         if (p > 0)
          MAPSET(&m, p);
 
-      isnewest = 1;
-      FOR_RULELITERALS(p, pp, r)
+      if (!isinstalled)
        {
-         if (p > 0)
-           break;
-         p2 = choicerule_find_installed(pool, -p);
-         if (p2 && !solver_choicerulecheck2(solv, p2, -p, &qcheck2))
+         /* do extra checking for packages related to installed packages */
+         for (i = j = 0; i < qi.count; i += 2)
            {
-             isnewest = 0;
-             break;
-           }
-         if (!p2 && !solver_choicerulecheck3(solv, -p, &qcheck2))
-           {
-             isnewest = 0;
-             break;
+             p2 = qi.elements[i];
+             if (solv->updatemap_all || (solv->updatemap.size && 
MAPTST(&solv->updatemap, p2 - solv->installed->start)))
+               {
+                 if (solver_choicerulecheck(solv, p2, r, &m, &qcheck))
+                   continue;
+               }
+             qi.elements[j++] = p2;
+             qi.elements[j++] = qi.elements[i + 1];
            }
+         queue_truncate(&qi, j);
        }
-      /* do extra checking */
-      for (i = j = 0; i < qi.count; i += 2)
-       {
-         p2 = qi.elements[i];
-         if (!p2)
-           continue;
-         if (isnewest && solver_choicerulecheck(solv, p2, r, &m, &qcheck))
-           {
-             /* oops, remove element p from q */
-             queue_removeelement(&q, qi.elements[i + 1]);
-             continue;
-           }
-         qi.elements[j++] = p2;
-       }
-      queue_truncate(&qi, j);
 
-      if (!q.count || !qi.count)
+      if (!qi.count)
        {
          FOR_RULELITERALS(p, pp, r)
            if (p > 0)
@@ -3560,6 +3468,15 @@
          continue;
        }
 
+      queue_empty(&q);
+      /* split q from qi */
+      for (i = j = 0; i < qi.count; i += 2)
+       {
+         queue_push(&q, qi.elements[i + 1]);
+         qi.elements[j++] = qi.elements[i];
+       }
+      queue_truncate(&qi, j);
+
 
       /* now check the update rules of the installed package.
        * if all packages of the update rules are contained in
@@ -3579,6 +3496,7 @@
              break;
          if (p)
            break;
+         /* speed improvement: only check each package once */
          for (j = i + 1; j < qi.count; j++)
            if (qi.elements[i] == qi.elements[j])
              qi.elements[j] = 0;
@@ -3636,7 +3554,6 @@
   queue_free(&q);
   queue_free(&qi);
   queue_free(&qcheck);
-  queue_free(&qcheck2);
   queue_free(&infoq);
   map_free(&m);
   map_free(&mneg);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/src/solver.c 
new/libsolv-0.7.22/src/solver.c
--- old/libsolv-0.7.21/src/solver.c     2022-02-18 12:04:10.000000000 +0100
+++ new/libsolv-0.7.22/src/solver.c     2022-03-16 15:19:46.000000000 +0100
@@ -2620,6 +2620,43 @@
   return level;
 }
 
+int
+solver_check_unneeded_choicerules(Solver *solv)
+{
+  Pool *pool = solv->pool;
+  Rule *r, *or;
+  Id p, pp, p2, pp2;
+  int i;
+  int havedisabled = 0;
+
+  /* check if some choice rules could have been broken */
+  for (i = solv->choicerules, r = solv->rules + i; i < solv->choicerules_end; 
i++, r++)
+    {
+      if (r->d < 0)
+       continue;
+      or = solv->rules + solv->choicerules_info[i - solv->choicerules];
+      if (or->d < 0)
+       continue;
+      FOR_RULELITERALS(p, pp, or)
+       {
+         if (p < 0 || solv->decisionmap[p] <= 0)
+           continue;
+         FOR_RULELITERALS(p2, pp2, r)
+           if (p2 == p)
+             break;
+         if (!p2)
+           {
+             /* did not find p in choice rule, disable it */
+             POOL_DEBUG(SOLV_DEBUG_SOLVER, "disabling unneeded choice rule 
#%d\n", i);
+             solver_disablechoicerules(solv, r);
+             havedisabled = 1;
+             break;
+           }
+       }
+    }
+  return havedisabled;
+}
+
 /*-------------------------------------------------------------------
  *
  * solver_run_sat
@@ -2803,6 +2840,14 @@
          solver_reset(solv);
          level = 0;    /* restart from scratch */
          continue;
+       }
+
+      if (solv->choicerules != solv->choicerules_end && 
solver_check_unneeded_choicerules(solv))
+       {
+         POOL_DEBUG(SOLV_DEBUG_SOLVER, "did choice rule minimization, 
rerunning solver\n");
+         solver_reset(solv);
+         level = 0;    /* restart from scratch */
+         continue;
        }
 
       if (solv->solution_callback)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/runtestcases.sh 
new/libsolv-0.7.22/test/runtestcases.sh
--- old/libsolv-0.7.21/test/runtestcases.sh     2019-04-11 16:48:30.000000000 
+0200
+++ new/libsolv-0.7.22/test/runtestcases.sh     2022-03-16 15:19:46.000000000 
+0100
@@ -1,15 +1,15 @@
 #!/bin/bash
 
 cmd=$1
-dir=$2
+dir=${2:-.}
 
 if test -z "$cmd" -o -z "$dir"; then
-  echo "Usage: runtestcases <cmd> <dir>";
+  echo "Usage: runtestcases <cmd> [dir]";
   exit 1
 fi
 
 ex=0
-for tc in $(find $dir -name \*.t) ; do
+for tc in $(find $dir -name \*.t | sort) ; do
   $cmd $tc >/dev/null
   tex=$?
   tcn="${tc#$dir/} .................................................."
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice1.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice1.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice1.t     1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice1.t     2022-03-16 
15:19:46.000000000 +0100
@@ -0,0 +1,27 @@
+#
+#Rule #2:
+#    !A-2-1.noarch [3] (w1)
+#    B-2-1.noarch [4] (w2)
+#    C-2-1.noarch [5]
+#
+# ==> Choice Rule
+#    !A-2-1.noarch [3] (w1)
+#    B-2-1.noarch [4] (w2)
+#
+repo system 0 testtags <inline>
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+repo available 0 testtags <inline>
+#>=Pkg: A 2 1 noarch
+#>=Req: P = 2
+#>=Pkg: B 2 1 noarch
+#>=Prv: P = 2
+#>=Pkg: C 2 1 noarch
+#>=Prv: P = 2
+system i686 rpm system
+
+job install name A
+result transaction,problems <inline>
+result transaction,problems <inline>
+#>install A-2-1.noarch@available
+#>upgrade B-1-1.noarch@system B-2-1.noarch@available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice1b.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice1b.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice1b.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice1b.t    2022-03-16 
15:30:03.000000000 +0100
@@ -0,0 +1,19 @@
+feature complex_deps
+repo system 0 testtags <inline>
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+repo available 0 testtags <inline>
+#>=Pkg: X 1 1 noarch
+#>=Pkg: Y 1 1 noarch
+#>=Pkg: A 2 1 noarch
+#>=Req: P = 2 <IF> (X & Y)
+#>=Pkg: B 2 1 noarch
+#>=Prv: P = 2
+#>=Pkg: C 2 1 noarch
+#>=Prv: P = 2
+system i686 rpm system
+
+job install name A
+result transaction,problems <inline>
+result transaction,problems <inline>
+#>install A-2-1.noarch@available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice2.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice2.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice2.t     2022-03-03 
15:44:15.000000000 +0100
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice2.t     2022-03-16 
15:19:46.000000000 +0100
@@ -1,3 +1,24 @@
+#
+# Test that updating package B will update package A
+# instead of pulling in new package C
+#
+#Rule #5:
+#    !A-2-2.noarch [5] (w1)
+#    B-2-1.noarch [6] (w2)
+#    C-2-1.noarch [8]
+#Rule #7:
+#    !A-2-1.noarch [4] (w1)
+#    B-2-1.noarch [6] (w2)
+#    C-2-1.noarch [8]
+#Rule #8:
+#    !A-1-1.noarch [2]I (w1)
+#    B-1-1.noarch [3]I (w2)
+#    C-1-1.noarch [7]
+#
+# ==> Choice Rule for #8:
+#    !A-1-1.noarch [2]I (w1)
+#    B-1-1.noarch [3]I (w2)
+#
 repo system 0 testtags <inline>
 #>=Pkg: A 1 1 noarch
 #>=Req: P = 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice2b.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice2b.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice2b.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice2b.t    2022-03-16 
15:19:46.000000000 +0100
@@ -0,0 +1,47 @@
+#
+# Test that updating package B will update package A
+# instead of pulling in new package C
+#
+#Rule #5:
+#    !A-2-2.noarch [5] (w1)
+#    B-2-1.noarch [6] (w2)
+#    C-2-1.noarch [8]
+#Rule #7:
+#    !A-2-1.noarch [4] (w1)
+#    B-2-1.noarch [6] (w2)
+#    C-2-1.noarch [8]
+#Rule #8:
+#    !A-1-1.noarch [2]I (w1)
+#    B-1-1.noarch [3]I (w2)
+#    C-1-1.noarch [7]
+#
+# ==> Choice Rule for #8:
+#    !A-1-1.noarch [2]I (w1)
+#    B-1-1.noarch [3]I (w2)
+#
+repo system 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Req: P = 1
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+repo available 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Req: P = 1
+#>=Pkg: B 1 1 noarch
+#>=Prv: P = 1
+#>=Pkg: A 2 1 noarch
+#>=Req: P = 2
+#>=Pkg: A 2 2 noarch
+#>=Req: P = 2
+#>=Pkg: B 2 1 noarch
+#>=Prv: P = 2
+#>=Pkg: C 1 1 noarch
+#>=Prv: P = 1
+#>=Pkg: C 2 1 noarch
+#>=Prv: P = 2
+system i686 rpm system
+
+job update name B
+result transaction,problems <inline>
+#>upgrade A-1-1.noarch@system A-2-2.noarch@available
+#>upgrade B-1-1.noarch@system B-2-1.noarch@available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice3.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice3.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice3.t     2021-08-30 
09:26:05.000000000 +0200
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice3.t     2022-03-16 
15:19:46.000000000 +0100
@@ -1,3 +1,19 @@
+# Do not block an update because of a choice rule
+#
+#Rule #3:
+#    !B-1-1.noarch [4] (w1)
+#    A-1-1.noarch [2]I (w2)
+#    Anew-2-1.noarch [6]
+#Rule #4:
+#    !B-1-1.noarch [3]I (w1)
+#    A-1-1.noarch [2]I (w2)
+#    Anew-2-1.noarch [6]
+#
+# ==> No choice rule for Rule#4!
+# ==> Choice Rule for #3:
+#    !B-1-1.noarch [4] (w1)
+#    A-1-1.noarch [2]I (w2)
+#
 repo system 0 testtags <inline>
 #>=Pkg: A 1 1 noarch
 #>=Prv: libA
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice3b.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice3b.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice3b.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice3b.t    2022-03-16 
15:19:46.000000000 +0100
@@ -0,0 +1,31 @@
+# Do not block an update because of a choice rule
+#
+#Rule #3:
+#    !B-1-1.noarch [4] (w1)
+#    A-1-1.noarch [2]I (w2)
+#    Anew-2-1.noarch [6]
+#Rule #4:
+#    !B-1-1.noarch [3]I (w1)
+#    A-1-1.noarch [2]I (w2)
+#    Anew-2-1.noarch [6]
+#
+# ==> No choice rule for Rule#4!
+# ==> Choice Rule for #3:
+#    !B-1-1.noarch [4] (w1)
+#    A-1-1.noarch [2]I (w2)
+#
+repo system 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Prv: libA
+#>=Pkg: B 1 1 noarch
+#>=Req: libA
+repo available 0 testtags <inline>
+#>=Pkg: A 2 1 noarch
+#>=Pkg: Anew 2 1 noarch
+#>=Prv: libA
+system i686 rpm system
+
+job update all packages
+result transaction,problems <inline>
+#>install Anew-2-1.noarch@available
+#>upgrade A-1-1.noarch@system A-2-1.noarch@available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice4.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice4.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice4.t     2021-08-30 
09:26:05.000000000 +0200
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice4.t     2022-03-16 
15:19:46.000000000 +0100
@@ -1,3 +1,21 @@
+# This tests that A is updated instead of Anew being installed
+#
+#Rule #4:
+#    !B-2-2.noarch [11] (w1)
+#    A-2-2.noarch [9] (w2)
+#    Anew-2-2.noarch [10]
+#Rule #11:
+#    !B-2-1.noarch [8] (w1)
+#    A-2-1.noarch [6] (w2)
+#    Anew-2-1.noarch [7]
+#
+#Choice Rule for #4:
+#    !B-2-2.noarch [11] (w1)
+#    A-2-2.noarch [9] (w2)
+#Choice Rule for #11
+#    !B-2-1.noarch [8] (w1)
+#    A-2-1.noarch [6] (w2)
+#
 repo system 0 testtags <inline>
 #>=Pkg: A 1 1 noarch
 #>=Prv: libA = 1-1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice5.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice5.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice5.t     1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice5.t     2022-03-16 
15:19:46.000000000 +0100
@@ -0,0 +1,21 @@
+#
+# test that a package split does not update unrelated packages
+#
+repo system 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Prv: libA
+#>=Pkg: B 1 1 noarch
+#>=Req: libA
+repo available 0 testtags <inline>
+#>=Pkg: A 1 1 noarch
+#>=Prv: libA
+#>=Pkg: A 2 1 noarch
+#>=Pkg: Asplit 2 1 noarch
+#>=Prv: libA
+#>=Pkg: B 2 1 noarch
+#>=Req: libA
+system i686 rpm system
+job update name A
+result transaction,problems <inline>
+#>install Asplit-2-1.noarch@available
+#>upgrade A-1-1.noarch@system A-2-1.noarch@available
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libsolv-0.7.21/test/testcases/choicerules/choice6.t 
new/libsolv-0.7.22/test/testcases/choicerules/choice6.t
--- old/libsolv-0.7.21/test/testcases/choicerules/choice6.t     1970-01-01 
01:00:00.000000000 +0100
+++ new/libsolv-0.7.22/test/testcases/choicerules/choice6.t     2022-03-16 
15:19:46.000000000 +0100
@@ -0,0 +1,28 @@
+#Rule #4:
+#    !php-fpm-7.2.24-1.noarch [5] (w1)
+#    glibc-2.17-325.noarch [2]I (w2)
+#    libcrypt-4.1.1-6.noarch [7]
+#=> no choice rule for #4
+#
+repo @System 0 testtags <inline>
+#>=Pkg: glibc 2.17 325 noarch
+#>=Prv: libcrypt
+#>=Pkg: php 5.4.16 48 noarch
+repo available 0 testtags <inline>
+#>=Pkg: php 7.2.24 1 noarch
+#>=Rec: php-fpm = 7.2.24-1
+#>=Pkg: php-fpm 7.2.24 1 noarch
+#>=Req: libcrypt
+#>=Pkg: php-fpm 8.0.13 2 noarch
+#>=Req: libcrypt
+#>=Pkg: libcrypt 4.1.1 6 noarch
+#>=Req: libc
+#>=Pkg: glibc 2.28 181 noarch
+#>=Prv: libc
+system i686 rpm @System
+job update all packages
+result transaction,problems <inline>
+#>install libcrypt-4.1.1-6.noarch@available
+#>install php-fpm-7.2.24-1.noarch@available
+#>upgrade glibc-2.17-325.noarch@@System glibc-2.28-181.noarch@available
+#>upgrade php-5.4.16-48.noarch@@System php-7.2.24-1.noarch@available

Reply via email to