From ede0478c7686b0955c42b24d9874058bcaf06ed8 Mon Sep 17 00:00:00 2001 From: Pavla Kratochvilova Date: Feb 21 2022 08:53:51 +0000 Subject: Skip rich deps for autodetection of unmet dependencies (RhBug:2033130) --- diff --git a/0001-Skip-rich-deps-for-autodetection-of-unmet-dependencies.patch b/0001-Skip-rich-deps-for-autodetection-of-unmet-dependencies.patch new file mode 100644 index 0000000..bf99a23 --- /dev/null +++ b/0001-Skip-rich-deps-for-autodetection-of-unmet-dependencies.patch @@ -0,0 +1,67 @@ +From e361b9fa110f5c79f0713243a1e7cba189d1219c Mon Sep 17 00:00:00 2001 +From: Jaroslav Mracek +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 recommends(dnf_package_get_recommends(pkg)); + for (int i = 0; i < recommends->count(); ++i) { +- Query query(base_query); + std::unique_ptr 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 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 + diff --git a/libdnf.spec b/libdnf.spec index 22cf954..05cf877 100644 --- a/libdnf.spec +++ b/libdnf.spec @@ -56,11 +56,12 @@ Name: libdnf Version: %{libdnf_major_version}.%{libdnf_minor_version}.%{libdnf_micro_version} -Release: 2%{?dist} +Release: 3%{?dist} Summary: Library providing simplified C and Python API to libsolv License: LGPLv2+ URL: https://github.com/rpm-software-management/libdnf Source0: %{url}/archive/%{version}/%{name}-%{version}.tar.gz +Patch1: 0001-Skip-rich-deps-for-autodetection-of-unmet-dependencies.patch BuildRequires: cmake BuildRequires: gcc @@ -305,6 +306,9 @@ popd %endif %changelog +* Mon Feb 21 2022 Pavla Kratochvilova - 0.65.0-3 +- Skip rich deps for autodetection of unmet dependencies (RhBug:2033130) + * Thu Jan 20 2022 Fedora Release Engineering - 0.65.0-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild