27e02e0
From 92d5d7e8c27088fa3fb8e5e6e9c5b8d3209053d6 Mon Sep 17 00:00:00 2001
27e02e0
From: "Richard W.M. Jones" <rjones@redhat.com>
27e02e0
Date: Tue, 30 May 2023 09:12:14 +0100
27e02e0
Subject: [PATCH 4/4] rpm: Detect dnf5 and omit missing options
27e02e0
27e02e0
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=2209412
27e02e0
---
27e02e0
 src/ph_rpm.ml | 23 +++++++++++++++++++++--
27e02e0
 1 file changed, 21 insertions(+), 2 deletions(-)
27e02e0
27e02e0
diff --git a/src/ph_rpm.ml b/src/ph_rpm.ml
27e02e0
index 2c199c1..3e803c6 100644
27e02e0
--- a/src/ph_rpm.ml
27e02e0
+++ b/src/ph_rpm.ml
27e02e0
@@ -482,19 +482,38 @@ and download_all_packages_with_dnf pkgs dir tdir =
27e02e0
   (* Old dnf didn't create the destdir directory, newer versions do. *)
27e02e0
   mkdir tdir 0o700;
27e02e0
 
27e02e0
+  (* dnf5 lacks various options so we have to detect it:
27e02e0
+   * https://github.com/rpm-software-management/dnf5/issues/580
27e02e0
+   * https://github.com/rpm-software-management/dnf5/issues/581
27e02e0
+   *)
27e02e0
+  let is_dnf5 = is_dnf5 () in
27e02e0
+  let debug_quiet_option =
27e02e0
+    if !settings.debug < 1 then " -q"
27e02e0
+    else if not is_dnf5 then " -v"
27e02e0
+    else "" in
27e02e0
+
27e02e0
   let rpms = pkgs_as_NA_rpms pkgs in
27e02e0
 
27e02e0
   let cmd =
27e02e0
-    sprintf "%s download%s%s --destdir=%s --disableexcludes=all %s"
27e02e0
+    sprintf "%s download%s%s%s --destdir=%s %s"
27e02e0
       Config.dnf
27e02e0
-      (if !settings.debug >= 1 then " -v" else " -q")
27e02e0
+      debug_quiet_option
27e02e0
       (match !settings.packager_config with
27e02e0
       | None -> ""
27e02e0
       | Some filename -> sprintf " -c %s" (quote filename))
27e02e0
+      (if not is_dnf5 then " --disableexcludes=all" else "")
27e02e0
       (quote tdir)
27e02e0
       (quoted_list rpms) in
27e02e0
   run_command cmd
27e02e0
 
27e02e0
+and is_dnf5 () =
27e02e0
+  let cmd = sprintf "%s --version" Config.dnf in
27e02e0
+  let lines = run_command_get_lines cmd in
27e02e0
+  match lines with
27e02e0
+  | [] -> error "rpm: no output from '%s' command" cmd
27e02e0
+  | line :: _ when find line "version 5" >= 0 -> true
27e02e0
+  | _ -> false
27e02e0
+
27e02e0
 and pkgs_as_NA_rpms pkgs =
27e02e0
   let rpms = List.map rpm_of_pkg (PackageSet.elements pkgs) in
27e02e0
   List.map (
27e02e0
-- 
27e02e0
2.40.1
27e02e0