diff --git a/backport-Add-testcase-for-last-commit.patch b/backport-Add-testcase-for-last-commit.patch new file mode 100644 index 0000000000000000000000000000000000000000..f26a9bd0dd45b73f92fe97ab49aeec0fb8a1fe85 --- /dev/null +++ b/backport-Add-testcase-for-last-commit.patch @@ -0,0 +1,26 @@ +From 47734e26d67ad236a29c160ff224fcb1910e3a6f Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Tue, 18 Apr 2023 12:36:40 +0200 +Subject: [PATCH] Add testcase for last commit + +--- + test/testcases/cplxdeps/ifelse_rec.t | 10 ++++++++++ + 1 file changed, 10 insertions(+) + create mode 100644 test/testcases/cplxdeps/ifelse_rec.t + +diff --git a/test/testcases/cplxdeps/ifelse_rec.t b/test/testcases/cplxdeps/ifelse_rec.t +new file mode 100644 +index 000000000..ea467027c +--- /dev/null ++++ b/test/testcases/cplxdeps/ifelse_rec.t +@@ -0,0 +1,10 @@ ++repo appstream 0 testtags ++#>=Pkg: xorg-x11-server-Xorg 1.20.11 18.el9 noarch ++#>=Req: missing-req ++#>=Pkg: pass 1.7.4 6.el9 noarch ++#>=Rec: xclip (xorg-x11-server-Xorg wl-clipboard) ++repo @System 0 empty ++system unset * @System ++job install pkg pass-1.7.4-6.el9.noarch@appstream ++result transaction,problems ++#>install pass-1.7.4-6.el9.noarch@appstream diff --git a/backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch b/backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch new file mode 100644 index 0000000000000000000000000000000000000000..0ac5e3f3eefd30b843b56a6a560657411b50b11c --- /dev/null +++ b/backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch @@ -0,0 +1,27 @@ +From 1edb35a3bd9abcede3a200471a4d1868f8054c99 Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Tue, 18 Apr 2023 11:57:50 +0200 +Subject: [PATCH] Treat condition both as positive and negative literal in + pool_add_pos_literals_complex_dep + +That's because (A IF B ELSE C) gets rewritten to (A OR ~B) AND (C OR B) and +(A UNLESS B ELSE C) gets rewritten to (A AND ~B) OR (C AND B). In both +cases we have A, B, ~B, C. + +This resolves issue #527 +--- + src/cplxdeps.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/cplxdeps.c b/src/cplxdeps.c +index 6c40752e2..26e754d95 100644 +--- a/src/cplxdeps.c ++++ b/src/cplxdeps.c +@@ -405,6 +405,7 @@ pool_add_pos_literals_complex_dep(Pool *pool, Id dep, Queue *q, Map *m, int neg) + Reldep *rd2 = GETRELDEP(pool, rd->evr); + if (rd2->flags == REL_ELSE) + { ++ pool_add_pos_literals_complex_dep(pool, rd2->name, q, m, !neg); + pool_add_pos_literals_complex_dep(pool, rd2->evr, q, m, !neg); + dep = rd2->name; + } diff --git a/backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch b/backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch new file mode 100644 index 0000000000000000000000000000000000000000..06c5c53d2dd2b3d60d6ad7679eb2ae73e08240bb --- /dev/null +++ b/backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch @@ -0,0 +1,50 @@ +From 2c85ed581422e072ad95119f3d7dc19eb45f29ac Mon Sep 17 00:00:00 2001 +From: Michael Schroeder +Date: Fri, 19 May 2023 15:17:53 +0200 +Subject: [PATCH] choice rules: also do solver_choicerulecheck for package + downgrades + +Fixes issue #514 +--- + src/rules.c | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/rules.c b/src/rules.c +index 660656f01..7d57cfdee 100644 +--- a/src/rules.c ++++ b/src/rules.c +@@ -3449,6 +3449,7 @@ solver_addchoicerules(Solver *solv) + int lastaddedcnt; + unsigned int now; + int isinstalled; ++ int dodowngradecheck = solv->allowdowngrade; + + solv->choicerules = solv->nrules; + if (!pool->installed) +@@ -3457,6 +3458,8 @@ solver_addchoicerules(Solver *solv) + return; + } + now = solv_timems(0); ++ if ((solv->dupinvolvedmap_all || solv->dupinvolvedmap.size) && solv->dup_allowdowngrade) ++ dodowngradecheck = 1; + queue_init(&q); + queue_init(&qi); + queue_init(&qcheck); +@@ -3532,8 +3535,16 @@ solver_addchoicerules(Solver *solv) + /* do extra checking for packages related to installed packages */ + for (i = j = 0; i < qi.count; i += 2) + { ++ int isdowngrade = 0; + p2 = qi.elements[i]; +- if (solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, p2 - solv->installed->start))) ++ if (dodowngradecheck) ++ { ++ p = qi.elements[i + 1]; ++ if (pool->solvables[p2].name == pool->solvables[p].name) ++ if (pool_evrcmp(pool, pool->solvables[p2].evr, pool->solvables[p].evr, EVRCMP_COMPARE) > 0) ++ isdowngrade = 1; ++ } ++ if (isdowngrade || solv->updatemap_all || (solv->updatemap.size && MAPTST(&solv->updatemap, p2 - solv->installed->start))) + { + if (solver_choicerulecheck(solv, p2, r, &m, &qcheck)) + continue; diff --git a/libsolv.spec b/libsolv.spec index 65be1645f41a180615d3f8191c9327a718658fa1..f37e17221ac363110c95f58d734ec18cbde6c765 100644 --- a/libsolv.spec +++ b/libsolv.spec @@ -15,13 +15,16 @@ Name: libsolv Version: 0.7.22 -Release: 1 +Release: 2 Summary: Package dependency solver License: BSD URL: https://github.com/openSUSE/libsolv Source: https://github.com/openSUSE/libsolv/archive/refs/tags/%{version}.tar.gz -Patch0: Fix-memory-leak-when-using-testsolv-to-execute-cases.patch +Patch0: Fix-memory-leak-when-using-testsolv-to-execute-cases.patch +Patch6001: backport-Treat-condition-both-as-positive-and-negative-literal-in-pool_add_pos_literals_complex_dep.patch +Patch6002: backport-Add-testcase-for-last-commit.patch +Patch6003: backport-choice-rules-also-do-solver_choicerulecheck-for-package-downgrades.patch BuildRequires: cmake gcc-c++ ninja-build pkgconfig(rpm) zlib-devel BuildRequires: libxml2-devel xz-devel bzip2-devel @@ -215,6 +218,12 @@ Python 3 version. %{_mandir}/man3/%{name}*.3* %changelog +* Sat Aug 19 2023 hanhuihui - 0.7.22-2 +- Type:bugfix +- ID:NA +- SUG:NA +- DESC:fix requirement error + * Tue Nov 8 2022 hanhuihui - 0.7.22-1 - Type:bugfix - ID:NA