fix requirement error

This commit is contained in:
hanhuihui 2023-08-19 21:17:35 +08:00
parent 1f43668bc4
commit 571f9443ba
4 changed files with 114 additions and 2 deletions

View File

@ -0,0 +1,26 @@
From 47734e26d67ad236a29c160ff224fcb1910e3a6f Mon Sep 17 00:00:00 2001
From: Michael Schroeder <mls@suse.de>
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 <inline>
+#>=Pkg: xorg-x11-server-Xorg 1.20.11 18.el9 noarch
+#>=Req: missing-req
+#>=Pkg: pass 1.7.4 6.el9 noarch
+#>=Rec: xclip <IF> (xorg-x11-server-Xorg <ELSE> wl-clipboard)
+repo @System 0 empty
+system unset * @System
+job install pkg pass-1.7.4-6.el9.noarch@appstream
+result transaction,problems <inline>
+#>install pass-1.7.4-6.el9.noarch@appstream

View File

@ -0,0 +1,27 @@
From 1edb35a3bd9abcede3a200471a4d1868f8054c99 Mon Sep 17 00:00:00 2001
From: Michael Schroeder <mls@suse.de>
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;
}

View File

@ -0,0 +1,50 @@
From 2c85ed581422e072ad95119f3d7dc19eb45f29ac Mon Sep 17 00:00:00 2001
From: Michael Schroeder <mls@suse.de>
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;

View File

@ -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<hanhuihui5@huawei.com> - 0.7.22-2
- Type:bugfix
- ID:NA
- SUG:NA
- DESC:fix requirement error
* Tue Nov 8 2022 hanhuihui<hanhuihui5@huawei.com> - 0.7.22-1
- Type:bugfix
- ID:NA