From 0e5e8f7430f3759c43d9e1e0eda113ddf2ea16d9 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: May 26 2022 07:23:36 +0000 Subject: Include all possible problematic rules in the problem description. When rpmdeplint finds problem, it currently only prints the top-level problem. This in the most cases does not provide enough details to successfully debug the situation. In this commit, the rpmdeplint prints all the problematic RPM rules leading to a problem, providing much more details. Signed-off-by: Jan Kaluza --- diff --git a/rpmdeplint/__init__.py b/rpmdeplint/__init__.py index 0a66c69..1b62aab 100644 --- a/rpmdeplint/__init__.py +++ b/rpmdeplint/__init__.py @@ -64,9 +64,17 @@ class DependencySet(object): nevra = str(pkg) self._packagedeps[nevra]['dependencies'].extend(map(str, dependencies)) if len(problems) != 0: - self._packagedeps[nevra]['problems'].extend(problems) + all_problems = [] + # For each problem, find all the problematic RPM "rules" which + # lead to the problem and also include them in + # the `overall_problems` description. + for problem in problems: + all_problems.append(six.text_type(problem)) + for rule in problem.findallproblemrules(): + all_problems.append(rule.info().problemstr()) + self._packagedeps[nevra]['problems'].extend(all_problems) self._packages_with_problems.add(nevra) - self._overall_problems.update(problems) + self._overall_problems.update(all_problems) @property def packages(self): @@ -188,7 +196,7 @@ class DependencyAnalyzer(object): jobs = solvable.Selection().jobs(solv.Job.SOLVER_INSTALL) problems = solver.solve(jobs) if problems: - ds.add_package(solvable, [], [six.text_type(p) for p in problems]) + ds.add_package(solvable, [], problems) else: ds.add_package(solvable, solver.transaction().newsolvables(), []) diff --git a/rpmdeplint/tests/test_dependency_analyzer.py b/rpmdeplint/tests/test_dependency_analyzer.py index b8ea996..33c2ecb 100644 --- a/rpmdeplint/tests/test_dependency_analyzer.py +++ b/rpmdeplint/tests/test_dependency_analyzer.py @@ -58,7 +58,8 @@ class TestDependencyAnalyzer(TestCase): ok, dependency_set = da.try_to_install_all() self.assertEqual(False, ok) self.assertEqual(1, len(dependency_set.overall_problems)) - self.assertEqual(['nothing provides egg-whites needed by lemon-meringue-pie-1-0.x86_64'], + self.assertEqual(['nothing provides egg-whites needed by lemon-meringue-pie-1-0.x86_64', + 'nothing provides egg-whites needed by lemon-meringue-pie-1-0.x86_64'], dependency_set.package_dependencies['lemon-meringue-pie-1-0.x86_64']['problems']) eggs = SimpleRpmBuild('eggs', '1', '3', ['noarch'])