Blame SOURCES/0026-reportclient-Find-and-download-required-debuginfo-pa.patch

fa18db
From 23110cb7198e53c1e211ba8a41c7406b04641574 Mon Sep 17 00:00:00 2001
fa18db
From: Martin Kutlak <mkutlak@redhat.com>
fa18db
Date: Mon, 3 Dec 2018 13:54:34 +0100
fa18db
Subject: [PATCH] reportclient: Find and download required debuginfo packages
fa18db
fa18db
The current solution finds packages for given build-ids and then
fa18db
downloads them. The problem is that some debuginfo packages require
fa18db
other packages and if they are not available the generated backtrace
fa18db
becomes unusable.
fa18db
fa18db
This commit adds a query for required packages and downloads them together
fa18db
with the main packages.
fa18db
fa18db
Related: rhbz#1515265
fa18db
fa18db
Signed-off-by: Martin Kutlak <mkutlak@redhat.com>
fa18db
---
fa18db
 .../reportclient/dnfdebuginfo.py              | 34 +++++++++++++------
fa18db
 1 file changed, 23 insertions(+), 11 deletions(-)
fa18db
fa18db
diff --git a/src/client-python/reportclient/dnfdebuginfo.py b/src/client-python/reportclient/dnfdebuginfo.py
fa18db
index 1867484f..04f98579 100644
fa18db
--- a/src/client-python/reportclient/dnfdebuginfo.py
fa18db
+++ b/src/client-python/reportclient/dnfdebuginfo.py
fa18db
@@ -106,26 +106,38 @@ class DNFDebugInfoDownload(DebugInfoDownload):
fa18db
             print(_("Error setting up repositories: '{0!s}'").format(str(ex)))
fa18db
 
fa18db
     def triage(self, files):
fa18db
-        q = self.base.sack.query()
fa18db
-        i = q.available()
fa18db
+        dnf_query = self.base.sack.query()
fa18db
+        dnf_available = dnf_query.available()
fa18db
         package_files_dict = {}
fa18db
         not_found = []
fa18db
         todownload_size = 0
fa18db
         installed_size = 0
fa18db
         for debuginfo_path in files:
fa18db
-            packages = i.filter(file=debuginfo_path)
fa18db
+            di_package_list = []
fa18db
+            packages = dnf_available.filter(file=debuginfo_path)
fa18db
+
fa18db
             if not packages:
fa18db
                 log2("not found package for %s", debuginfo_path)
fa18db
                 not_found.append(debuginfo_path)
fa18db
             else:
fa18db
-                if packages[0] in package_files_dict.keys():
fa18db
-                    package_files_dict[packages[0]].append(debuginfo_path)
fa18db
-                else:
fa18db
-                    package_files_dict[packages[0]] = [debuginfo_path]
fa18db
-                    todownload_size += float(packages[0].downloadsize)
fa18db
-                    installed_size += float(packages[0].installsize)
fa18db
-
fa18db
-                log2("found packages for %s: %s", debuginfo_path, packages[0])
fa18db
+                di_package_list.append(packages[0])
fa18db
+                if packages[0].requires:
fa18db
+                    package_reqs = dnf_available.filter(provides=packages[0].requires,
fa18db
+                                                        arch=packages[0].arch)
fa18db
+                    for pkg in package_reqs:
fa18db
+                        if pkg not in di_package_list:
fa18db
+                            di_package_list.append(pkg)
fa18db
+                            log2("found required package {0} for {1}".format(pkg, packages[0]))
fa18db
+
fa18db
+                for pkg in di_package_list:
fa18db
+                    if pkg in package_files_dict.keys():
fa18db
+                        package_files_dict[pkg].append(debuginfo_path)
fa18db
+                    else:
fa18db
+                        package_files_dict[pkg] = [debuginfo_path]
fa18db
+                        todownload_size += float(pkg.downloadsize)
fa18db
+                        installed_size += float(pkg.installsize)
fa18db
+
fa18db
+                    log2("found packages for %s: %s", debuginfo_path, pkg)
fa18db
         return (package_files_dict, not_found, todownload_size, installed_size)
fa18db
 
fa18db
     def download_package(self, pkg):
fa18db
-- 
fa18db
2.24.1
fa18db