michal-grzedzicki / rpms / rpm

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