--- src/rpm.ml | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/rpm.ml b/src/rpm.ml index adb5c89..f79b357 100644 --- a/src/rpm.ml +++ b/src/rpm.ml @@ -43,8 +43,9 @@ let mageia_detect () = let settings = ref no_settings let rpm_major, rpm_minor = ref 0, ref 0 +let zypper_major, zypper_minor, zypper_patch = ref 0, ref 0, ref 0 -let rpm_init s = +let rec rpm_init s = settings := s; (* Get RPM version. We have to adjust some RPM commands based on @@ -76,6 +77,44 @@ let rpm_init s = if !settings.debug >= 1 then printf "supermin: rpm: detected RPM version %d.%d\n" major minor +and opensuse_init s = + rpm_init s; + + (* Get zypper version. We can use better zypper commands with more + * recent versions. + *) + let cmd = sprintf "%s --version | awk '{print $2}'" Config.zypper in + let lines = run_command_get_lines cmd in + let major, minor, patch = + match lines with + | [] -> + eprintf "supermin: zypper --version command had no output\n"; + exit 1 + | line :: _ -> + let line = string_split "." line in + match line with + | [] -> + eprintf "supermin: unable to parse empty output of zypper --version\n"; + exit 1 + | [x] -> + eprintf "supermin: unable to parse output of zypper --version: %s\n" x; + exit 1 + | major :: minor :: [] -> + (try int_of_string major, int_of_string minor, 0 + with Failure "int_of_string" -> + eprintf "supermin: unable to parse output of zypper --version: non-numeric\n"; + exit 1) + | major :: minor :: patch :: _ -> + (try int_of_string major, int_of_string minor, int_of_string patch + with Failure "int_of_string" -> + eprintf "supermin: unable to parse output of zypper --version: non-numeric\n"; + exit 1) in + zypper_major := major; + zypper_minor := minor; + zypper_patch := patch; + if !settings.debug >= 1 then + printf "supermin: rpm: detected zypper version %d.%d.%d\n" major minor patch + type rpm_t = { name : string; epoch : int32; @@ -346,6 +385,7 @@ let () = let opensuse = { fedora with ph_detect = opensuse_detect; + ph_init = opensuse_init; ph_download_package = PHDownloadAllPackages opensuse_download_all_packages; } in register_package_handler "opensuse" "rpm" opensuse; -- 2.0.4