Richard W.M. Jones
2017-Oct-08 20:43 UTC
[Libguestfs] [PATCH 0/3] common/mlstdutils: Add Std_utils List and Option modules.
In Std_utils we already extend Char and String. These commits take it a little further by extending List and adding a new Option submodule. All basically simple refactoring. Rich.
Richard W.M. Jones
2017-Oct-08 20:43 UTC
[Libguestfs] [PATCH 1/3] common/mlstdutils: Move list functions into extended List module.
However some existing functions had names which shadowed existing
functions in the List module, so I had to rename them:
assoc -> List.assoc_
append -> List.push_back_list
prepend -> List.push_front_list
This is an extension of the previous commit.
---
builder/builder.ml | 2 +-
builder/cmdline.ml | 8 +-
builder/downloader.ml | 10 +--
builder/languages.ml | 6 +-
builder/sigchecker.ml | 2 +-
builder/simplestreams_parser.ml | 6 +-
builder/yajl.ml | 2 +-
common/mlstdutils/std_utils.ml | 167 ++++++++++++++++++-----------------
common/mlstdutils/std_utils.mli | 149 +++++++++++++++----------------
common/mltools/getopt_tests.ml | 6 +-
common/mltools/tools_utils.ml | 2 +-
customize/customize_main.ml | 4 +-
customize/customize_run.ml | 2 +-
daemon/inspect.ml | 6 +-
daemon/inspect_fs_unix_fstab.ml | 2 +-
daemon/inspect_fs_windows.ml | 4 +-
daemon/listfs.ml | 12 +--
daemon/lvm.ml | 2 +-
daemon/mount.ml | 22 ++---
daemon/parted.ml | 14 +--
dib/cmdline.ml | 14 +--
dib/dib.ml | 2 +-
dib/elements.ml | 2 +-
dib/output_format.ml | 4 +-
generator/UEFI.ml | 2 +-
generator/customize.ml | 20 ++---
generator/tests_c_api.ml | 2 +-
resize/resize.ml | 4 +-
sparsify/cmdline.ml | 4 +-
sparsify/utils.ml | 2 +-
sysprep/main.ml | 4 +-
sysprep/sysprep_operation.ml | 4 +-
sysprep/sysprep_operation_script.ml | 2 +-
v2v/DOM.ml | 2 +-
v2v/cmdline.ml | 6 +-
v2v/convert_linux.ml | 16 ++--
v2v/convert_windows.ml | 2 +-
v2v/copy_to_local.ml | 10 +--
v2v/create_libvirt_xml.ml | 42 ++++-----
v2v/create_ovf.ml | 24 ++---
v2v/input_libvirt_vddk.ml | 2 +-
v2v/input_ova.ml | 2 +-
v2v/input_vmx.ml | 6 +-
v2v/linux_bootloaders.ml | 2 +-
v2v/linux_kernels.ml | 6 +-
v2v/modules_list.ml | 6 +-
v2v/output_glance.ml | 20 ++---
v2v/output_libvirt.ml | 2 +-
v2v/output_qemu.ml | 8 +-
v2v/output_rhv.ml | 2 +-
v2v/output_vdsm.ml | 4 +-
v2v/parse_libvirt_xml.ml | 8 +-
v2v/parse_ovf_from_ova.ml | 6 +-
v2v/parse_vmx.ml | 2 +-
v2v/test-harness/v2v_test_harness.ml | 6 +-
v2v/v2v.ml | 6 +-
v2v/vCenter.ml | 6 +-
57 files changed, 347 insertions(+), 343 deletions(-)
diff --git a/builder/builder.ml b/builder/builder.ml
index 3d0dbe7a8..8b4c20765 100644
--- a/builder/builder.ml
+++ b/builder/builder.ml
@@ -462,7 +462,7 @@ let main () in
(* Add a transition to the returned list. *)
- let tr task otags = push_front (task, weight task otags, otags) ret in
+ let tr task otags = List.push_front (task, weight task otags, otags) ret in
(* Since the final plan won't run in parallel, we don't only need
* to choose unique tempfiles per transition, so this is OK:
diff --git a/builder/cmdline.ml b/builder/cmdline.ml
index 8cbd4ca68..2b56bd9e6 100644
--- a/builder/cmdline.ml
+++ b/builder/cmdline.ml
@@ -73,7 +73,7 @@ let parse_cmdline () | "auto" ->
attach_format := None
| s -> attach_format := Some s
in
- let attach_disk s = push_front (!attach_format, s) attach in
+ let attach_disk s = List.push_front (!attach_format, s) attach in
let cache = ref Paths.xdg_cache_home in
let set_cache arg = cache := Some arg in
@@ -85,7 +85,7 @@ let parse_cmdline () let delete_on_failure = ref true in
let fingerprints = ref [] in
- let add_fingerprint arg = push_front arg fingerprints in
+ let add_fingerprint arg = List.push_front arg fingerprints in
let format = ref "" in
let gpg @@ -119,7 +119,7 @@ let parse_cmdline () let set_smp arg = smp :=
Some arg in
let sources = ref [] in
- let add_source arg = push_front arg sources in
+ let add_source arg = List.push_front arg sources in
let sync = ref true in
let warn_if_partition = ref true in
@@ -176,7 +176,7 @@ let parse_cmdline () let argspec = argspec @
customize_argspec in
let args = ref [] in
- let anon_fun s = push_front s args in
+ let anon_fun s = List.push_front s args in
let usage_msg sprintf (f_"\
%s: build virtual machine images quickly
diff --git a/builder/downloader.ml b/builder/downloader.ml
index b1119bae4..424c9cd34 100644
--- a/builder/downloader.ml
+++ b/builder/downloader.ml
@@ -103,8 +103,8 @@ and download_to t ?(progress_bar = false) ~proxy uri
filename (* Get the status code first to ensure the file exists. *)
let curl_h let curl_args = ref common_args in
- if not (verbose ()) then append curl_args quiet_args;
- append curl_args [
+ if not (verbose ()) then List.push_back_list curl_args quiet_args;
+ List.push_back_list curl_args [
"output", Some "/dev/null"; (* Write output to
/dev/null. *)
"head", None; (* Request only HEAD. *)
"write-out", Some "%{http_code}" (* HTTP status
code to stdout. *)
@@ -128,11 +128,11 @@ and download_to t ?(progress_bar = false) ~proxy uri
filename (* Now download the file. *)
let curl_h let curl_args = ref common_args in
- push_back curl_args ("output", Some filename_new);
+ List.push_back curl_args ("output", Some filename_new);
if not (verbose ()) then (
- if progress_bar then push_back curl_args ("progress-bar",
None)
- else append curl_args quiet_args
+ if progress_bar then List.push_back curl_args
("progress-bar", None)
+ else List.push_back_list curl_args quiet_args
);
Curl.create ~curl:t.curl ~tmpdir:t.tmpdir !curl_args in
diff --git a/builder/languages.ml b/builder/languages.ml
index e97b1e3da..18b9e1b41 100644
--- a/builder/languages.ml
+++ b/builder/languages.ml
@@ -30,10 +30,10 @@ let split_locale loc let territory = match_or_empty 3
in
(match territory with
| "" -> ()
- | territory -> push_front (lang ^ "_" ^ territory) l);
- push_front lang l;
+ | territory -> List.push_front (lang ^ "_" ^ territory) l);
+ List.push_front lang l;
);
- push_front "" l;
+ List.push_front "" l;
List.rev !l
let languages () diff --git a/builder/sigchecker.ml b/builder/sigchecker.ml
index d7fba405b..088674d66 100644
--- a/builder/sigchecker.ml
+++ b/builder/sigchecker.ml
@@ -82,7 +82,7 @@ let import_keyfile ~gpg ~gpghome ~tmpdir ?(trust = true)
keyfile (match !current with
| None -> ()
| Some k ->
- if String.is_suffix id k then push_front id subkeys;
+ if String.is_suffix id k then List.push_front id subkeys;
current := None
)
| _ -> ()
diff --git a/builder/simplestreams_parser.ml b/builder/simplestreams_parser.ml
index 75592e377..a37d5a8a3 100644
--- a/builder/simplestreams_parser.ml
+++ b/builder/simplestreams_parser.ml
@@ -60,7 +60,7 @@ let get_index ~downloader ~sigchecker { Sources.uri; proxy }
uri format;
let index = Array.to_list (object_get_object "index" tree) in
- filter_map (
+ List.filter_map (
fun (_, desc) ->
let format = object_get_string "format" desc in
let datatype = object_get_string "datatype" desc in
@@ -81,11 +81,11 @@ let get_index ~downloader ~sigchecker { Sources.uri; proxy }
let products_node = object_get_object "products" tree in
let products = Array.to_list products_node in
- filter_map (
+ List.filter_map (
fun (prod, prod_desc) ->
let arch = object_get_string "arch" prod_desc in
let prods = Array.to_list (object_get_object "versions"
prod_desc) in
- let prods = filter_map (
+ let prods = List.filter_map (
fun (rel, rel_desc) ->
let pubname = objects_get_string "pubname" [rel_desc;
prod_desc] in
let items = object_find_object "items" rel_desc in
diff --git a/builder/yajl.ml b/builder/yajl.ml
index a555baa22..d95f3932a 100644
--- a/builder/yajl.ml
+++ b/builder/yajl.ml
@@ -55,7 +55,7 @@ let object_find_object key yv | _ -> error (f_"the
value for the key ‘%s’ is not an object") key
let object_find_objects fn = function
- | Yajl_object o -> filter_map fn (Array.to_list o)
+ | Yajl_object o -> List.filter_map fn (Array.to_list o)
| _ -> error (f_"the value is not an object")
let object_get_object key yv diff --git a/common/mlstdutils/std_utils.ml
b/common/mlstdutils/std_utils.ml
index 67d449ac2..558b1e3e2 100644
--- a/common/mlstdutils/std_utils.ml
+++ b/common/mlstdutils/std_utils.ml
@@ -273,6 +273,90 @@ end
module List = struct
include List
+
+ (* Drop elements from a list while a predicate is true. *)
+ let rec dropwhile f = function
+ | [] -> []
+ | x :: xs when f x -> dropwhile f xs
+ | xs -> xs
+
+ (* Take elements from a list while a predicate is true. *)
+ let rec takewhile f = function
+ | x :: xs when f x -> x :: takewhile f xs
+ | _ -> []
+
+ let rec filter_map f = function
+ | [] -> []
+ | x :: xs ->
+ match f x with
+ | Some y -> y :: filter_map f xs
+ | None -> filter_map f xs
+
+ let rec find_map f = function
+ | [] -> raise Not_found
+ | x :: xs ->
+ match f x with
+ | Some y -> y
+ | None -> find_map f xs
+
+ let rec combine3 xs ys zs + match xs, ys, zs with
+ | [], [], [] -> []
+ | x::xs, y::ys, z::zs -> (x, y, z) :: combine3 xs ys zs
+ | _ -> invalid_arg "combine3"
+
+ let rec assoc_ ?(cmp = compare) ~default x = function
+ | [] -> default
+ | (y, y') :: _ when cmp x y = 0 -> y'
+ | _ :: ys -> assoc_ ~cmp ~default x ys
+
+ let uniq ?(cmp = Pervasives.compare) xs + let rec loop acc = function
+ | [] -> acc
+ | [x] -> x :: acc
+ | x :: (y :: _ as xs) when cmp x y = 0 ->
+ loop acc xs
+ | x :: (y :: _ as xs) ->
+ loop (x :: acc) xs
+ in
+ List.rev (loop [] xs)
+
+ (* This is present in OCaml 4.04, so we can remove it when
+ * we depend on OCaml >= 4.04.
+ *)
+ let sort_uniq ?(cmp = Pervasives.compare) xs + let xs = List.sort cmp
xs in
+ let xs = uniq ~cmp xs in
+ xs
+
+ let remove_duplicates xs + let h = Hashtbl.create (List.length xs) in
+ let rec loop = function
+ | [] -> []
+ | x :: xs when Hashtbl.mem h x -> xs
+ | x :: xs -> Hashtbl.add h x true; x :: loop xs
+ in
+ loop xs
+
+ let push_back xsp x = xsp := !xsp @ [x]
+ let push_front x xsp = xsp := x :: !xsp
+ let pop_back xsp + let x, xs + match List.rev !xsp with
+ | x :: xs -> x, xs
+ | [] -> failwith "pop" in
+ xsp := List.rev xs;
+ x
+ let pop_front xsp + let x, xs + match !xsp with
+ | x :: xs -> x, xs
+ | [] -> failwith "shift" in
+ xsp := xs;
+ x
+
+ let push_back_list xsp xs = xsp := !xsp @ xs
+ let push_front_list xs xsp = xsp := xs @ !xsp
end
let (//) = Filename.concat
@@ -489,87 +573,6 @@ and _wrap_find_next_break i len str
and output_spaces chan n = for i = 0 to n-1 do output_char chan ' '
done
-(* Drop elements from a list while a predicate is true. *)
-let rec dropwhile f = function
- | [] -> []
- | x :: xs when f x -> dropwhile f xs
- | xs -> xs
-
-(* Take elements from a list while a predicate is true. *)
-let rec takewhile f = function
- | x :: xs when f x -> x :: takewhile f xs
- | _ -> []
-
-let rec filter_map f = function
- | [] -> []
- | x :: xs ->
- match f x with
- | Some y -> y :: filter_map f xs
- | None -> filter_map f xs
-
-let rec find_map f = function
- | [] -> raise Not_found
- | x :: xs ->
- match f x with
- | Some y -> y
- | None -> find_map f xs
-
-let rec combine3 xs ys zs - match xs, ys, zs with
- | [], [], [] -> []
- | x::xs, y::ys, z::zs -> (x, y, z) :: combine3 xs ys zs
- | _ -> invalid_arg "combine3"
-
-let rec assoc ?(cmp = compare) ~default x = function
- | [] -> default
- | (y, y') :: _ when cmp x y = 0 -> y'
- | _ :: ys -> assoc ~cmp ~default x ys
-
-let uniq ?(cmp = Pervasives.compare) xs - let rec loop acc = function
- | [] -> acc
- | [x] -> x :: acc
- | x :: (y :: _ as xs) when cmp x y = 0 ->
- loop acc xs
- | x :: (y :: _ as xs) ->
- loop (x :: acc) xs
- in
- List.rev (loop [] xs)
-
-let sort_uniq ?(cmp = Pervasives.compare) xs - let xs = List.sort cmp xs in
- let xs = uniq ~cmp xs in
- xs
-
-let remove_duplicates xs - let h = Hashtbl.create (List.length xs) in
- let rec loop = function
- | [] -> []
- | x :: xs when Hashtbl.mem h x -> xs
- | x :: xs -> Hashtbl.add h x true; x :: loop xs
- in
- loop xs
-
-let push_back xsp x = xsp := !xsp @ [x]
-let push_front x xsp = xsp := x :: !xsp
-let pop_back xsp - let x, xs - match List.rev !xsp with
- | x :: xs -> x, xs
- | [] -> failwith "pop" in
- xsp := List.rev xs;
- x
-let pop_front xsp - let x, xs - match !xsp with
- | x :: xs -> x, xs
- | [] -> failwith "shift" in
- xsp := xs;
- x
-
-let append xsp xs = xsp := !xsp @ xs
-let prepend xs xsp = xsp := xs @ !xsp
-
let unique = let i = ref 0 in fun () -> incr i; !i
let may f = function
@@ -593,7 +596,7 @@ let which executable let paths try String.nsplit
":" (Sys.getenv "PATH")
with Not_found -> [] in
- let paths = filter_map (
+ let paths = List.filter_map (
fun p ->
let path = p // executable in
try Unix.access path [Unix.X_OK]; Some path
diff --git a/common/mlstdutils/std_utils.mli b/common/mlstdutils/std_utils.mli
index f3f9c01cb..3895a41cc 100644
--- a/common/mlstdutils/std_utils.mli
+++ b/common/mlstdutils/std_utils.mli
@@ -178,6 +178,81 @@ module List : sig
val stable_sort : ('a -> 'a -> int) -> 'a list ->
'a list
val fast_sort : ('a -> 'a -> int) -> 'a list ->
'a list
val merge : ('a -> 'a -> int) -> 'a list -> 'a
list -> 'a list
+
+ val dropwhile : ('a -> bool) -> 'a list -> 'a list
+ (** [dropwhile f xs] drops leading elements from [xs] until
+ [f] returns false. *)
+ val takewhile : ('a -> bool) -> 'a list -> 'a list
+ (** [takewhile f xs] takes leading elements from [xs] until
+ [f] returns false.
+
+ For any list [xs] and function [f],
+ [xs = takewhile f xs @ dropwhile f xs] *)
+ val filter_map : ('a -> 'b option) -> 'a list ->
'b list
+ (** [filter_map f xs] applies [f] to each element of [xs]. If
+ [f x] returns [Some y] then [y] is added to the returned list. *)
+ val find_map : ('a -> 'b option) -> 'a list -> 'b
+ (** [find_map f xs] applies [f] to each element of [xs] until
+ [f x] returns [Some y]. It returns [y]. If we exhaust the
+ list then this raises [Not_found]. *)
+
+ val combine3 : 'a list -> 'b list -> 'c list ->
('a * 'b * 'c) list
+ (** Like {!List.combine} but for triples.
+ All lists must be the same length. *)
+
+ val assoc_ : ?cmp:('a -> 'a -> int) -> default:'b
-> 'a -> ('a * 'b) list -> 'b
+ (** Like {!assoc} but with a user-defined comparison function, and
+ instead of raising [Not_found], it returns the [~default] value. *)
+
+ val uniq : ?cmp:('a -> 'a -> int) -> 'a list ->
'a list
+ (** Uniquify a list (the list must be sorted first). *)
+
+ val sort_uniq : ?cmp:('a -> 'a -> int) -> 'a list
-> 'a list
+ (** Sort and uniquify a list. *)
+
+ val remove_duplicates : 'a list -> 'a list
+ (** Remove duplicates from an unsorted list; useful when the order
+ of the elements matter.
+
+ Please use [sort_uniq] when the order does not matter. *)
+
+ val push_back : 'a list ref -> 'a -> unit
+ val push_front : 'a -> 'a list ref -> unit
+ val pop_back : 'a list ref -> 'a
+ val pop_front : 'a list ref -> 'a
+ (** Imperative list manipulation functions, similar to C++ STL
+ functions with the same names. (Although the names are similar,
+ the computational complexity of the functions is quite different.)
+
+ These operate on list references, and each function modifies the
+ list reference that is passed to it.
+
+ [push_back xsp x] appends the element [x] to the end of the list
+ [xsp]. This function is not tail-recursive.
+
+ [push_front x xsp] prepends the element [x] to the head of the
+ list [xsp]. (The arguments are reversed compared to the same Perl
+ function, but OCaml is type safe so that's OK.)
+
+ [pop_back xsp] removes the last element of the list [xsp] and
+ returns it. The list is modified to become the list minus the
+ final element. If a zero-length list is passed in, this raises
+ [Failure "pop_back"]. This function is not tail-recursive.
+
+ [pop_front xsp] removes the head element of the list [xsp] and
+ returns it. The list is modified to become the tail of the list.
+ If a zero-length list is passed in, this raises [Failure
+ "pop_front"]. *)
+
+ val push_back_list : 'a list ref -> 'a list -> unit
+ val push_front_list : 'a list -> 'a list ref -> unit
+ (** More imperative list manipulation functions.
+
+ [push_back_list] is like {!push_back} above, except it appends
+ a list to the list reference. This function is not tail-recursive.
+
+ [push_front_list] is like {!push_front} above, except it prepends
+ a list to the list reference. *)
end
(** Override the List module from stdlib. *)
@@ -242,80 +317,6 @@ val wrap : ?chan:out_channel -> ?indent:int -> string
-> unit
val output_spaces : out_channel -> int -> unit
(** Write [n] spaces to [out_channel]. *)
-val dropwhile : ('a -> bool) -> 'a list -> 'a list
-(** [dropwhile f xs] drops leading elements from [xs] until
- [f] returns false. *)
-val takewhile : ('a -> bool) -> 'a list -> 'a list
-(** [takewhile f xs] takes leading elements from [xs] until
- [f] returns false.
-
- For any list [xs] and function [f],
- [xs = takewhile f xs @ dropwhile f xs] *)
-val filter_map : ('a -> 'b option) -> 'a list -> 'b
list
-(** [filter_map f xs] applies [f] to each element of [xs]. If
- [f x] returns [Some y] then [y] is added to the returned list. *)
-val find_map : ('a -> 'b option) -> 'a list -> 'b
-(** [find_map f xs] applies [f] to each element of [xs] until
- [f x] returns [Some y]. It returns [y]. If we exhaust the
- list then this raises [Not_found]. *)
-
-val combine3 : 'a list -> 'b list -> 'c list -> ('a *
'b * 'c) list
-(** Like {!List.combine} but for triples. All lists must be the same length.
*)
-
-val assoc : ?cmp:('a -> 'a -> int) -> default:'b ->
'a -> ('a * 'b) list -> 'b
-(** Like {!List.assoc} but with a user-defined comparison function, and
- instead of raising [Not_found], it returns the [~default] value. *)
-
-val uniq : ?cmp:('a -> 'a -> int) -> 'a list -> 'a
list
-(** Uniquify a list (the list must be sorted first). *)
-
-val sort_uniq : ?cmp:('a -> 'a -> int) -> 'a list ->
'a list
-(** Sort and uniquify a list. *)
-
-val remove_duplicates : 'a list -> 'a list
-(** Remove duplicates from an unsorted list; useful when the order
- of the elements matter.
-
- Please use [sort_uniq] when the order does not matter. *)
-
-val push_back : 'a list ref -> 'a -> unit
-val push_front : 'a -> 'a list ref -> unit
-val pop_back : 'a list ref -> 'a
-val pop_front : 'a list ref -> 'a
-(** Imperative list manipulation functions, similar to C++ STL
- functions with the same names. (Although the names are similar,
- the computational complexity of the functions is quite different.)
-
- These operate on list references, and each function modifies the
- list reference that is passed to it.
-
- [push_back xsp x] appends the element [x] to the end of the list
- [xsp]. This function is not tail-recursive.
-
- [push_front x xsp] prepends the element [x] to the head of the
- list [xsp]. (The arguments are reversed compared to the same Perl
- function, but OCaml is type safe so that's OK.)
-
- [pop_back xsp] removes the last element of the list [xsp] and
- returns it. The list is modified to become the list minus the
- final element. If a zero-length list is passed in, this raises
- [Failure "pop_back"]. This function is not tail-recursive.
-
- [pop_front xsp] removes the head element of the list [xsp] and
- returns it. The list is modified to become the tail of the list.
- If a zero-length list is passed in, this raises [Failure
- "pop_front"]. *)
-
-val append : 'a list ref -> 'a list -> unit
-val prepend : 'a list -> 'a list ref -> unit
-(** More imperative list manipulation functions.
-
- [append] is like {!push_back} above, except it appends a list to
- the list reference. This function is not tail-recursive.
-
- [prepend] is like {!push_front} above, except it prepends a list
- to the list reference. *)
-
val unique : unit -> int
(** Returns a unique number each time called. *)
diff --git a/common/mltools/getopt_tests.ml b/common/mltools/getopt_tests.ml
index 1314d3bca..751bf1d5f 100644
--- a/common/mltools/getopt_tests.ml
+++ b/common/mltools/getopt_tests.ml
@@ -27,13 +27,13 @@ open Tools_utils
open Getopt.OptionName
let adds = ref []
-let add_string = push_back adds
+let add_string = List.push_back adds
let anons = ref []
-let anon_fun = push_back anons
+let anon_fun = List.push_back anons
let ints = ref []
-let add_int = push_back ints
+let add_int = List.push_back ints
let clear_flag = ref true
let set_flag = ref false
diff --git a/common/mltools/tools_utils.ml b/common/mltools/tools_utils.ml
index 9049ab3f1..f66ee9f50 100644
--- a/common/mltools/tools_utils.ml
+++ b/common/mltools/tools_utils.ml
@@ -286,7 +286,7 @@ let rec run_commands ?(echo_cmd = true) cmds
res.(i) <- code;
None
) cmds in
- let pids = filter_map identity pids in
+ let pids = List.filter_map identity pids in
let pids = ref pids in
while !pids <> [] do
let pid, stat = Unix.waitpid [] 0 in
diff --git a/customize/customize_main.ml b/customize/customize_main.ml
index 8bd197b83..f6ffc872d 100644
--- a/customize/customize_main.ml
+++ b/customize/customize_main.ml
@@ -39,7 +39,7 @@ let main () | "auto" -> attach_format :=
None
| s -> attach_format := Some s
in
- let attach_disk s = push_front (!attach_format, s) attach in
+ let attach_disk s = List.push_front (!attach_format, s) attach in
let domain = ref None in
let dryrun = ref false in
let files = ref [] in
@@ -63,7 +63,7 @@ let main () error (f_"error parsing URI
'%s'. Look for error messages printed above.")
arg in
let format = match !format with "auto" -> None | fmt ->
Some fmt in
- push_front (uri, format) files;
+ List.push_front (uri, format) files;
format_consumed := true
and set_domain dom if !domain <> None then
diff --git a/customize/customize_run.ml b/customize/customize_run.ml
index b42dd774d..f37e283f3 100644
--- a/customize/customize_run.ml
+++ b/customize/customize_run.ml
@@ -66,7 +66,7 @@ let run (g : G.guestfs) root (ops : ops) * Also catch
errors and dump the log file completely on error.
*)
let env_vars - filter_map (
+ List.filter_map (
fun name ->
try Some (sprintf "export %s=%s" name (quote (Sys.getenv
name)))
with Not_found -> None
diff --git a/daemon/inspect.ml b/daemon/inspect.ml
index ecc45e7c7..11e977947 100644
--- a/daemon/inspect.ml
+++ b/daemon/inspect.ml
@@ -33,7 +33,7 @@ let rec inspect_os () let fses = Listfs.list_filesystems ()
in
let fses - filter_map (
+ List.filter_map (
fun (mountable, vfs_type) ->
Inspect_fs.check_for_filesystem_on mountable vfs_type
) fses in
@@ -228,7 +228,7 @@ and inspect_get_roots () let fses =
!Inspect_types.inspect_fses in
let roots - filter_map (
+ List.filter_map (
fun fs -> try Some (root_of_fs fs) with Invalid_argument _ -> None
) fses in
if verbose () then (
@@ -257,7 +257,7 @@ and inspect_get_mountpoints root_mountable if fstab = []
then
[ "/", root_mountable ]
else (
- filter_map (
+ List.filter_map (
fun (mountable, mp) ->
if String.length mp > 0 && mp.[0] = '/' then
Some (mp, mountable)
diff --git a/daemon/inspect_fs_unix_fstab.ml b/daemon/inspect_fs_unix_fstab.ml
index e3c7fd1cd..658e0cf10 100644
--- a/daemon/inspect_fs_unix_fstab.ml
+++ b/daemon/inspect_fs_unix_fstab.ml
@@ -52,7 +52,7 @@ and check_fstab_aug mdadm_conf root_mountable os_type aug
let path = "/files/etc/fstab/*[label() != '#comment']" in
let entries = aug_matches_noerrors aug path in
- filter_map (check_fstab_entry md_map root_mountable os_type aug) entries
+ List.filter_map (check_fstab_entry md_map root_mountable os_type aug) entries
and check_fstab_entry md_map root_mountable os_type aug entry if verbose ()
then
diff --git a/daemon/inspect_fs_windows.ml b/daemon/inspect_fs_windows.ml
index 78af7f048..f471835cc 100644
--- a/daemon/inspect_fs_windows.ml
+++ b/daemon/inspect_fs_windows.ml
@@ -110,7 +110,7 @@ and get_windows_systemroot_from_boot_ini boot_ini_path
| Some oses ->
(* Rewrite multi|scsi lines, removing any which we cannot parse. *)
let oses - filter_map (
+ List.filter_map (
fun line ->
if PCRE.matches re_boot_ini_os line then (
let ctrlr_type = PCRE.sub 1
@@ -312,7 +312,7 @@ and get_drive_mappings h root data let values =
Hivex.node_values h node in
let values = Array.to_list values in
let values - filter_map (
+ List.filter_map (
fun value ->
let key = Hivex.value_key h value in
let keylen = String.length key in
diff --git a/daemon/listfs.ml b/daemon/listfs.ml
index 610a1ea78..1ccd3bead 100644
--- a/daemon/listfs.ml
+++ b/daemon/listfs.ml
@@ -44,14 +44,14 @@ let rec list_filesystems () ) devices in
(* Use vfs-type to check for filesystems on devices. *)
- let ret = filter_map check_with_vfs_type devices in
+ let ret = List.filter_map check_with_vfs_type devices in
(* Use vfs-type to check for filesystems on partitions, but
* ignore MBR partition type 42 used by LDM.
*)
let ret ret @
- filter_map (
+ List.filter_map (
fun part ->
if not has_ldm || not (is_mbr_partition_type_42 part) then
check_with_vfs_type part
@@ -60,14 +60,14 @@ let rec list_filesystems () ) partitions in
(* Use vfs-type to check for filesystems on md devices. *)
- let ret = ret @ filter_map check_with_vfs_type mds in
+ let ret = ret @ List.filter_map check_with_vfs_type mds in
(* LVM. *)
let ret if has_lvm2 then (
let lvs = Lvm.lvs () in
(* Use vfs-type to check for filesystems on LVs. *)
- ret @ filter_map check_with_vfs_type lvs
+ ret @ List.filter_map check_with_vfs_type lvs
)
else ret in
@@ -78,8 +78,8 @@ let rec list_filesystems () let ldmparts =
Ldm.list_ldm_partitions () in
(* Use vfs-type to check for filesystems on Windows dynamic disks. *)
ret @
- filter_map check_with_vfs_type ldmvols @
- filter_map check_with_vfs_type ldmparts
+ List.filter_map check_with_vfs_type ldmvols @
+ List.filter_map check_with_vfs_type ldmparts
)
else ret in
diff --git a/daemon/lvm.ml b/daemon/lvm.ml
index 4210c2fb3..39c6d365b 100644
--- a/daemon/lvm.ml
+++ b/daemon/lvm.ml
@@ -84,7 +84,7 @@ and filter_convert_old_lvs_output out let lines =
List.filter ((<>) "") lines in
let lines = List.filter ((<>) "unknown device") lines in
- let lines = filter_map (
+ let lines = List.filter_map (
fun line ->
match String.nsplit ":" line with
| [ lv_attr; vg_name; lv_name ] ->
diff --git a/daemon/mount.ml b/daemon/mount.ml
index fbf4ddc39..db530b138 100644
--- a/daemon/mount.ml
+++ b/daemon/mount.ml
@@ -34,26 +34,26 @@ let mount_vfs options vfs mountable mountpoint (match
options, mountable.m_type with
| (None | Some ""), (MountableDevice | MountablePath) -> ()
| Some options, (MountableDevice | MountablePath) ->
- push_back args "-o";
- push_back args options
+ List.push_back args "-o";
+ List.push_back args options
| (None | Some ""), MountableBtrfsVol subvol ->
- push_back args "-o";
- push_back args ("subvol=" ^ subvol)
+ List.push_back args "-o";
+ List.push_back args ("subvol=" ^ subvol)
| Some options, MountableBtrfsVol subvol ->
- push_back args "-o";
- push_back args ("subvol=" ^ subvol ^ "," ^ options)
+ List.push_back args "-o";
+ List.push_back args ("subvol=" ^ subvol ^ "," ^
options)
);
(* -t vfs *)
(match vfs with
| None | Some "" -> ()
| Some t ->
- push_back args "-t";
- push_back args t
+ List.push_back args "-t";
+ List.push_back args t
);
- push_back args mountable.m_device;
- push_back args mp;
+ List.push_back args mountable.m_device;
+ List.push_back args mp;
ignore (command "mount" !args)
@@ -105,7 +105,7 @@ let rec umount_all () (String.is_prefix mp
sysroot &&
String.length mp > sysroot_len &&
mp.[sysroot_len] = '/') then
- push_front mp mps
+ List.push_front mp mps
)
) info;
diff --git a/daemon/parted.ml b/daemon/parted.ml
index 2e8e744d0..7721b64ca 100644
--- a/daemon/parted.ml
+++ b/daemon/parted.ml
@@ -65,13 +65,13 @@ let print_partition_table_machine_readable device
udev_settle ();
let args = ref [] in
- push_back args "-m";
- push_back args "-s";
- push_back args "--";
- push_back args device;
- push_back args "unit";
- push_back args "b";
- push_back args "print";
+ List.push_back args "-m";
+ List.push_back args "-s";
+ List.push_back args "--";
+ List.push_back args device;
+ List.push_back args "unit";
+ List.push_back args "b";
+ List.push_back args "print";
let out try command "parted" !args
diff --git a/dib/cmdline.ml b/dib/cmdline.ml
index 9f0a70a72..d013a181e 100644
--- a/dib/cmdline.ml
+++ b/dib/cmdline.ml
@@ -71,16 +71,16 @@ read the man page virt-dib(1).
prog in
let elements = ref [] in
- let append_element element = push_front element elements in
+ let append_element element = List.push_front element elements in
let excluded_elements = ref [] in
- let append_excluded_element element = push_front element excluded_elements in
+ let append_excluded_element element = List.push_front element
excluded_elements in
let element_paths = ref [] in
- let append_element_path arg = push_front arg element_paths in
+ let append_element_path arg = List.push_front arg element_paths in
let excluded_scripts = ref [] in
- let append_excluded_script arg = push_front arg excluded_scripts in
+ let append_excluded_script arg = List.push_front arg excluded_scripts in
let debug = ref 0 in
let set_debug arg @@ -107,7 +107,7 @@ read the man page virt-dib(1).
let formats = ref None in
let set_format arg - let fmts = remove_duplicates (String.nsplit
"," arg) in
+ let fmts = List.remove_duplicates (String.nsplit "," arg) in
let fmtset List.fold_left (
fun fmtset fmt ->
@@ -118,7 +118,7 @@ read the man page virt-dib(1).
formats := Some fmtset in
let envvars = ref [] in
- let append_envvar arg = push_front arg envvars in
+ let append_envvar arg = List.push_front arg envvars in
let use_base = ref true in
@@ -149,7 +149,7 @@ read the man page virt-dib(1).
let extra_packages = ref [] in
let append_extra_packages arg - prepend (List.rev (String.nsplit
"," arg)) extra_packages in
+ List.push_front_list (List.rev (String.nsplit "," arg))
extra_packages in
let checksum = ref false in
diff --git a/dib/dib.ml b/dib/dib.ml
index 9429d2371..f8595636a 100644
--- a/dib/dib.ml
+++ b/dib/dib.ml
@@ -41,7 +41,7 @@ let exclude_elements elements = function
| excl -> StringSet.filter (not_in_list excl) elements
let read_envvars envvars - filter_map (
+ List.filter_map (
fun var ->
let i = String.find var "=" in
if i = -1 then (
diff --git a/dib/elements.ml b/dib/elements.ml
index d8eb6c145..5a904baef 100644
--- a/dib/elements.ml
+++ b/dib/elements.ml
@@ -82,7 +82,7 @@ let load_scripts (g : Guestfs.guestfs) path | _ ->
false
) listing in
let scripts = List.filter (fun x -> valid_script_name x.Guestfs.name)
scripts in
- filter_map (
+ List.filter_map (
fun x ->
let { Guestfs.st_mode = mode } = g#statns (path ^ "/" ^
x.Guestfs.name) in
if mode &^ 0o111_L > 0_L then Some x.Guestfs.name
diff --git a/dib/output_format.ml b/dib/output_format.ml
index 79a90ae35..a39e807fe 100644
--- a/dib/output_format.ml
+++ b/dib/output_format.ml
@@ -69,7 +69,7 @@ let set_cardinal set FormatSet.cardinal set
let register_format op - push_front op all_formats
+ List.push_front op all_formats
let baked = ref false
let rec bake () @@ -183,7 +183,7 @@ let get_filenames ~formats image_name (*
Run the formats in alphabetical, rather than random order. *)
let formats = List.sort compare_formats (FormatSet.elements formats) in
- filter_map (
+ List.filter_map (
function
| { output_to_file = true; name } ->
Some (output_filename image_name name)
diff --git a/generator/UEFI.ml b/generator/UEFI.ml
index 17418f473..5161e28ee 100644
--- a/generator/UEFI.ml
+++ b/generator/UEFI.ml
@@ -77,7 +77,7 @@ let firmware = [
[];
]
-let arches = sort_uniq (List.map (fun (arch, _, _, _, _) -> arch) firmware)
+let arches = List.sort_uniq (List.map (fun (arch, _, _, _, _) -> arch)
firmware)
let generate_uefi_c () generate_header CStyle LGPLv2plus;
diff --git a/generator/customize.ml b/generator/customize.ml
index 75984c9d5..c278347c1 100644
--- a/generator/customize.ml
+++ b/generator/customize.ml
@@ -688,7 +688,7 @@ let rec argspec () op_shortdesc = shortdesc;
op_pod_longdesc = longdesc } ->
pr " (\n";
pr " [ L\"%s\" ],\n" name;
- pr " Getopt.Unit (fun () -> push_front %s ops),\n"
discrim;
+ pr " Getopt.Unit (fun () -> List.push_front %s ops),\n"
discrim;
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
pr " None, %S;\n" longdesc
@@ -696,7 +696,7 @@ let rec argspec () op_shortdesc = shortdesc;
op_pod_longdesc = longdesc } ->
pr " (\n";
pr " [ L\"%s\" ],\n" name;
- pr " Getopt.String (s_\"%s\", fun s -> push_front
(%s s) ops),\n" v discrim;
+ pr " Getopt.String (s_\"%s\", fun s ->
List.push_front (%s s) ops),\n" v discrim;
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
pr " Some %S, %S;\n" v longdesc
@@ -708,7 +708,7 @@ let rec argspec () pr "
s_\"%s\",\n" v;
pr " fun s ->\n";
pr " let p = split_string_pair \"%s\" s
in\n" name;
- pr " push_front (%s p) ops\n" discrim;
+ pr " List.push_front (%s p) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
@@ -721,7 +721,7 @@ let rec argspec () pr "
s_\"%s\",\n" v;
pr " fun s ->\n";
pr " let ss = split_string_list s in\n";
- pr " push_front (%s ss) ops\n" discrim;
+ pr " List.push_front (%s ss) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
@@ -734,7 +734,7 @@ let rec argspec () pr "
s_\"%s\",\n" v;
pr " fun s ->\n";
pr " let ss = split_links_list \"%s\" s
in\n" name;
- pr " push_front (%s ss) ops\n" discrim;
+ pr " List.push_front (%s ss) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
@@ -747,7 +747,7 @@ let rec argspec () pr "
s_\"%s\",\n" v;
pr " fun s ->\n";
pr " let sel = Password.parse_selector s in\n";
- pr " push_front (%s sel) ops\n" discrim;
+ pr " List.push_front (%s sel) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
@@ -761,7 +761,7 @@ let rec argspec () pr " fun s
->\n";
pr " let user, sel = split_string_pair \"%s\" s
in\n" name;
pr " let sel = Password.parse_selector sel in\n";
- pr " push_front (%s (user, sel)) ops\n" discrim;
+ pr " List.push_front (%s (user, sel)) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
@@ -775,7 +775,7 @@ let rec argspec () pr " fun s
->\n";
pr " let user, selstr = String.split \":\" s
in\n";
pr " let sel = Ssh_key.parse_selector selstr in\n";
- pr " push_front (%s (user, sel)) ops\n" discrim;
+ pr " List.push_front (%s (user, sel)) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
@@ -788,7 +788,7 @@ let rec argspec () pr "
s_\"%s\",\n" v;
pr " fun s ->\n";
pr " %s s;\n" fn;
- pr " push_front (%s s) ops\n" discrim;
+ pr " List.push_front (%s s) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
@@ -801,7 +801,7 @@ let rec argspec () pr "
s_\"%s\",\n" v;
pr " fun s ->\n";
pr " let sel = Subscription_manager.parse_pool_selector s
in\n";
- pr " push_front (%s sel) ops\n" discrim;
+ pr " List.push_front (%s sel) ops\n" discrim;
pr " ),\n";
pr " s_\"%s\"\n" shortdesc;
pr " ),\n";
diff --git a/generator/tests_c_api.ml b/generator/tests_c_api.ml
index 33da61181..b569b9317 100644
--- a/generator/tests_c_api.ml
+++ b/generator/tests_c_api.ml
@@ -70,7 +70,7 @@ let rec generate_c_api_tests () let hash : (string, bool)
Hashtbl.t = Hashtbl.create 13 in
List.iter (
fun { tests } ->
- let seqs = filter_map (
+ let seqs = List.filter_map (
function
| (_, (Always|IfAvailable _|IfNotCrossAppliance), test, cleanup) ->
Some (seq_of_test test @ cleanup)
diff --git a/resize/resize.ml b/resize/resize.ml
index f428f3ebe..4eeb0a170 100644
--- a/resize/resize.ml
+++ b/resize/resize.ml
@@ -158,7 +158,7 @@ let main () lv_expands, machine_readable,
ntfsresize_force, output_format,
resizes, resizes_force, shrink, sparse, unknown_fs_mode
- let add xs s = push_front s xs in
+ let add xs s = List.push_front s xs in
let align_first = ref "auto" in
let alignment = ref 128 in
@@ -214,7 +214,7 @@ let main ()
s_"Behaviour on expand unknown filesystems (default: warn)";
] in
let disks = ref [] in
- let anon_fun s = push_front s disks in
+ let anon_fun s = List.push_front s disks in
let usage_msg sprintf (f_"\
%s: resize a virtual machine disk
diff --git a/sparsify/cmdline.ml b/sparsify/cmdline.ml
index 521f6733d..f435bbf5e 100644
--- a/sparsify/cmdline.ml
+++ b/sparsify/cmdline.ml
@@ -43,7 +43,7 @@ and mode_t and check_t = [`Ignore|`Continue|`Warn|`Fail]
let parse_cmdline () - let add xs s = push_front s xs in
+ let add xs s = List.push_front s xs in
let check_tmpdir = ref `Warn in
let set_check_tmpdir = function
@@ -78,7 +78,7 @@ let parse_cmdline () [ L"zero" ],
Getopt.String (s_"fs", add zeroes), s_"Zero filesystem";
] in
let disks = ref [] in
- let anon_fun s = push_front s disks in
+ let anon_fun s = List.push_front s disks in
let usage_msg sprintf (f_"\
%s: sparsify a virtual machine disk
diff --git a/sparsify/utils.ml b/sparsify/utils.ml
index facf466a8..7f0c02cf6 100644
--- a/sparsify/utils.ml
+++ b/sparsify/utils.ml
@@ -27,7 +27,7 @@ module G = Guestfs
(* Return true if the filesystem is a read-only LV (RHBZ#1185561). *)
let is_read_only_lv (g : G.guestfs) let lvs = Array.to_list (g#lvs_full ())
in
- let ro_uuids = filter_map (
+ let ro_uuids = List.filter_map (
fun { G.lv_uuid; lv_attr } ->
if lv_attr.[1] = 'r' then Some lv_uuid else None
) lvs in
diff --git a/sysprep/main.ml b/sysprep/main.ml
index 3ba0c7b82..218ac43ef 100644
--- a/sysprep/main.ml
+++ b/sysprep/main.ml
@@ -58,7 +58,7 @@ let main () with URI.Parse_failed ->
error (f_"error parsing URI ‘%s’. Look for error messages
printed above.") arg in
let format = match !format with "auto" -> None | fmt ->
Some fmt in
- push_front (uri, format) files;
+ List.push_front (uri, format) files;
format_consumed := true
and set_domain dom if !domain <> None then
@@ -203,7 +203,7 @@ read the man page virt-sysprep(1).
let mount_opts = !mount_opts in
let mount_opts List.map (String.split ":") (String.nsplit
";" mount_opts) in
- let mount_opts mp = assoc ~default:"" mp mount_opts in
+ let mount_opts mp = List.assoc_ ~default:"" mp mount_opts in
message (f_"Examining the guest ...");
diff --git a/sysprep/sysprep_operation.ml b/sysprep/sysprep_operation.ml
index 0c70258db..2ddce302a 100644
--- a/sysprep/sysprep_operation.ml
+++ b/sysprep/sysprep_operation.ml
@@ -110,9 +110,9 @@ let remove_all_from_set set empty_set
let register_operation op - push_front op all_operations;
+ List.push_front op all_operations;
if op.enabled_by_default then
- push_front op enabled_by_default_operations
+ List.push_front op enabled_by_default_operations
let baked = ref false
let rec bake () diff --git a/sysprep/sysprep_operation_script.ml
b/sysprep/sysprep_operation_script.ml
index fd9e62aa0..bb105f57f 100644
--- a/sysprep/sysprep_operation_script.ml
+++ b/sysprep/sysprep_operation_script.ml
@@ -36,7 +36,7 @@ let set_scriptdir dir scriptdir := Some dir
let scripts = ref []
-let add_script script = push_front script scripts
+let add_script script = List.push_front script scripts
let rec script_perform (g : Guestfs.guestfs) root side_effects let scripts =
List.rev !scripts in
diff --git a/v2v/DOM.ml b/v2v/DOM.ml
index 3ba93b4f6..8fd40e6b4 100644
--- a/v2v/DOM.ml
+++ b/v2v/DOM.ml
@@ -123,7 +123,7 @@ let path_to_nodes (Doc doc) path ) nodes
| p :: ps ->
let children - filter_map (
+ List.filter_map (
function
| PCData _ -> None
| Comment _ -> None
diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
index 6d4219bd8..2180b656f 100644
--- a/v2v/cmdline.ml
+++ b/v2v/cmdline.ml
@@ -165,10 +165,10 @@ let parse_cmdline () in
let vdsm_image_uuids = ref [] in
- let add_vdsm_image_uuid s = push_front s vdsm_image_uuids in
+ let add_vdsm_image_uuid s = List.push_front s vdsm_image_uuids in
let vdsm_vol_uuids = ref [] in
- let add_vdsm_vol_uuid s = push_front s vdsm_vol_uuids in
+ let add_vdsm_vol_uuid s = List.push_front s vdsm_vol_uuids in
let vmtype_warning _ warning (f_"the --vmtype option has been
removed and now does nothing")
@@ -241,7 +241,7 @@ let parse_cmdline ()
s_"Ignored for backwards compatibility";
] in
let args = ref [] in
- let anon_fun s = push_front s args in
+ let anon_fun s = List.push_front s args in
let usage_msg sprintf (f_"\
%s: convert a guest to use KVM
diff --git a/v2v/convert_linux.ml b/v2v/convert_linux.ml
index 81e195866..ea44b262c 100644
--- a/v2v/convert_linux.ml
+++ b/v2v/convert_linux.ml
@@ -139,7 +139,7 @@ let convert (g : G.guestfs) inspect source output rcaps
and unconfigure_xen () (* Remove kmod-xenpv-* (RHEL 3). *)
let xenmods - filter_map (
+ List.filter_map (
fun { G.app2_name = name } ->
if name = "kmod-xenpv" || String.is_prefix name
"kmod-xenpv-" then
Some name
@@ -235,7 +235,7 @@ let convert (g : G.guestfs) inspect source output rcaps
let lines = g#read_lines vboxconfig in
let lines = Array.to_list lines in
let rex = PCRE.compile "^INSTALL_DIR=(.*)$" in
- let lines = filter_map (
+ let lines = List.filter_map (
fun line ->
if PCRE.matches rex line then (
let path = PCRE.sub 1 in
@@ -279,13 +279,13 @@ let convert (g : G.guestfs) inspect source output rcaps
List.iter (
fun { G.app2_name = name } ->
if String.is_prefix name "vmware-tools-libraries-" then
- push_front name libraries
+ List.push_front name libraries
else if String.is_prefix name "vmware-tools-" then
- push_front name remove
+ List.push_front name remove
else if name = "VMwareTools" then
- push_front name remove
+ List.push_front name remove
else if String.is_prefix name "kmod-vmware-tools" then
- push_front name remove
+ List.push_front name remove
) inspect.i_apps;
let libraries = !libraries in
@@ -333,13 +333,13 @@ let convert (g : G.guestfs) inspect source output rcaps
let cmd = Array.of_list cmd in
(try
ignore (g#command cmd);
- push_front library remove
+ List.push_front library remove
with G.Error msg ->
eprintf "%s: could not install replacement for %s. Error
was: %s. %s was not removed.\n"
prog library msg library
);
) else (
- push_front library remove;
+ List.push_front library remove;
);
) libraries
)
diff --git a/v2v/convert_windows.ml b/v2v/convert_windows.ml
index 247ffff3f..41e734b67 100644
--- a/v2v/convert_windows.ml
+++ b/v2v/convert_windows.ml
@@ -166,7 +166,7 @@ let convert (g : G.guestfs) inspect source output rcaps
* uninstaller still shows a no-way-out reboot dialog *)
" PREVENT_REBOOT=Yes LAUNCHED_BY_SETUP_EXE=Yes"
in
- push_front uninst uninsts
+ List.push_front uninst uninsts
with
Not_found -> ()
) uninstnodes
diff --git a/v2v/copy_to_local.ml b/v2v/copy_to_local.ml
index d92ad0f88..d2471a546 100644
--- a/v2v/copy_to_local.ml
+++ b/v2v/copy_to_local.ml
@@ -50,7 +50,7 @@ let rec main ()
s_"Use password from file";
] in
let args = ref [] in
- let anon_fun s = push_front s args in
+ let anon_fun s = List.push_front s args in
let usage_msg sprintf (f_"\
%s: copy a remote guest to the local machine
@@ -205,12 +205,12 @@ read the man page virt-v2v-copy-to-local(1).
"url", Some remote_disk;
"output", Some local_disk;
] in
- if not sslverify then push_back curl_args ("insecure", None);
+ if not sslverify then List.push_back curl_args ("insecure",
None);
(match cookie with
| None -> ()
- | Some cookie -> push_back curl_args ("cookie", Some
cookie)
+ | Some cookie -> List.push_back curl_args ("cookie", Some
cookie)
);
- if quiet () then push_back curl_args ("silent", None);
+ if quiet () then List.push_back curl_args ("silent", None);
let curl_h = Curl.create !curl_args in
if verbose () then
@@ -261,7 +261,7 @@ and parse_libvirt_xml guest_name xml incr i;
let local_disk = sprintf "%s-disk%d" guest_name !i in
- push_front (remote_disk, local_disk) disks;
+ List.push_front (remote_disk, local_disk) disks;
local_disk
in
get_disks, add_disk
diff --git a/v2v/create_libvirt_xml.ml b/v2v/create_libvirt_xml.ml
index 70c04cc64..ecf0d14c5 100644
--- a/v2v/create_libvirt_xml.ml
+++ b/v2v/create_libvirt_xml.ml
@@ -35,13 +35,13 @@ let create_libvirt_xml ?pool source target_buses guestcaps
(* The main body of the libvirt XML document. *)
let body = ref [] in
- append body [
+ List.push_back_list body [
Comment generated_by;
e "name" [] [PCData source.s_name];
];
let memory_k = source.s_memory /^ 1024L in
- append body [
+ List.push_back_list body [
e "memory" ["unit", "KiB"] [PCData
(Int64.to_string memory_k)];
e "currentMemory" ["unit", "KiB"] [PCData
(Int64.to_string memory_k)];
e "vcpu" [] [PCData (string_of_int source.s_vcpu)]
@@ -55,32 +55,32 @@ let create_libvirt_xml ?pool source target_buses guestcaps
(match source.s_cpu_vendor with
| None -> ()
| Some vendor ->
- push_back cpu (e "vendor" [] [PCData vendor])
+ List.push_back cpu (e "vendor" [] [PCData vendor])
);
(match source.s_cpu_model with
| None -> ()
| Some model ->
- push_back cpu (e "model" ["fallback",
"allow"] [PCData model])
+ List.push_back cpu (e "model" ["fallback",
"allow"] [PCData model])
);
if source.s_cpu_sockets <> None || source.s_cpu_cores <> None
||
source.s_cpu_threads <> None then (
let topology_attrs = ref [] in
(match source.s_cpu_sockets with
| None -> ()
- | Some v -> push_back topology_attrs ("sockets",
string_of_int v)
+ | Some v -> List.push_back topology_attrs ("sockets",
string_of_int v)
);
(match source.s_cpu_cores with
| None -> ()
- | Some v -> push_back topology_attrs ("cores",
string_of_int v)
+ | Some v -> List.push_back topology_attrs ("cores",
string_of_int v)
);
(match source.s_cpu_threads with
| None -> ()
- | Some v -> push_back topology_attrs ("threads",
string_of_int v)
+ | Some v -> List.push_back topology_attrs ("threads",
string_of_int v)
);
- push_back cpu (e "topology" !topology_attrs [])
+ List.push_back cpu (e "topology" !topology_attrs [])
);
- append body [ e "cpu" [ "match", "minimum" ]
!cpu ]
+ List.push_back_list body [ e "cpu" [ "match",
"minimum" ] !cpu ]
);
let uefi_firmware @@ -140,7 +140,7 @@ let create_libvirt_xml ?pool source
target_buses guestcaps
let features = List.sort compare (StringSet.elements features) in
- append body [
+ List.push_back_list body [
e "features" [] (List.map (fun s -> e s [] []) features);
];
@@ -161,7 +161,7 @@ let create_libvirt_xml ?pool source target_buses guestcaps
(e "type" (["arch", guestcaps.gcaps_arch] @ machine)
[PCData "hvm"])
:: loader in
- append body [
+ List.push_back_list body [
e "os" [] os_section;
e "on_poweroff" [] [PCData "destroy"];
@@ -236,7 +236,7 @@ let create_libvirt_xml ?pool source target_buses guestcaps
(Array.mapi (make_disk "floppy" "fd")
target_buses.target_floppy_bus)
] in
- append devices disks;
+ List.push_back_list devices disks;
let nics let net_model @@ -269,7 +269,7 @@ let create_libvirt_xml ?pool
source target_buses guestcaps
nic
) source.s_nics in
- append devices nics;
+ List.push_back_list devices nics;
(* Same as old virt-v2v, we always add a display here even if it was
* missing from the old metadata.
@@ -281,7 +281,7 @@ let create_libvirt_xml ?pool source target_buses guestcaps
| Cirrus -> e "model" [ "type",
"cirrus"; "vram", "9216" ] [] in
append_attr ("heads", "1") video_model;
e "video" [] [ video_model ] in
- push_back devices video;
+ List.push_back devices video;
let graphics match source.s_display with
@@ -326,7 +326,7 @@ let create_libvirt_xml ?pool source target_buses guestcaps
| Some { s_port = None } | None ->
append_attr ("autoport", "yes") graphics;
append_attr ("port", "-1") graphics);
- push_back devices graphics;
+ List.push_back devices graphics;
let sound match source.s_sound with
@@ -336,11 +336,11 @@ let create_libvirt_xml ?pool source target_buses guestcaps
[ e "sound" [ "model",
string_of_source_sound_model model ] [] ]
else
[] in
- append devices sound;
+ List.push_back_list devices sound;
(* Miscellaneous KVM devices. *)
if guestcaps.gcaps_virtio_rng then
- push_back devices (
+ List.push_back devices (
e "rng" ["model", "virtio"] [
(* XXX Using /dev/urandom requires libvirt >= 1.3.4. Libvirt
* was broken before that.
@@ -351,27 +351,27 @@ let create_libvirt_xml ?pool source target_buses guestcaps
(* For the balloon device, libvirt adds an implicit device
* unless we use model='none', hence this:
*)
- push_back devices (
+ List.push_back devices (
e "memballoon"
["model",
if guestcaps.gcaps_virtio_balloon then "virtio" else
"none"]
[]
);
if guestcaps.gcaps_isa_pvpanic then
- push_back devices (
+ List.push_back devices (
e "panic" ["model", "isa"] [
e "address" ["type", "isa";
"iobase", "0x505"] []
]
);
(* Standard devices added to every guest. *)
- append devices [
+ List.push_back_list devices [
e "input" ["type", "tablet"; "bus",
"usb"] [];
e "input" ["type", "mouse"; "bus",
"ps2"] [];
e "console" ["type", "pty"] [];
];
- append body [
+ List.push_back_list body [
e "devices" [] !devices;
];
diff --git a/v2v/create_ovf.ml b/v2v/create_ovf.ml
index 1b851b0e9..aebdf6230 100644
--- a/v2v/create_ovf.ml
+++ b/v2v/create_ovf.ml
@@ -314,18 +314,18 @@ let rec create_ovf source targets guestcaps inspect
(match source.s_cpu_model with
| None -> ()
| Some model ->
- push_back content_subnodes (e "CustomCpuName" [] [PCData
model])
+ List.push_back content_subnodes (e "CustomCpuName" []
[PCData model])
);
(* Add the <Origin/> element if we can. *)
(match origin_of_source_hypervisor source.s_hypervisor with
| None -> ()
| Some origin ->
- push_back content_subnodes
+ List.push_back content_subnodes
(e "Origin" [] [PCData (string_of_int origin)])
);
- push_back content_subnodes (
+ List.push_back content_subnodes (
e "Section" ["ovf:id", vm_uuid;
"ovf:required", "false";
"xsi:type",
"ovf:OperatingSystemSection_Type"] [
e "Info" [] [PCData inspect.i_product_name];
@@ -338,7 +338,7 @@ let rec create_ovf source targets guestcaps inspect
source.s_vcpu memsize_mb)]
] in
- push_back virtual_hardware_section_items (
+ List.push_back virtual_hardware_section_items (
e "Item" [] ([
e "rasd:Caption" [] [PCData (sprintf "%d virtual
cpu" source.s_vcpu)];
e "rasd:Description" [] [PCData "Number of virtual
CPU"];
@@ -370,7 +370,7 @@ let rec create_ovf source targets guestcaps inspect
)
);
- append virtual_hardware_section_items [
+ List.push_back_list virtual_hardware_section_items [
e "Item" [] [
e "rasd:Caption" [] [PCData (sprintf "%Ld MB of
memory" memsize_mb)];
e "rasd:Description" [] [PCData "Memory Size"];
@@ -403,7 +403,7 @@ let rec create_ovf source targets guestcaps inspect
(* Add the miscellaneous KVM devices. *)
if guestcaps.gcaps_virtio_rng then
- push_back virtual_hardware_section_items (
+ List.push_back virtual_hardware_section_items (
e "Item" [] [
e "rasd:Caption" [] [PCData "RNG Device"];
e "rasd:InstanceId" [] [PCData (uuidgen ())];
@@ -413,7 +413,7 @@ let rec create_ovf source targets guestcaps inspect
]
);
if guestcaps.gcaps_virtio_balloon then
- push_back virtual_hardware_section_items (
+ List.push_back virtual_hardware_section_items (
e "Item" [] [
e "rasd:Caption" [] [PCData "Memory Ballooning
Device"];
e "rasd:InstanceId" [] [PCData (uuidgen ())];
@@ -423,7 +423,7 @@ let rec create_ovf source targets guestcaps inspect
]
);
- push_back content_subnodes (
+ List.push_back content_subnodes (
e "Section" ["xsi:type",
"ovf:VirtualHardwareSection_Type"]
!virtual_hardware_section_items
);
@@ -554,7 +554,7 @@ and add_disks targets guestcaps output_alloc sd_uuid
image_uuids vol_uuids ovf (match actual_size_gb with
| None -> ()
| Some actual_size_gb ->
- push_back attrs ("ovf:actual_size", Int64.to_string
actual_size_gb)
+ List.push_back attrs ("ovf:actual_size", Int64.to_string
actual_size_gb)
);
e "Disk" !attrs [] in
if is_estimate then (
@@ -585,12 +585,12 @@ and add_disks targets guestcaps output_alloc sd_uuid
image_uuids vol_uuids ovf e "rasd:last_modified_date" []
[PCData iso_time];
] in
if is_bootable_drive then
- push_back item_subnodes
+ List.push_back item_subnodes
(e "BootOrder" [] [PCData (string_of_int
boot_order)]);
e "Item" [] !item_subnodes in
append_child item virtualhardware_section;
- ) (combine3 targets image_uuids vol_uuids)
+ ) (List.combine3 targets image_uuids vol_uuids)
(* This modifies the OVF DOM, adding a section for each NIC. *)
and add_networks nics guestcaps ovf @@ -641,7 +641,7 @@ and add_networks nics
guestcaps ovf (match mac with
| None -> ()
| Some mac ->
- push_back item_subnodes
+ List.push_back item_subnodes
(e "rasd:MACAddress" [] [PCData mac])
);
e "Item" [] !item_subnodes in
diff --git a/v2v/input_libvirt_vddk.ml b/v2v/input_libvirt_vddk.ml
index 8fa33fbeb..9afa9ed32 100644
--- a/v2v/input_libvirt_vddk.ml
+++ b/v2v/input_libvirt_vddk.ml
@@ -151,7 +151,7 @@ object
let args let add_arg, get_args let args = ref [] in
- let add_arg a = push_front a args in
+ let add_arg a = List.push_front a args in
let get_args () = List.rev !args in
add_arg, get_args in
diff --git a/v2v/input_ova.ml b/v2v/input_ova.ml
index 5f313b6fb..abb0654a5 100644
--- a/v2v/input_ova.ml
+++ b/v2v/input_ova.ml
@@ -76,7 +76,7 @@ let untar ?format ?(paths = []) file outdir let
untar_metadata file outdir let files = external_command (sprintf "tar
-tf %s" (Filename.quote file)) in
let files - filter_map (
+ List.filter_map (
fun f ->
if Filename.check_suffix f ".ovf" ||
Filename.check_suffix f ".mf" then Some f
diff --git a/v2v/input_vmx.ml b/v2v/input_vmx.ml
index 366e63560..649e86cac 100644
--- a/v2v/input_vmx.ml
+++ b/v2v/input_vmx.ml
@@ -108,7 +108,7 @@ and find_hdds vmx vmx_filename
Some (c, t, s)
| _ -> None
) hdds in
- let hdds = filter_map identity hdds in
+ let hdds = List.filter_map identity hdds in
(* We don't have a way to return the controllers and targets, so
* just make sure the disks are sorted into order, since Parse_vmx
@@ -188,7 +188,7 @@ and find_removables vmx Some s
| _ -> None
) devs in
- let devs = filter_map identity devs in
+ let devs = List.filter_map identity devs in
(* Sort by slot. *)
let devs @@ -260,7 +260,7 @@ and find_nics vmx
s_vnet_type = vnet_type })
| _ -> None
) nics in
- let nics = filter_map identity nics in
+ let nics = List.filter_map identity nics in
(* Sort by port. *)
let nics = List.sort compare nics in
diff --git a/v2v/linux_bootloaders.ml b/v2v/linux_bootloaders.ml
index 4ddc6d0dd..bc015740a 100644
--- a/v2v/linux_bootloaders.ml
+++ b/v2v/linux_bootloaders.ml
@@ -84,7 +84,7 @@ object
let paths = Array.to_list paths in
(* Remove duplicates. *)
- let paths = remove_duplicates paths in
+ let paths = List.remove_duplicates paths in
(* Get the default kernel from grub if it's set. *)
let default diff --git a/v2v/linux_kernels.ml b/v2v/linux_kernels.ml
index 59948cb61..438a00afa 100644
--- a/v2v/linux_kernels.ml
+++ b/v2v/linux_kernels.ml
@@ -89,7 +89,7 @@ let detect_kernels (g : G.guestfs) inspect family bootloader
PCRE.compile "^initrd.img-.*$"
else
PCRE.compile "^initr(?:d|amfs)-.*(?:\\.img)?$" in
- filter_map (
+ List.filter_map (
function
| { G.app2_name = name } as app
when name = "kernel" || String.is_prefix name
"kernel-"
@@ -177,7 +177,7 @@ let detect_kernels (g : G.guestfs) inspect family bootloader
g#file_architecture any_module in
(* Just return the module names, without path or extension. *)
- let modules = filter_map (
+ let modules = List.filter_map (
fun m ->
if PCRE.matches rex_ko_extract m then
Some (PCRE.sub 1)
@@ -259,7 +259,7 @@ let detect_kernels (g : G.guestfs) inspect family bootloader
let vmlinuzes = bootloader#list_kernels in
(* Map these to installed kernels. *)
- filter_map (
+ List.filter_map (
fun vmlinuz ->
try
let statbuf = g#statns vmlinuz in
diff --git a/v2v/modules_list.ml b/v2v/modules_list.ml
index e3c6d5934..d5120b70b 100644
--- a/v2v/modules_list.ml
+++ b/v2v/modules_list.ml
@@ -21,8 +21,8 @@ open Std_utils
let input_modules = ref []
and output_modules = ref []
-let register_input_module name = push_front name input_modules
-and register_output_module name = push_front name output_modules
+let register_input_module name = List.push_front name input_modules
+and register_output_module name = List.push_front name output_modules
let input_modules () = List.sort compare !input_modules
and output_modules () = List.sort compare !output_modules
@@ -36,7 +36,7 @@ type conversion_fn let convert_modules = ref []
let register_convert_module inspect_fn name conversion_fn - push_front
(inspect_fn, (name, conversion_fn)) convert_modules
+ List.push_front (inspect_fn, (name, conversion_fn)) convert_modules
let find_convert_module inspect let rec loop = function
diff --git a/v2v/output_glance.ml b/v2v/output_glance.ml
index 4e4f965c1..6ce637c59 100644
--- a/v2v/output_glance.ml
+++ b/v2v/output_glance.ml
@@ -99,42 +99,42 @@ object
] in
if source.s_cpu_sockets <> None || source.s_cpu_cores <> None
||
source.s_cpu_threads <> None then (
- push_back properties ("hw_cpu_sockets",
+ List.push_back properties ("hw_cpu_sockets",
match source.s_cpu_sockets with
| None -> "1"
| Some v -> string_of_int v);
- push_back properties ("hw_cpu_cores",
+ List.push_back properties ("hw_cpu_cores",
match source.s_cpu_cores with
| None -> "1"
| Some v -> string_of_int v);
- push_back properties ("hw_cpu_threads",
+ List.push_back properties ("hw_cpu_threads",
match source.s_cpu_threads with
| None -> "1"
| Some v -> string_of_int v);
)
else (
- push_back properties ("hw_cpu_sockets", "1");
- push_back properties ("hw_cpu_cores", string_of_int
source.s_vcpu);
+ List.push_back properties ("hw_cpu_sockets", "1");
+ List.push_back properties ("hw_cpu_cores", string_of_int
source.s_vcpu);
);
(match guestcaps.gcaps_block_bus with
| Virtio_SCSI ->
- push_back properties ("hw_scsi_model",
"virtio-scsi")
+ List.push_back properties ("hw_scsi_model",
"virtio-scsi")
| Virtio_blk | IDE -> ()
);
(match inspect.i_major_version, inspect.i_minor_version with
| 0, 0 -> ()
- | x, 0 -> push_back properties ("os_version", string_of_int
x)
- | x, y -> push_back properties ("os_version", sprintf
"%d.%d" x y)
+ | x, 0 -> List.push_back properties ("os_version",
string_of_int x)
+ | x, y -> List.push_back properties ("os_version", sprintf
"%d.%d" x y)
);
if guestcaps.gcaps_virtio_rng then
- push_back properties ("hw_rng_model", "virtio");
+ List.push_back properties ("hw_rng_model",
"virtio");
(* XXX Neither memory balloon nor pvpanic are supported by
* Glance at this time.
*)
(match target_firmware with
| TargetBIOS -> ()
| TargetUEFI ->
- push_back properties ("hw_firmware_type", "uefi")
+ List.push_back properties ("hw_firmware_type",
"uefi")
);
!properties in
diff --git a/v2v/output_libvirt.ml b/v2v/output_libvirt.ml
index 02b4d54ff..3fb449d5a 100644
--- a/v2v/output_libvirt.ml
+++ b/v2v/output_libvirt.ml
@@ -61,7 +61,7 @@ let target_features_of_capabilities_doc doc arch for i =
0 to Xml.xpathobj_nr_nodes obj - 1 do
let feature_node = Xml.xpathobj_node obj i in
let feature_name = Xml.node_name feature_node in
- push_front feature_name features
+ List.push_front feature_name features
done;
!features
)
diff --git a/v2v/output_qemu.ml b/v2v/output_qemu.ml
index d18b4b7c9..5304329ae 100644
--- a/v2v/output_qemu.ml
+++ b/v2v/output_qemu.ml
@@ -99,16 +99,16 @@ object
if source.s_cpu_sockets <> None || source.s_cpu_cores <> None
||
source.s_cpu_threads <> None then (
let a = ref [] in
- push_back a (sprintf "cpus=%d" source.s_vcpu);
- push_back a (sprintf "sockets=%d"
+ List.push_back a (sprintf "cpus=%d" source.s_vcpu);
+ List.push_back a (sprintf "sockets=%d"
(match source.s_cpu_sockets with
| None -> 1
| Some v -> v));
- push_back a (sprintf "cores=%d"
+ List.push_back a (sprintf "cores=%d"
(match source.s_cpu_cores with
| None -> 1
| Some v -> v));
- push_back a (sprintf "threads=%d"
+ List.push_back a (sprintf "threads=%d"
(match source.s_cpu_threads with
| None -> 1
| Some v -> v));
diff --git a/v2v/output_rhv.ml b/v2v/output_rhv.ml
index ce2d75c1d..2bcd988c1 100644
--- a/v2v/output_rhv.ml
+++ b/v2v/output_rhv.ml
@@ -233,7 +233,7 @@ object
debug "RHV: will export %s to %s" ov_sd target_file;
{ t with target_file = target_file }
- ) (combine3 targets image_uuids vol_uuids) in
+ ) (List.combine3 targets image_uuids vol_uuids) in
(* Generate the .meta file associated with each volume. *)
let metas diff --git a/v2v/output_vdsm.ml b/v2v/output_vdsm.ml
index f60b6b4c7..0aeee289d 100644
--- a/v2v/output_vdsm.ml
+++ b/v2v/output_vdsm.ml
@@ -85,7 +85,7 @@ object
let mp, uuid let fields = String.nsplit "/" os in (* ...
"data-center" "UUID" *)
let fields = List.rev fields in (* "UUID"
"data-center" ... *)
- let fields = dropwhile ((=) "") fields in
+ let fields = List.dropwhile ((=) "") fields in
match fields with
| uuid :: rest when String.length uuid = 36 ->
let mp = String.concat "/" (List.rev rest) in
@@ -135,7 +135,7 @@ object
debug "VDSM: will export %s to %s" ov_sd target_file;
{ t with target_file = target_file }
- ) (combine3 targets vdsm_params.image_uuids vdsm_params.vol_uuids) in
+ ) (List.combine3 targets vdsm_params.image_uuids vdsm_params.vol_uuids)
in
(* Generate the .meta files associated with each volume. *)
let metas diff --git a/v2v/parse_libvirt_xml.ml b/v2v/parse_libvirt_xml.ml
index 40d558a5e..7a03156f3 100644
--- a/v2v/parse_libvirt_xml.ml
+++ b/v2v/parse_libvirt_xml.ml
@@ -122,7 +122,7 @@ let parse_libvirt_xml ?conn xml let nr_nodes =
Xml.xpathobj_nr_nodes obj in
for i = 0 to nr_nodes-1 do
let node = Xml.xpathobj_node obj i in
- push_front (Xml.node_name node) features
+ List.push_front (Xml.node_name node) features
done;
!features in
@@ -253,7 +253,7 @@ let parse_libvirt_xml ?conn xml
s_controller = controller };
p_source = p_source
} in
- push_front disk disks
+ List.push_front disk disks
in
get_disks, add_disk
in
@@ -402,7 +402,7 @@ let parse_libvirt_xml ?conn xml { s_removable_type
= typ;
s_removable_controller = controller;
s_removable_slot = slot } in
- push_front disk disks
+ List.push_front disk disks
done;
List.rev !disks in
@@ -446,7 +446,7 @@ let parse_libvirt_xml ?conn xml s_vnet_orig =
vnet;
s_vnet_type = vnet_type
} in
- push_front nic nics
+ List.push_front nic nics
in
match xpath_string "source/@network | source/@bridge" with
| None -> ()
diff --git a/v2v/parse_ovf_from_ova.ml b/v2v/parse_ovf_from_ova.ml
index e3518e30d..1c113eca2 100644
--- a/v2v/parse_ovf_from_ova.ml
+++ b/v2v/parse_ovf_from_ova.ml
@@ -174,7 +174,7 @@ let parse_ovf_from_ova ovf_filename href = href;
compressed = compressed
} in
- push_front disk disks;
+ List.push_front disk disks;
) else
error (f_"could not parse disk rasd:HostResource from OVF
document")
done;
@@ -217,7 +217,7 @@ let parse_ovf_from_ova ovf_filename
s_removable_controller = controller;
s_removable_slot = slot;
} in
- push_front disk removables;
+ List.push_front disk removables;
done;
List.rev !removables
@@ -239,7 +239,7 @@ let parse_ovf_from_ova ovf_filename s_vnet_orig =
vnet;
s_vnet_type = Network;
} in
- push_front nic nics
+ List.push_front nic nics
done;
List.rev !nics
in
diff --git a/v2v/parse_vmx.ml b/v2v/parse_vmx.ml
index 3c72527b9..65d5a0edd 100644
--- a/v2v/parse_vmx.ml
+++ b/v2v/parse_vmx.ml
@@ -290,7 +290,7 @@ and parse_string str ) lines in
(* Parse the lines into key = "value". *)
- let lines = filter_map (
+ let lines = List.filter_map (
fun line ->
if PCRE.matches rex line then (
let key = PCRE.sub 1 and value = PCRE.sub 2 in
diff --git a/v2v/test-harness/v2v_test_harness.ml
b/v2v/test-harness/v2v_test_harness.ml
index ae0033dde..a2eeab0ff 100644
--- a/v2v/test-harness/v2v_test_harness.ml
+++ b/v2v/test-harness/v2v_test_harness.ml
@@ -93,7 +93,7 @@ let run ~test ?input_disk ?input_xml ?(test_plan =
default_plan) () let nodes_of_xpathobj doc xpathobj let nodes = ref []
in
for i = 0 to Xml.xpathobj_nr_nodes xpathobj - 1 do
- push_front (Xml.xpathobj_node xpathobj i) nodes
+ List.push_front (Xml.xpathobj_node xpathobj i) nodes
done;
List.rev !nodes
in
@@ -209,7 +209,7 @@ let run ~test ?input_disk ?input_xml ?(test_plan =
default_plan) () printf "%s\n%!" cmd;
let chan = open_process_in cmd in
let lines = ref [] in
- (try while true do push_front (input_line chan) lines done
+ (try while true do List.push_front (input_line chan) lines done
with End_of_file -> ());
let lines = List.rev !lines in
let stat = close_process_in chan in
@@ -282,7 +282,7 @@ let run ~test ?input_disk ?input_xml ?(test_plan =
default_plan) () printf "%s\n%!" cmd;
let chan = open_process_in cmd in
let lines = ref [] in
- (try while true do push_front (input_line chan) lines done
+ (try while true do List.push_front (input_line chan) lines done
with End_of_file -> ());
let lines = List.rev !lines in
let stat = close_process_in chan in
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 92aa6102b..9e609b526 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -447,7 +447,7 @@ and do_fstrim g inspect (* Get all filesystems. *)
let fses = g#list_filesystems () in
- let fses = filter_map (
+ let fses = List.filter_map (
function (_, ("unknown"|"swap")) -> None | (dev, _)
-> Some dev
) fses in
@@ -788,7 +788,7 @@ and rcaps_from_source source let source_block_types
List.map (fun sd -> sd.s_controller) source.s_disks in
let source_block_type - match sort_uniq source_block_types with
+ match List.sort_uniq source_block_types with
| [] -> error (f_"source has no hard disks!")
| [t] -> t
| _ -> error (f_"source has multiple hard disk types!") in
@@ -804,7 +804,7 @@ and rcaps_from_source source let source_net_types
List.map (fun nic -> nic.s_nic_model) source.s_nics in
let source_net_type - match sort_uniq source_net_types with
+ match List.sort_uniq source_net_types with
| [] -> None
| [t] -> t
| _ -> error (f_"source has multiple network adapter model!")
in
diff --git a/v2v/vCenter.ml b/v2v/vCenter.ml
index 18879432b..41bdbdd01 100644
--- a/v2v/vCenter.ml
+++ b/v2v/vCenter.ml
@@ -42,11 +42,11 @@ let get_session_cookie password scheme uri sslverify url
| None, Some _ ->
warning (f_"--password-file parameter ignored because
'user@' was not given in the URL")
| Some user, None ->
- push_back curl_args ("user", Some user)
+ List.push_back curl_args ("user", Some user)
| Some user, Some password ->
- push_back curl_args ("user", Some (user ^ ":" ^
password))
+ List.push_back curl_args ("user", Some (user ^ ":"
^ password))
);
- if not sslverify then push_back curl_args ("insecure", None);
+ if not sslverify then List.push_back curl_args ("insecure",
None);
let curl_h = Curl.create !curl_args in
let lines = Curl.run curl_h in
--
2.13.2
Richard W.M. Jones
2017-Oct-08 20:44 UTC
[Libguestfs] [PATCH 2/3] common/mlstdutils: Introduce Option submodule.
Inspired by ocaml-extlib, introduce a module for handling option
types.
We already had the ‘may’ function (which becomes ‘Option.may’). This
adds also ‘Option.map’ (unused), and ‘Option.default’ functions.
Note this does *not* introduce the unsafe ‘Option.get’ function from
extlib.
---
builder/builder.ml | 6 ++---
builder/index.ml | 27 +++++++++------------
builder/list_entries.ml | 20 +++++++---------
common/mlstdutils/std_utils.ml | 18 ++++++++++----
common/mlstdutils/std_utils.mli | 15 +++++++++---
common/mltools/tools_utils.ml | 6 ++---
customize/customize_main.ml | 4 ++--
daemon/inspect_types.ml | 52 ++++++++++++++++++++---------------------
dib/dib.ml | 4 ++--
resize/resize.ml | 6 ++---
sysprep/sysprep_operation.ml | 16 ++++++-------
v2v/changeuid.ml | 4 ++--
v2v/cmdline.ml | 6 ++---
v2v/input_libvirt_vddk.ml | 3 ++-
v2v/parse_libvirt_xml.ml | 6 ++---
v2v/types.ml | 7 +++---
v2v/v2v.ml | 6 ++---
17 files changed, 107 insertions(+), 99 deletions(-)
diff --git a/builder/builder.ml b/builder/builder.ml
index 8b4c20765..9b907ac8e 100644
--- a/builder/builder.ml
+++ b/builder/builder.ml
@@ -688,8 +688,8 @@ let main () let g let g = open_guestfs () in
- may g#set_memsize cmdline.memsize;
- may g#set_smp cmdline.smp;
+ Option.may g#set_memsize cmdline.memsize;
+ Option.may g#set_smp cmdline.smp;
g#set_network cmdline.network;
(* The output disk is being created, so use cache=unsafe here. *)
@@ -781,6 +781,6 @@ let main () Pervasives.flush Pervasives.stdout;
Pervasives.flush Pervasives.stderr;
- may print_string stats
+ Option.may print_string stats
let () = run_main_and_handle_errors main
diff --git a/builder/index.ml b/builder/index.ml
index b895e3f52..84f66c265 100644
--- a/builder/index.ml
+++ b/builder/index.ml
@@ -53,34 +53,29 @@ let print_entry chan (name, { printable_name; file_uri;
arch; osinfo;
notes; aliases; hidden }) let fp fs = fprintf
chan fs in
fp "[%s]\n" name;
- may (fp "name=%s\n") printable_name;
- may (fp "osinfo=%s\n") osinfo;
+ Option.may (fp "name=%s\n") printable_name;
+ Option.may (fp "osinfo=%s\n") osinfo;
fp "file=%s\n" file_uri;
fp "arch=%s\n" arch;
- may (fp "sig=%s\n") signature_uri;
- (match checksums with
- | None -> ()
- | Some checksums ->
+ Option.may (fp "sig=%s\n") signature_uri;
+ Option.may (
List.iter (
fun c ->
fp "checksum[%s]=%s\n"
(Checksums.string_of_csum_t c) (Checksums.string_of_csum c)
- ) checksums
- );
+ )
+ ) checksums;
fp "revision=%s\n" (string_of_revision revision);
- may (fp "format=%s\n") format;
+ Option.may (fp "format=%s\n") format;
fp "size=%Ld\n" size;
- may (fp "compressed_size=%Ld\n") compressed_size;
- may (fp "expand=%s\n") expand;
- may (fp "lvexpand=%s\n") lvexpand;
+ Option.may (fp "compressed_size=%Ld\n") compressed_size;
+ Option.may (fp "expand=%s\n") expand;
+ Option.may (fp "lvexpand=%s\n") lvexpand;
List.iter (
fun (lang, notes) ->
match lang with
| "" -> fp "notes=%s\n" notes
| lang -> fp "notes[%s]=%s\n" lang notes
) notes;
- (match aliases with
- | None -> ()
- | Some l -> fp "aliases=%s\n" (String.concat " " l)
- );
+ Option.may (fun l -> fp "aliases=%s\n" (String.concat "
" l)) aliases;
if hidden then fp "hidden=true\n"
diff --git a/builder/list_entries.ml b/builder/list_entries.ml
index 2cd030fca..af1d2419b 100644
--- a/builder/list_entries.ml
+++ b/builder/list_entries.ml
@@ -47,7 +47,7 @@ and list_entries_short index if not hidden then (
printf "%-24s" name;
printf " %-10s" arch;
- may (printf " %s") printable_name;
+ Option.may (printf " %s") printable_name;
printf "\n"
)
) index
@@ -73,19 +73,15 @@ and list_entries_long ~sources index
notes; aliases; hidden }) ->
if not hidden then (
printf "%-24s %s\n" "os-version:" name;
- may (printf "%-24s %s\n" (s_"Full name:"))
printable_name;
+ Option.may (printf "%-24s %s\n" (s_"Full name:"))
printable_name;
printf "%-24s %s\n" (s_"Architecture:") arch;
printf "%-24s %s\n" (s_"Minimum/default size:")
(human_size size);
- (match compressed_size with
- | None -> ()
- | Some size ->
- printf "%-24s %s\n" (s_"Download size:")
(human_size size);
- );
- (match aliases with
- | None -> ()
- | Some l -> printf "%-24s %s\n" (s_"Aliases:")
- (String.concat " " l);
- );
+ Option.may (fun size ->
+ printf "%-24s %s\n" (s_"Download size:")
(human_size size)
+ ) compressed_size;
+ Option.may (
+ fun l -> printf "%-24s %s\n" (s_"Aliases:")
(String.concat " " l)
+ ) aliases;
let notes = Languages.find_notes langs notes in
(match notes with
| notes :: _ ->
diff --git a/common/mlstdutils/std_utils.ml b/common/mlstdutils/std_utils.ml
index 558b1e3e2..32bba4113 100644
--- a/common/mlstdutils/std_utils.ml
+++ b/common/mlstdutils/std_utils.ml
@@ -359,6 +359,20 @@ module List = struct
let push_front_list xs xsp = xsp := xs @ !xsp
end
+module Option = struct
+ let may f = function
+ | None -> ()
+ | Some x -> f x
+
+ let map f = function
+ | None -> None
+ | Some x -> Some (f x)
+
+ let default def = function
+ | None -> def
+ | Some x -> x
+end
+
let (//) = Filename.concat
let quote = Filename.quote
@@ -575,10 +589,6 @@ and output_spaces chan n = for i = 0 to n-1 do output_char
chan ' ' done
let unique = let i = ref 0 in fun () -> incr i; !i
-let may f = function
- | None -> ()
- | Some x -> f x
-
type ('a, 'b) maybe = Either of 'a | Or of 'b
let protect ~f ~finally diff --git a/common/mlstdutils/std_utils.mli
b/common/mlstdutils/std_utils.mli
index 3895a41cc..b3cfdcd55 100644
--- a/common/mlstdutils/std_utils.mli
+++ b/common/mlstdutils/std_utils.mli
@@ -256,6 +256,18 @@ module List : sig
end
(** Override the List module from stdlib. *)
+module Option : sig
+ val may : ('a -> unit) -> 'a option -> unit
+ (** [may f (Some x)] runs [f x]. [may f None] does nothing. *)
+
+ val map : ('a -> 'b) -> 'a option -> 'b option
+ (** [map f (Some x)] returns [Some (f x)]. [map f None] returns [None]. *)
+
+ val default : 'a -> 'a option -> 'a
+ (** [default x (Some y)] returns [y]. [default x None] returns [x]. *)
+end
+(** Functions for dealing with option types. *)
+
val ( // ) : string -> string -> string
(** Concatenate directory and filename. *)
@@ -320,9 +332,6 @@ val output_spaces : out_channel -> int -> unit
val unique : unit -> int
(** Returns a unique number each time called. *)
-val may : ('a -> unit) -> 'a option -> unit
-(** [may f (Some x)] runs [f x]. [may f None] does nothing. *)
-
type ('a, 'b) maybe = Either of 'a | Or of 'b
(** Like the Haskell [Either] type. *)
diff --git a/common/mltools/tools_utils.ml b/common/mltools/tools_utils.ml
index f66ee9f50..8140ba84d 100644
--- a/common/mltools/tools_utils.ml
+++ b/common/mltools/tools_utils.ml
@@ -109,7 +109,7 @@ let open_guestfs ?identifier () let g = new
Guestfs.guestfs () in
if trace () then g#set_trace true;
if verbose () then g#set_verbose true;
- may g#set_identifier identifier;
+ Option.may g#set_identifier identifier;
g
(* All the OCaml virt-* programs use this wrapper to catch exceptions
@@ -340,8 +340,8 @@ and do_run ?(echo_cmd = true) ?stdout_chan ?stderr_chan args
Or 127
and do_teardown app outfd errfd exitstat - may Unix.close outfd;
- may Unix.close errfd;
+ Option.may Unix.close outfd;
+ Option.may Unix.close errfd;
match exitstat with
| Unix.WEXITED i ->
i
diff --git a/customize/customize_main.ml b/customize/customize_main.ml
index f6ffc872d..8ba4f5ce7 100644
--- a/customize/customize_main.ml
+++ b/customize/customize_main.ml
@@ -157,8 +157,8 @@ read the man page virt-customize(1).
(* Connect to libguestfs. *)
let g let g = open_guestfs () in
- may g#set_memsize memsize;
- may g#set_smp smp;
+ Option.may g#set_memsize memsize;
+ Option.may g#set_smp smp;
g#set_network network;
(* Add disks. *)
diff --git a/daemon/inspect_types.ml b/daemon/inspect_types.ml
index a687ea08c..1da41064d 100644
--- a/daemon/inspect_types.ml
+++ b/daemon/inspect_types.ml
@@ -143,38 +143,38 @@ and string_of_root { root_location; inspection_data } and
string_of_inspection_data data let b = Buffer.create 1024 in
let bpf fs = bprintf b fs in
- may (fun v -> bpf " type: %s\n" (string_of_os_type v))
- data.os_type;
- may (fun v -> bpf " distro: %s\n" (string_of_distro v))
- data.distro;
- may (fun v -> bpf " package_format: %s\n"
(string_of_package_format v))
- data.package_format;
- may (fun v -> bpf " package_management: %s\n"
(string_of_package_management v))
- data.package_management;
- may (fun v -> bpf " product_name: %s\n" v)
- data.product_name;
- may (fun v -> bpf " product_variant: %s\n" v)
- data.product_variant;
- may (fun (major, minor) -> bpf " version: %d.%d\n" major
minor)
- data.version;
- may (fun v -> bpf " arch: %s\n" v)
- data.arch;
- may (fun v -> bpf " hostname: %s\n" v)
- data.hostname;
+ Option.may (fun v -> bpf " type: %s\n" (string_of_os_type v))
+ data.os_type;
+ Option.may (fun v -> bpf " distro: %s\n" (string_of_distro
v))
+ data.distro;
+ Option.may (fun v -> bpf " package_format: %s\n"
(string_of_package_format v))
+ data.package_format;
+ Option.may (fun v -> bpf " package_management: %s\n"
(string_of_package_management v))
+ data.package_management;
+ Option.may (fun v -> bpf " product_name: %s\n" v)
+ data.product_name;
+ Option.may (fun v -> bpf " product_variant: %s\n" v)
+ data.product_variant;
+ Option.may (fun (major, minor) -> bpf " version: %d.%d\n"
major minor)
+ data.version;
+ Option.may (fun v -> bpf " arch: %s\n" v)
+ data.arch;
+ Option.may (fun v -> bpf " hostname: %s\n" v)
+ data.hostname;
if data.fstab <> [] then (
let v = List.map (
fun (a, b) -> sprintf "(%s, %s)" (Mountable.to_string a) b
) data.fstab in
bpf " fstab: [%s]\n" (String.concat ", " v)
);
- may (fun v -> bpf " windows_systemroot: %s\n" v)
- data.windows_systemroot;
- may (fun v -> bpf " windows_software_hive: %s\n" v)
- data.windows_software_hive;
- may (fun v -> bpf " windows_system_hive: %s\n" v)
- data.windows_system_hive;
- may (fun v -> bpf " windows_current_control_set: %s\n" v)
- data.windows_current_control_set;
+ Option.may (fun v -> bpf " windows_systemroot: %s\n" v)
+ data.windows_systemroot;
+ Option.may (fun v -> bpf " windows_software_hive: %s\n" v)
+ data.windows_software_hive;
+ Option.may (fun v -> bpf " windows_system_hive: %s\n" v)
+ data.windows_system_hive;
+ Option.may (fun v -> bpf " windows_current_control_set: %s\n"
v)
+ data.windows_current_control_set;
if data.drive_mappings <> [] then (
let v List.map (fun (a, b) -> sprintf "(%s, %s)" a b)
data.drive_mappings in
diff --git a/dib/dib.ml b/dib/dib.ml
index f8595636a..9a8d86bd9 100644
--- a/dib/dib.ml
+++ b/dib/dib.ml
@@ -720,8 +720,8 @@ let main ()
let g, tmpdisk, tmpdiskfmt, drive_partition let g = open_guestfs () in
- may g#set_memsize cmdline.memsize;
- may g#set_smp cmdline.smp;
+ Option.may g#set_memsize cmdline.memsize;
+ Option.may g#set_smp cmdline.smp;
g#set_network cmdline.network;
(* Main disk with the built image. *)
diff --git a/resize/resize.ml b/resize/resize.ml
index 4eeb0a170..837c3ce9e 100644
--- a/resize/resize.ml
+++ b/resize/resize.ml
@@ -1005,7 +1005,7 @@ read the man page virt-resize(1).
let ok try
g#part_init "/dev/sdb" parttype_string;
- may (g#part_set_disk_guid "/dev/sdb") disk_guid;
+ Option.may (g#part_set_disk_guid "/dev/sdb") disk_guid;
true
with G.Error error -> last_error := error; false in
if ok then g, true
@@ -1195,8 +1195,8 @@ read the man page virt-resize(1).
if p.p_bootable then
g#part_set_bootable "/dev/sdb" p.p_target_partnum true;
- may (g#part_set_name "/dev/sdb" p.p_target_partnum) p.p_label;
- may (g#part_set_gpt_guid "/dev/sdb" p.p_target_partnum)
p.p_guid;
+ Option.may (g#part_set_name "/dev/sdb" p.p_target_partnum)
p.p_label;
+ Option.may (g#part_set_gpt_guid "/dev/sdb" p.p_target_partnum)
p.p_guid;
match parttype, p.p_id with
| GPT, GPT_Type gpt_type ->
diff --git a/sysprep/sysprep_operation.ml b/sysprep/sysprep_operation.ml
index 2ddce302a..0013ff504 100644
--- a/sysprep/sysprep_operation.ml
+++ b/sysprep/sysprep_operation.ml
@@ -187,15 +187,13 @@ let dump_pod () if op.enabled_by_default then
printf "*\n";
printf "\n";
printf "%s.\n\n" op.heading;
- may (printf "%s\n\n") op.pod_description;
- (match op.pod_notes with
- | None -> ()
- | Some notes ->
- printf "=head3 ";
- printf (f_"Notes on %s") op.name;
- printf "\n\n";
- printf "%s\n\n" notes
- )
+ Option.may (printf "%s\n\n") op.pod_description;
+ Option.may (fun notes ->
+ printf "=head3 ";
+ printf (f_"Notes on %s") op.name;
+ printf "\n\n";
+ printf "%s\n\n" notes
+ ) op.pod_notes;
) !all_operations
let dump_pod_options () diff --git a/v2v/changeuid.ml b/v2v/changeuid.ml
index d02f2f5cf..49290c298 100644
--- a/v2v/changeuid.ml
+++ b/v2v/changeuid.ml
@@ -40,8 +40,8 @@ let with_fork { uid; gid } name f
if pid = 0 then (
(* Child. *)
- may setgid gid;
- may setuid uid;
+ Option.may setgid gid;
+ Option.may setuid uid;
(try f ()
with exn ->
eprintf "%s: changeuid: %s: %s\n%!" prog name
(Printexc.to_string exn);
diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml
index 2180b656f..1ae018bcd 100644
--- a/v2v/cmdline.ml
+++ b/v2v/cmdline.ml
@@ -319,8 +319,7 @@ read the man page virt-v2v(1).
let vdsm_image_uuids = List.rev !vdsm_image_uuids in
let vdsm_vol_uuids = List.rev !vdsm_vol_uuids in
let vdsm_vm_uuid = !vdsm_vm_uuid in
- let vdsm_ovf_output - match !vdsm_ovf_output with None -> "."
| Some s -> s in
+ let vdsm_ovf_output = Option.default "." !vdsm_ovf_output in
(* No arguments and machine-readable mode? Print out some facts
* about what this binary supports.
@@ -422,8 +421,7 @@ read the man page virt-v2v(1).
| `Not_set
| `Libvirt ->
- let output_storage - match output_storage with None ->
"default" | Some os -> os in
+ let output_storage = Option.default "default" output_storage in
if qemu_boot then
error_option_cannot_be_used_in_output_mode "libvirt"
"--qemu-boot";
if not do_copy then
diff --git a/v2v/input_libvirt_vddk.ml b/v2v/input_libvirt_vddk.ml
index 9afa9ed32..13a6a1561 100644
--- a/v2v/input_libvirt_vddk.ml
+++ b/v2v/input_libvirt_vddk.ml
@@ -210,7 +210,8 @@ object
add_arg (sprintf "libdir=%s" libdir);
(* The passthrough parameters. *)
- let pt name = may (fun field -> add_arg (sprintf "%s=%s"
name field)) in
+ let pt name + Option.may (fun field -> add_arg (sprintf
"%s=%s" name field)) in
pt "config" vddk_options.vddk_config;
pt "cookie" vddk_options.vddk_cookie;
pt "nfchostport" vddk_options.vddk_nfchostport;
diff --git a/v2v/parse_libvirt_xml.ml b/v2v/parse_libvirt_xml.ml
index 7a03156f3..2f90bee0c 100644
--- a/v2v/parse_libvirt_xml.ml
+++ b/v2v/parse_libvirt_xml.ml
@@ -111,9 +111,9 @@ let parse_libvirt_xml ?conn xml | Some vcpu, _, _,
_ -> vcpu
| None, None, None, None -> 1
| None, _, _, _ ->
- let sockets = match cpu_sockets with None -> 1 | Some v -> v in
- let cores = match cpu_cores with None -> 1 | Some v -> v in
- let threads = match cpu_threads with None -> 1 | Some v -> v in
+ let sockets = Option.default 1 cpu_sockets
+ and cores = Option.default 1 cpu_cores
+ and threads = Option.default 1 cpu_threads in
sockets * cores * threads in
let features diff --git a/v2v/types.ml b/v2v/types.ml
index 1b4e57845..fbf616c3d 100644
--- a/v2v/types.ml
+++ b/v2v/types.ml
@@ -18,8 +18,9 @@
open Printf
-open Common_gettext.Gettext
+open Std_utils
open Tools_utils
+open Common_gettext.Gettext
(* Types. See types.mli for documentation. *)
@@ -126,8 +127,8 @@ NICs:
(string_of_source_hypervisor s.s_hypervisor)
s.s_memory
s.s_vcpu
- (match s.s_cpu_vendor with None -> "" | Some v -> v)
- (match s.s_cpu_model with None -> "" | Some v -> v)
+ (Option.default "" s.s_cpu_vendor)
+ (Option.default "" s.s_cpu_model)
(match s.s_cpu_sockets with None -> "-" | Some v ->
string_of_int v)
(match s.s_cpu_cores with None -> "-" | Some v ->
string_of_int v)
(match s.s_cpu_threads with None -> "-" | Some v ->
string_of_int v)
diff --git a/v2v/v2v.ml b/v2v/v2v.ml
index 9e609b526..2864d728d 100644
--- a/v2v/v2v.ml
+++ b/v2v/v2v.ml
@@ -214,9 +214,9 @@ and open_source cmdline input (match
source.s_cpu_sockets, source.s_cpu_cores, source.s_cpu_threads with
| None, None, None -> () (* no topology specified *)
| sockets, cores, threads ->
- let sockets = match sockets with None -> 1 | Some v -> v in
- let cores = match cores with None -> 1 | Some v -> v in
- let threads = match threads with None -> 1 | Some v -> v in
+ let sockets = Option.default 1 sockets
+ and cores = Option.default 1 cores
+ and threads = Option.default 1 threads in
let expected_vcpu = sockets * cores * threads in
if expected_vcpu <> source.s_vcpu then
warning (f_"source sockets * cores * threads <> number of
vCPUs.\nSockets %d * cores per socket %d * threads %d = %d, but number of vCPUs
= %d.\n\nThis is a problem with either the source metadata or the virt-v2v input
module. In some circumstances this could stop the guest from booting on the
target.")
--
2.13.2
Richard W.M. Jones
2017-Oct-08 20:44 UTC
[Libguestfs] [PATCH 3/3] common/mltools: xpath_helpers: Get rid of xpath_*_default functions.
Instead of using ‘xpath_(string|int|int64)_default’ we can write the
equivalent code using ‘Option.default’. This is not quite so concise,
but may be easier to understand.
eg:
xpath_int_default xctx "xpath_expr" 10
->
Option.default 10 (xpath_int xctx "xpath_expr")
---
common/mltools/xpath_helpers.ml | 12 ------------
common/mltools/xpath_helpers.mli | 6 ------
v2v/copy_to_local.ml | 6 +++---
v2v/parse_libvirt_xml.ml | 9 ++++-----
v2v/parse_ovf_from_ova.ml | 16 ++++++++--------
5 files changed, 15 insertions(+), 34 deletions(-)
diff --git a/common/mltools/xpath_helpers.ml b/common/mltools/xpath_helpers.ml
index 05fad89a4..3afee8b21 100644
--- a/common/mltools/xpath_helpers.ml
+++ b/common/mltools/xpath_helpers.ml
@@ -40,15 +40,3 @@ let xpath_eval parsefn xpathctx expr let xpath_string =
xpath_eval identity
let xpath_int = xpath_eval int_of_string
let xpath_int64 = xpath_eval Int64.of_string
-
-(* Parse an xpath expression and return a string/int; if the expression
- * doesn't match, return the default.
- *)
-let xpath_eval_default parsefn xpath expr default - match xpath_eval parsefn
xpath expr with
- | None -> default
- | Some s -> s
-
-let xpath_string_default = xpath_eval_default identity
-let xpath_int_default = xpath_eval_default int_of_string
-let xpath_int64_default = xpath_eval_default Int64.of_string
diff --git a/common/mltools/xpath_helpers.mli b/common/mltools/xpath_helpers.mli
index 7434ba645..3a8190b05 100644
--- a/common/mltools/xpath_helpers.mli
+++ b/common/mltools/xpath_helpers.mli
@@ -25,9 +25,3 @@ val xpath_int : Xml.xpathctx -> string -> int option
val xpath_int64 : Xml.xpathctx -> string -> int64 option
(** Parse an xpath expression and return a string/int. Returns
[Some v], or [None] if the expression doesn't match. *)
-
-val xpath_string_default : Xml.xpathctx -> string -> string -> string
-val xpath_int_default : Xml.xpathctx -> string -> int -> int
-val xpath_int64_default : Xml.xpathctx -> string -> int64 -> int64
-(** Parse an xpath expression and return a string/int; if the expression
- doesn't match, return the default. *)
diff --git a/v2v/copy_to_local.ml b/v2v/copy_to_local.ml
index d2471a546..8a64f3a58 100644
--- a/v2v/copy_to_local.ml
+++ b/v2v/copy_to_local.ml
@@ -243,14 +243,14 @@ and parse_libvirt_xml guest_name xml let xpathctx =
Xml.xpath_new_context doc in
Xml.xpath_register_ns xpathctx
"vmware"
"http://libvirt.org/schemas/domain/vmware/1.0";
- let xpath_string = xpath_string xpathctx
- and xpath_string_default = xpath_string_default xpathctx in
+ let xpath_string = xpath_string xpathctx in
(* Get the dcpath, only present for libvirt >= 1.2.20 so use a
* sensible default for older versions.
*)
let dcpath - xpath_string_default
"/domain/vmware:datacenterpath" "ha-datacenter" in
+ Option.default "ha-datacenter"
+ (xpath_string "/domain/vmware:datacenterpath") in
(* Parse the disks. *)
let get_disks, add_disk diff --git a/v2v/parse_libvirt_xml.ml
b/v2v/parse_libvirt_xml.ml
index 2f90bee0c..421175373 100644
--- a/v2v/parse_libvirt_xml.ml
+++ b/v2v/parse_libvirt_xml.ml
@@ -77,10 +77,8 @@ let parse_libvirt_xml ?conn xml let doc = Xml.parse_memory
xml in
let xpathctx = Xml.xpath_new_context doc in
let xpath_string = xpath_string xpathctx
- and xpath_string_default = xpath_string_default xpathctx
and xpath_int = xpath_int xpathctx
- (*and xpath_int_default = xpath_int_default xpathctx*)
- and xpath_int64_default = xpath_int64_default xpathctx in
+ and xpath_int64 = xpath_int64 xpathctx in
let hypervisor match xpath_string "/domain/@type" with
@@ -92,7 +90,8 @@ let parse_libvirt_xml ?conn xml | None | Some
"" ->
error (f_"in the libvirt XML metadata, <name> is missing or
empty")
| Some s -> s in
- let memory = xpath_int64_default "/domain/memory/text()" (1024L *^
1024L) in
+ let memory + Option.default (1024L *^ 1024L) (xpath_int64
"/domain/memory/text()") in
let memory = memory *^ 1024L in
let cpu_vendor = xpath_string "/domain/cpu/vendor/text()" in
@@ -317,7 +316,7 @@ let parse_libvirt_xml ?conn xml (* This is for
testing curl, eg for testing VMware conversions
* without needing VMware around.
*)
- let path = xpath_string_default "source/@name"
"" in
+ let path = Option.default "" (xpath_string
"source/@name") in
let qemu_uri = create_curl_qemu_uri driver host port path in
add_disk qemu_uri format controller P_dont_rewrite
| Some protocol, _, _ ->
diff --git a/v2v/parse_ovf_from_ova.ml b/v2v/parse_ovf_from_ova.ml
index 1c113eca2..1d7c632bc 100644
--- a/v2v/parse_ovf_from_ova.ml
+++ b/v2v/parse_ovf_from_ova.ml
@@ -52,9 +52,7 @@ let parse_ovf_from_ova ovf_filename
let xpath_string = xpath_string xpathctx
and xpath_int = xpath_int xpathctx
- and xpath_string_default = xpath_string_default xpathctx
- and xpath_int_default = xpath_int_default xpathctx
- and xpath_int64_default = xpath_int64_default xpathctx in
+ and xpath_int64 = xpath_int64 xpathctx in
let rec parse_top () (* Search for vm name. *)
@@ -64,11 +62,11 @@ let parse_ovf_from_ova ovf_filename | Some _ as name
-> name in
(* Search for memory. *)
- let memory = xpath_int64_default
"/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=4]/rasd:VirtualQuantity/text()"
(1024L *^ 1024L) in
+ let memory = Option.default (1024L *^ 1024L) (xpath_int64
"/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=4]/rasd:VirtualQuantity/text()")
in
let memory = memory *^ 1024L *^ 1024L in
(* Search for number of vCPUs. *)
- let vcpu = xpath_int_default
"/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=3]/rasd:VirtualQuantity/text()"
1 in
+ let vcpu = Option.default 1 (xpath_int
"/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/ovf:Item[rasd:ResourceType/text()=3]/rasd:VirtualQuantity/text()")
in
(* CPU topology. coresPerSocket is a VMware proprietary extension.
* I couldn't find out how hyperthreads is specified in the OVF.
@@ -91,7 +89,7 @@ let parse_ovf_from_ova ovf_filename Some sockets,
Some cores_per_socket in
(* BIOS or EFI firmware? *)
- let firmware = xpath_string_default
"/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/vmw:Config[@vmw:key=\"firmware\"]/@vmw:value"
"bios" in
+ let firmware = Option.default "bios" (xpath_string
"/ovf:Envelope/ovf:VirtualSystem/ovf:VirtualHardwareSection/vmw:Config[@vmw:key=\"firmware\"]/@vmw:value")
in
let firmware match firmware with
| "bios" -> BIOS
@@ -141,7 +139,8 @@ let parse_ovf_from_ova ovf_filename | Some id ->
parent_controller id in
Xml.xpathctx_set_current_context xpathctx n;
- let file_id = xpath_string_default "rasd:HostResource/text()"
"" in
+ let file_id + Option.default "" (xpath_string
"rasd:HostResource/text()") in
let rex = PCRE.compile "^(?:ovf:)?/disk/(.*)" in
if PCRE.matches rex file_id then (
(* Chase the references through to the actual file name. *)
@@ -231,7 +230,8 @@ let parse_ovf_from_ova ovf_filename let n =
Xml.xpathobj_node obj i in
Xml.xpathctx_set_current_context xpathctx n;
let vnet - xpath_string_default
"rasd:ElementName/text()" (sprintf"eth%d" i) in
+ Option.default (sprintf"eth%d" i)
+ (xpath_string "rasd:ElementName/text()") in
let nic = {
s_mac = None;
s_nic_model = None;
--
2.13.2
Richard W.M. Jones
2017-Oct-08 21:26 UTC
Re: [Libguestfs] [PATCH 0/3] common/mlstdutils: Add Std_utils List and Option modules.
On Sun, Oct 08, 2017 at 09:43:58PM +0100, Richard W.M. Jones wrote:> In Std_utils we already extend Char and String. These commits take it > a little further by extending List and adding a new Option submodule. > > All basically simple refactoring.Ooops, I missed out the first commit. I'll post this again including the first commit this time ... Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html
Seemingly Similar Threads
- [[PATCH v2 0/4] common/mlstdutils: Add Std_utils List and Option modules.
- [PATCH v3 0/2] common/mlstdutils: Extend the List module.
- [PATCH v3 0/8] v2v: Move Curl wrapper to mllib and more.
- [PATCH v2 0/8] v2v: Move Curl wrapper to mllib and use it for virt-builder (and more).
- [PATCH v2 0/6] v2v: Pass CPU vendor, model and topology from source to target.