Blame SOURCES/0027-reportclient-Search-for-required-packages-recursivel.patch

fac900
From c0d0e59df7d73feb971ba495c81f4651a8cea8a6 Mon Sep 17 00:00:00 2001
fac900
From: Martin Kutlak <mkutlak@redhat.com>
fac900
Date: Wed, 5 Dec 2018 16:52:07 +0100
fac900
Subject: [PATCH] reportclient: Search for required packages recursively
fac900
fac900
Adds recursive function to search for required packages of required packages
fac900
of re...
fac900
fac900
Signed-off-by: Martin Kutlak <mkutlak@redhat.com>
fac900
---
fac900
 .../reportclient/dnfdebuginfo.py              | 21 +++++++++++++++++--
fac900
 1 file changed, 19 insertions(+), 2 deletions(-)
fac900
fac900
diff --git a/src/client-python/reportclient/dnfdebuginfo.py b/src/client-python/reportclient/dnfdebuginfo.py
fac900
index 04f98579..165c12d0 100644
fac900
--- a/src/client-python/reportclient/dnfdebuginfo.py
fac900
+++ b/src/client-python/reportclient/dnfdebuginfo.py
fac900
@@ -112,6 +112,23 @@ class DNFDebugInfoDownload(DebugInfoDownload):
fac900
         not_found = []
fac900
         todownload_size = 0
fac900
         installed_size = 0
fac900
+
fac900
+        def required_packages(query, package, origin):
fac900
+            """
fac900
+            Recursive function to find all required packages of required packages of ...
fac900
+              origin - should stop infinite recursion (A => B => ... => X => A)
fac900
+            """
fac900
+            required_pkg_list = []
fac900
+            if package.requires:
fac900
+                pkg_reqs = query.filter(provides=package.requires, arch=package.arch)
fac900
+                for p in pkg_reqs:
fac900
+                    if p.name != origin.name and p not in required_pkg_list:
fac900
+                        required_pkg_list.append(p)
fac900
+                        required_pkg_list += required_packages(query, p, origin)
fac900
+
fac900
+            return required_pkg_list
fac900
+
fac900
+
fac900
         for debuginfo_path in files:
fac900
             di_package_list = []
fac900
             packages = dnf_available.filter(file=debuginfo_path)
fac900
@@ -122,13 +139,13 @@ class DNFDebugInfoDownload(DebugInfoDownload):
fac900
             else:
fac900
                 di_package_list.append(packages[0])
fac900
                 if packages[0].requires:
fac900
-                    package_reqs = dnf_available.filter(provides=packages[0].requires,
fac900
-                                                        arch=packages[0].arch)
fac900
+                    package_reqs = required_packages(dnf_available, packages[0], packages[0])
fac900
                     for pkg in package_reqs:
fac900
                         if pkg not in di_package_list:
fac900
                             di_package_list.append(pkg)
fac900
                             log2("found required package {0} for {1}".format(pkg, packages[0]))
fac900
 
fac900
+
fac900
                 for pkg in di_package_list:
fac900
                     if pkg in package_files_dict.keys():
fac900
                         package_files_dict[pkg].append(debuginfo_path)
fac900
-- 
fac900
2.24.1
fac900