You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
4.2 KiB
144 lines
4.2 KiB
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 |
|
|
|
|