Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP4:Update
libdnf
0001-Skip-rich-deps-for-autodetection-of-unmet-...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Skip-rich-deps-for-autodetection-of-unmet-dependencies.patch of Package libdnf
From e361b9fa110f5c79f0713243a1e7cba189d1219c Mon Sep 17 00:00:00 2001 From: Jaroslav Mracek <jmracek@redhat.com> Date: Tue, 8 Feb 2022 09:30:03 +0100 Subject: [PATCH] Skip rich deps for autodetection of unmet dependencies Rich dependencies are difficult to properly evaluate because we do not have enough information about past and only libsolv is capable to evaluate it in comparison to present state of the system. Additionally - rich deps are used for langpacks therefore disabling unmet rich deps will have a negative impact on UX. --- libdnf/goal/Goal.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/libdnf/goal/Goal.cpp b/libdnf/goal/Goal.cpp index 2b698f7..ebe2fbd 100644 --- a/libdnf/goal/Goal.cpp +++ b/libdnf/goal/Goal.cpp @@ -835,8 +835,12 @@ Goal::exclude_from_weak_autodetect() installed_names.push_back(dnf_package_get_name(pkg)); std::unique_ptr<libdnf::DependencyContainer> recommends(dnf_package_get_recommends(pkg)); for (int i = 0; i < recommends->count(); ++i) { - Query query(base_query); std::unique_ptr<libdnf::Dependency> dep(recommends->getPtr(i)); + const char * dep_string = dep->toString(); + if (dep_string[0] == '(') { + continue; + } + Query query(base_query); const char * version = dep->getVersion(); // There can be installed provider in different version or upgraded packed can recommend a different version // Ignore version and search only by reldep name @@ -858,7 +862,7 @@ Goal::exclude_from_weak_autodetect() } } - // Invesigate supplements of only available packages with a different name to installed packages + // Investigate supplements of only available packages with a different name to installed packages installed_names.push_back(nullptr); base_query.addFilter(HY_PKG_NAME, HY_NEQ, installed_names.data()); auto * available_pset = base_query.getResultPset(); @@ -870,8 +874,20 @@ Goal::exclude_from_weak_autodetect() if (supplements->count() == 0) { continue; } + libdnf::DependencyContainer supplements_without_rich(getSack()); + for (int i = 0; i < supplements->count(); ++i) { + std::unique_ptr<libdnf::Dependency> dep(supplements->getPtr(i)); + const char * dep_string = dep->toString(); + if (dep_string[0] == '(') { + continue; + } + supplements_without_rich.add(dep.get()); + } + if (supplements_without_rich.count() == 0) { + continue; + } Query query(installed_query); - query.addFilter(HY_PKG_PROVIDES, supplements.get()); + query.addFilter(HY_PKG_PROVIDES, &supplements_without_rich); // When supplemented package already installed, exclude_from_weak available package if (!query.empty()) { add_exclude_from_weak(pkg); -- libgit2 1.1.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor