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