For quicker lookups than searching the linear list. --- v2v/convert_linux_enterprise.ml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/v2v/convert_linux_enterprise.ml b/v2v/convert_linux_enterprise.ml index 64eb93d..11627a9 100644 --- a/v2v/convert_linux_enterprise.ml +++ b/v2v/convert_linux_enterprise.ml @@ -32,7 +32,9 @@ open Common_utils open Utils open Types -let rec convert ?(keep_serial_console = true) verbose (g : Guestfs.guestfs) +module StringMap = Map.Make (String) + +let rec convert ?(keep_serial_console = true) verbose (g : G.guestfs) ({ i_root = root; i_apps = apps } as inspect) source = let typ = g#inspect_get_type root @@ -52,6 +54,17 @@ let rec convert ?(keep_serial_console = true) verbose (g : Guestfs.guestfs) and is_suse_family = (distro = "sles" || distro = "suse-based" || distro = "opensuse") in + (* A map of app2_name -> application2, for easier lookups. Note + * that app names are not unique! (eg. 'kernel' can appear multiple + * times) + *) + let apps_map = List.fold_left ( + fun map app -> + let name = app.G.app2_name in + let vs = try StringMap.find name map with Not_found -> [] in + StringMap.add name (app :: vs) map + ) StringMap.empty apps in + let rec clean_rpmdb () = (* Clean RPM database. *) assert (package_format = "rpm"); -- 1.9.0