145 lines
4.2 KiB
Diff
145 lines
4.2 KiB
Diff
|
From 137ecc2e1841c2b27b99d4db9006253dd1c73dde Mon Sep 17 00:00:00 2001
|
||
|
From: Michael Schroeder <mls@suse.de>
|
||
|
Date: Fri, 4 Jun 2021 23:30:49 +0200
|
||
|
Subject: [PATCH] Unbreak checking of installed rich dependencies
|
||
|
|
||
|
Commit ddb32b9187e9ce85819a84ca8d202131fd9f8b9f added an
|
||
|
extra check that tests if the provide we are checking really
|
||
|
intersects the dependency from rpmdb. Unfortunately the
|
||
|
rpmdsCompare() call does not understand rich dependencies and
|
||
|
will consider them as not intersecting.
|
||
|
|
||
|
Unbreak the check by not doing the intersection test for
|
||
|
rich dependencies. We'll improve this in a later commit.
|
||
|
|
||
|
Also add test cases for dependency problems with installed
|
||
|
rich dependencies.
|
||
|
---
|
||
|
lib/depends.c | 2 +-
|
||
|
tests/rpmdeps.at | 99 ++++++++++++++++++++++++++++++++++++++++++++++++
|
||
|
2 files changed, 100 insertions(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/lib/depends.c b/lib/depends.c
|
||
|
index c10ba4bda..fecbd9675 100644
|
||
|
--- a/lib/depends.c
|
||
|
+++ b/lib/depends.c
|
||
|
@@ -846,7 +846,7 @@ static void checkInstDeps(rpmts ts, depCache dcache, rpmte te,
|
||
|
rpmdsSetIx(ds, rpmdbGetIteratorFileNum(mi));
|
||
|
|
||
|
/* Is it in our range at all? (but file deps have no range) */
|
||
|
- if (depds)
|
||
|
+ if (depds && !rpmdsIsRich(ds))
|
||
|
match = rpmdsCompare(ds, depds);
|
||
|
|
||
|
if (match && unsatisfiedDepend(ts, dcache, ds) == is_problem) {
|
||
|
diff --git a/tests/rpmdeps.at b/tests/rpmdeps.at
|
||
|
index 67bde1dc8..8357af9df 100644
|
||
|
--- a/tests/rpmdeps.at
|
||
|
+++ b/tests/rpmdeps.at
|
||
|
@@ -732,3 +732,102 @@ runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarc
|
||
|
[],
|
||
|
[])
|
||
|
AT_CLEANUP
|
||
|
+
|
||
|
+# ------------------------------
|
||
|
+#
|
||
|
+AT_SETUP([install to break installed rich dependency])
|
||
|
+AT_KEYWORDS([install, boolean])
|
||
|
+RPMDB_INIT
|
||
|
+
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg one" \
|
||
|
+ --define "cfls (deptest-three or deptest-five)" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg two" \
|
||
|
+ --define "reqs (deptest-five if deptest-four)" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg three" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg four" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+
|
||
|
+# installed conflict with "or" clause
|
||
|
+AT_CHECK([
|
||
|
+RPMDB_INIT
|
||
|
+
|
||
|
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm
|
||
|
+runroot rpm -U /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
|
||
|
+],
|
||
|
+[1],
|
||
|
+[],
|
||
|
+[error: Failed dependencies:
|
||
|
+ (deptest-three or deptest-five) conflicts with (installed) deptest-one-1.0-1.noarch
|
||
|
+])
|
||
|
+
|
||
|
+# installed requires with "if" clause
|
||
|
+AT_CHECK([
|
||
|
+RPMDB_INIT
|
||
|
+
|
||
|
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm
|
||
|
+runroot rpm -U /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm
|
||
|
+],
|
||
|
+[1],
|
||
|
+[],
|
||
|
+[error: Failed dependencies:
|
||
|
+ (deptest-five if deptest-four) is needed by (installed) deptest-two-1.0-1.noarch
|
||
|
+])
|
||
|
+AT_CLEANUP
|
||
|
+
|
||
|
+# ------------------------------
|
||
|
+#
|
||
|
+AT_SETUP([erase to break installed rich dependency])
|
||
|
+AT_KEYWORDS([install, boolean])
|
||
|
+RPMDB_INIT
|
||
|
+
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg one" \
|
||
|
+ --define "reqs (deptest-three or deptest-five)" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg two" \
|
||
|
+ --define "cfls (deptest-five unless deptest-four)" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg three" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg four" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+runroot rpmbuild --quiet -bb \
|
||
|
+ --define "pkg five" \
|
||
|
+ /data/SPECS/deptest.spec
|
||
|
+
|
||
|
+# installed requires with "or" clause
|
||
|
+AT_CHECK([
|
||
|
+RPMDB_INIT
|
||
|
+
|
||
|
+runroot rpm -U /build/RPMS/noarch/deptest-one-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-three-1.0-1.noarch.rpm
|
||
|
+runroot rpm -e deptest-three
|
||
|
+],
|
||
|
+[1],
|
||
|
+[],
|
||
|
+[error: Failed dependencies:
|
||
|
+ (deptest-three or deptest-five) is needed by (installed) deptest-one-1.0-1.noarch
|
||
|
+])
|
||
|
+
|
||
|
+# installed conflicts with "unless" clause
|
||
|
+AT_CHECK([
|
||
|
+RPMDB_INIT
|
||
|
+
|
||
|
+runroot rpm -U /build/RPMS/noarch/deptest-two-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-four-1.0-1.noarch.rpm /build/RPMS/noarch/deptest-five-1.0-1.noarch.rpm
|
||
|
+runroot rpm -e deptest-four
|
||
|
+],
|
||
|
+[1],
|
||
|
+[],
|
||
|
+[error: Failed dependencies:
|
||
|
+ (deptest-five unless deptest-four) conflicts with (installed) deptest-two-1.0-1.noarch
|
||
|
+])
|
||
|
+AT_CLEANUP
|
||
|
--
|
||
|
2.33.1
|
||
|
|