Pino Toscano
2018-Aug-20 15:29 UTC
[Libguestfs] [PATCH 1/2] mlstdutils/mltools: factorize the machine-readable option
Store the machine-readable flag globally, just like done for verbose/debug/etc, and enhance create_standard_options to provide --machine-readable automatically. --- common/mlstdutils/std_utils.ml | 4 ++++ common/mlstdutils/std_utils.mli | 7 +++++-- common/mltools/tools_utils.ml | 7 ++++++- common/mltools/tools_utils.mli | 5 ++++- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/common/mlstdutils/std_utils.ml b/common/mlstdutils/std_utils.ml index df443058f..6499b3535 100644 --- a/common/mlstdutils/std_utils.ml +++ b/common/mlstdutils/std_utils.ml @@ -645,6 +645,10 @@ let verbose = ref false let set_verbose () = verbose := true let verbose () = !verbose +let machine_readable = ref false +let set_machine_readable () = machine_readable := true +let machine_readable () = !machine_readable + let with_open_in filename f let chan = open_in filename in protect ~f:(fun () -> f chan) ~finally:(fun () -> close_in chan) diff --git a/common/mlstdutils/std_utils.mli b/common/mlstdutils/std_utils.mli index c887249a5..cb72fef7d 100644 --- a/common/mlstdutils/std_utils.mli +++ b/common/mlstdutils/std_utils.mli @@ -374,8 +374,11 @@ val set_trace : unit -> unit val trace : unit -> bool val set_verbose : unit -> unit val verbose : unit -> bool -(** Stores the colours ([--colours]), quiet ([--quiet]), trace ([-x]) - and verbose ([-v]) flags in global variables. *) +val set_machine_readable : unit -> unit +val machine_readable : unit -> bool +(** Stores the colours ([--colours]), quiet ([--quiet]), trace ([-x]), + verbose ([-v]), and machine readable ([--machine-readable]) flags + in global variables. *) val with_open_in : string -> (in_channel -> 'a) -> 'a (** [with_open_in filename f] calls function [f] with [filename] diff --git a/common/mltools/tools_utils.ml b/common/mltools/tools_utils.ml index 09f1bb544..04916b89a 100644 --- a/common/mltools/tools_utils.ml +++ b/common/mltools/tools_utils.ml @@ -229,7 +229,7 @@ let human_size i ) ) -let create_standard_options argspec ?anon_fun ?(key_opts = false) usage_msg +let create_standard_options argspec ?anon_fun ?(key_opts = false) ?(machine_readable = false) usage_msg (** Install an exit hook to check gc consistency for --debug-gc *) let set_debug_gc () at_exit (fun () -> Gc.compact()) in @@ -249,6 +249,11 @@ let create_standard_options argspec ?anon_fun ?(key_opts = false) usage_msg [ L"echo-keys" ], Getopt.Unit c_set_echo_keys, s_"Don’t turn off echo for passphrases"; [ L"keys-from-stdin" ], Getopt.Unit c_set_keys_from_stdin, s_"Read passphrases from stdin"; ] + else []) @ + (if machine_readable then + [ + [ L"machine-readable" ], Getopt.Unit set_machine_readable, s_"Make output machine readable"; + ] else []) in Getopt.create argspec ?anon_fun usage_msg diff --git a/common/mltools/tools_utils.mli b/common/mltools/tools_utils.mli index dac6b4120..44fd20be3 100644 --- a/common/mltools/tools_utils.mli +++ b/common/mltools/tools_utils.mli @@ -64,13 +64,16 @@ val parse_resize : int64 -> string -> int64 val human_size : int64 -> string (** Converts a size in bytes to a human-readable string. *) -val create_standard_options : Getopt.speclist -> ?anon_fun:Getopt.anon_fun -> ?key_opts:bool -> Getopt.usage_msg -> Getopt.t +val create_standard_options : Getopt.speclist -> ?anon_fun:Getopt.anon_fun -> ?key_opts:bool -> ?machine_readable:bool -> Getopt.usage_msg -> Getopt.t (** Adds the standard libguestfs command line options to the specified ones, sorting them, and setting [long_options] to them. [key_opts] specifies whether add the standard options related to keys management, i.e. [--echo-keys] and [--keys-from-stdin]. + [machine_readable] specifies whether add the [--machine-readable] + option. + Returns a new [Getopt.t] handle. *) val external_command : ?echo_cmd:bool -> string -> string list -- 2.17.1
Pino Toscano
2018-Aug-20 15:29 UTC
[Libguestfs] [PATCH 2/2] OCaml tools: simplify machine-readable handling
Make use of the helper provided by Tools_utils.create_standard_options, so there is no need to implement the logic in each tool. This affects all the OCaml tools with --machine-readable, namely: virt-builder, virt-builder-repository, virt-dib, virt-get-kernel, virt-resize, virt-sparsify, and virt-v2v. --- builder/cmdline.ml | 8 ++------ builder/repository_main.ml | 6 ++---- dib/cmdline.ml | 8 ++------ get-kernel/get_kernel.ml | 6 ++---- resize/resize.ml | 15 ++++++--------- sparsify/cmdline.ml | 9 ++------- sparsify/cmdline.mli | 1 - sparsify/copying.ml | 4 ++-- sparsify/copying.mli | 2 +- sparsify/in_place.ml | 4 ++-- sparsify/in_place.mli | 2 +- sparsify/sparsify.ml | 6 ++---- v2v/cmdline.ml | 8 ++------ 13 files changed, 26 insertions(+), 53 deletions(-) diff --git a/builder/cmdline.ml b/builder/cmdline.ml index fa8a83d3e..9c854ed49 100644 --- a/builder/cmdline.ml +++ b/builder/cmdline.ml @@ -104,8 +104,6 @@ let parse_cmdline () * Getopt handling of Symbol. *) list_format := List_entries.list_format_of_string arg in - let machine_readable = ref false in - let memsize = ref None in let set_memsize arg = memsize := Some arg in @@ -155,7 +153,6 @@ let parse_cmdline () [ L"long" ], Getopt.Unit list_set_long, s_"Shortcut for --list-format long"; [ L"list-format" ], Getopt.Symbol (formats_string, formats, list_set_format), s_"Set the format for --list (default: short)"; - [ L"machine-readable" ], Getopt.Set machine_readable, s_"Make output machine readable"; [ S 'm'; L"memsize" ], Getopt.Int ("mb", set_memsize), s_"Set memory size"; [ L"network" ], Getopt.Set network, s_"Enable appliance network (default)"; [ L"no-network" ], Getopt.Clear network, s_"Disable appliance network"; @@ -193,7 +190,7 @@ A short summary of the options is given below. For detailed help please read the man page virt-builder(1). ") prog in - let opthandle = create_standard_options argspec ~anon_fun usage_msg in + let opthandle = create_standard_options argspec ~anon_fun ~machine_readable:true usage_msg in Getopt.parse opthandle; (* Dereference options. *) @@ -209,7 +206,6 @@ read the man page virt-builder(1). let format = match !format with "" -> None | s -> Some s in let gpg = !gpg in let list_format = !list_format in - let machine_readable = !machine_readable in let memsize = !memsize in let network = !network in let ops = get_customize_ops () in @@ -221,7 +217,7 @@ read the man page virt-builder(1). let warn_if_partition = !warn_if_partition in (* No arguments and machine-readable mode? Print some facts. *) - if args = [] && machine_readable then ( + if args = [] && machine_readable () then ( printf "virt-builder\n"; printf "arch\n"; printf "config-file\n"; diff --git a/builder/repository_main.ml b/builder/repository_main.ml index 5dc4d57cd..0b2b917f4 100644 --- a/builder/repository_main.ml +++ b/builder/repository_main.ml @@ -47,7 +47,6 @@ let parse_cmdline () let interactive = ref false in let compression = ref true in - let machine_readable = ref false in let argspec = [ [ L"gpg" ], Getopt.Set_string ("gpg", gpg), s_"Set GPG binary/command"; @@ -55,7 +54,6 @@ let parse_cmdline () s_"ID of the GPG key to sign the repo with"; [ S 'i'; L"interactive" ], Getopt.Set interactive, s_"Ask the user about missing data"; [ L"no-compression" ], Getopt.Clear compression, s_"Don’t compress the new images in the index"; - [ L"machine-readable" ], Getopt.Set machine_readable, s_"Make output machine readable"; ] in let args = ref [] in @@ -70,13 +68,13 @@ A short summary of the options is given below. For detailed help please read the man page virt-builder-repository(1). ") prog in - let opthandle = create_standard_options argspec ~anon_fun usage_msg in + let opthandle = create_standard_options argspec ~anon_fun ~machine_readable:true usage_msg in Getopt.parse opthandle; (* Machine-readable mode? Print out some facts about what * this binary supports. *) - if !machine_readable then ( + if machine_readable () then ( printf "virt-builder-repository\n"; exit 0 ); diff --git a/dib/cmdline.ml b/dib/cmdline.ml index d013a181e..f5e8ec9cb 100644 --- a/dib/cmdline.ml +++ b/dib/cmdline.ml @@ -145,8 +145,6 @@ read the man page virt-dib(1). let mkfs_options = ref None in let set_mkfs_options arg = mkfs_options := Some arg in - let machine_readable = ref false in - let extra_packages = ref [] in let append_extra_packages arg List.push_front_list (List.rev (String.nsplit "," arg)) extra_packages in @@ -191,14 +189,13 @@ read the man page virt-dib(1). [ L"smp" ], Getopt.Int ("vcpus", set_smp), s_"Set number of vCPUs"; [ L"no-delete-on-failure" ], Getopt.Clear delete_on_failure, s_"Don’t delete output file on failure"; - [ L"machine-readable" ], Getopt.Set machine_readable, s_"Make output machine readable"; [ L"debug" ], Getopt.Int ("level", set_debug), s_"Set debug level"; [ S 'B' ], Getopt.Set_string ("path", basepath), s_"Base path of diskimage-builder library"; ] in let argspec = argspec @ Output_format.extra_args () in - let opthandle = create_standard_options argspec ~anon_fun:append_element usage_msg in + let opthandle = create_standard_options argspec ~anon_fun:append_element ~machine_readable:true usage_msg in Getopt.parse opthandle; let debug = !debug in @@ -226,13 +223,12 @@ read the man page virt-dib(1). let is_ramdisk = !is_ramdisk in let ramdisk_element = !ramdisk_element in let mkfs_options = !mkfs_options in - let machine_readable = !machine_readable in let extra_packages = List.rev !extra_packages in let checksum = !checksum in let python = !python in (* No elements and machine-readable mode? Print some facts. *) - if elements = [] && machine_readable then ( + if elements = [] && machine_readable () then ( printf "virt-dib\n"; let formats_list = Output_format.list_formats () in List.iter (printf "output:%s\n") formats_list; diff --git a/get-kernel/get_kernel.ml b/get-kernel/get_kernel.ml index fca8a06db..f2949da89 100644 --- a/get-kernel/get_kernel.ml +++ b/get-kernel/get_kernel.ml @@ -31,7 +31,6 @@ let parse_cmdline () let libvirturi = ref "" in let format = ref "auto" in let output = ref "" in - let machine_readable = ref false in let unversioned = ref false in let prefix = ref None in @@ -57,7 +56,6 @@ let parse_cmdline () [ S 'c'; L"connect" ], Getopt.Set_string (s_"uri", libvirturi), s_"Set libvirt URI"; [ S 'd'; L"domain" ], Getopt.String (s_"domain", set_domain), s_"Set libvirt guest name"; [ L"format" ], Getopt.Set_string (s_"format", format), s_"Format of input disk"; - [ L"machine-readable" ], Getopt.Set machine_readable, s_"Make output machine readable"; [ S 'o'; L"output" ], Getopt.Set_string (s_"directory", output), s_"Output directory"; [ L"unversioned-names" ], Getopt.Set unversioned, s_"Use unversioned names for files"; @@ -71,13 +69,13 @@ A short summary of the options is given below. For detailed help please read the man page virt-get-kernel(1). ") prog in - let opthandle = create_standard_options argspec ~key_opts:true usage_msg in + let opthandle = create_standard_options argspec ~key_opts:true ~machine_readable:true usage_msg in Getopt.parse opthandle; (* Machine-readable mode? Print out some facts about what * this binary supports. *) - if !machine_readable then ( + if machine_readable () then ( printf "virt-get-kernel\n"; exit 0 ); diff --git a/resize/resize.ml b/resize/resize.ml index 174f1c699..9d2fdaf40 100644 --- a/resize/resize.ml +++ b/resize/resize.ml @@ -157,7 +157,7 @@ let main () let infile, outfile, align_first, alignment, copy_boot_loader, deletes, dryrun, expand, expand_content, extra_partition, format, ignores, - lv_expands, machine_readable, ntfsresize_force, output_format, + lv_expands, ntfsresize_force, output_format, resizes, resizes_force, shrink, sparse, unknown_fs_mode let add xs s = List.push_front s xs in @@ -178,7 +178,6 @@ let main () let format = ref "" in let ignores = ref [] in let lv_expands = ref [] in - let machine_readable = ref false in let ntfsresize_force = ref false in let output_format = ref "" in let resizes = ref [] in @@ -204,7 +203,6 @@ let main () [ L"format" ], Getopt.Set_string (s_"format", format), s_"Format of input disk"; [ L"ignore" ], Getopt.String (s_"part", add ignores), s_"Ignore partition"; [ L"lv-expand"; L"LV-expand"; L"lvexpand"; L"LVexpand" ], Getopt.String (s_"lv", add lv_expands), s_"Expand logical volume"; - [ L"machine-readable" ], Getopt.Set machine_readable, s_"Make output machine readable"; [ S 'n'; L"dry-run"; L"dryrun" ], Getopt.Set dryrun, s_"Don’t perform changes"; [ L"ntfsresize-force" ], Getopt.Set ntfsresize_force, s_"Force ntfsresize"; [ L"output-format" ], Getopt.Set_string (s_"format", output_format), s_"Format of output disk"; @@ -225,7 +223,7 @@ A short summary of the options is given below. For detailed help please read the man page virt-resize(1). ") prog in - let opthandle = create_standard_options argspec ~anon_fun usage_msg in + let opthandle = create_standard_options argspec ~anon_fun ~machine_readable:true usage_msg in Getopt.parse opthandle; if verbose () then ( @@ -245,7 +243,6 @@ read the man page virt-resize(1). let format = match !format with "" -> None | str -> Some str in let ignores = List.rev !ignores in let lv_expands = List.rev !lv_expands in - let machine_readable = !machine_readable in let ntfsresize_force = !ntfsresize_force in let output_format = match !output_format with "" -> None | str -> Some str in let resizes = List.rev !resizes in @@ -279,7 +276,7 @@ read the man page virt-resize(1). * things added since this option, or things which depend on features * of the appliance. *) - if !disks = [] && machine_readable then ( + if !disks = [] && machine_readable () then ( printf "virt-resize\n"; printf "ntfsresize-force\n"; printf "32bitok\n"; @@ -331,7 +328,7 @@ read the man page virt-resize(1). infile, outfile, align_first, alignment, copy_boot_loader, deletes, dryrun, expand, expand_content, extra_partition, format, ignores, - lv_expands, machine_readable, ntfsresize_force, output_format, + lv_expands, ntfsresize_force, output_format, resizes, resizes_force, shrink, sparse, unknown_fs_mode in (* Default to true, since NTFS/btrfs/XFS/f2fs support are usually available. *) @@ -356,7 +353,7 @@ read the man page virt-resize(1). (* The output disk is being created, so use cache=unsafe here. *) add_drive_uri g ?format:output_format ~readonly:false ~cachemode:"unsafe" (snd outfile); - if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable g; + if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable:(machine_readable ()) g; g#launch (); (* Set the filter to /dev/sda, in case there are any rogue @@ -1334,7 +1331,7 @@ read the man page virt-resize(1). (* The output disk is being created, so use cache=unsafe here. *) add_drive_uri g ?format:output_format ~readonly:false ~cachemode:"unsafe" (snd outfile); - if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable g; + if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable:(machine_readable ()) g; g#launch (); g (* Return new handle. *) diff --git a/sparsify/cmdline.ml b/sparsify/cmdline.ml index 3e21428c2..b0af053ac 100644 --- a/sparsify/cmdline.ml +++ b/sparsify/cmdline.ml @@ -31,7 +31,6 @@ type cmdline = { indisk : string; format : string option; ignores : string list; - machine_readable : bool; zeroes : string list; mode : mode_t; } @@ -60,7 +59,6 @@ let parse_cmdline () let format = ref "" in let ignores = ref [] in let in_place = ref false in - let machine_readable = ref false in let option = ref "" in let tmp = ref "" in let zeroes = ref [] in @@ -72,7 +70,6 @@ let parse_cmdline () [ L"format" ], Getopt.Set_string (s_"format", format), s_"Format of input disk"; [ L"ignore" ], Getopt.String (s_"fs", add ignores), s_"Ignore filesystem"; [ L"in-place"; L"inplace" ], Getopt.Set in_place, s_"Modify the disk image in-place"; - [ L"machine-readable" ], Getopt.Set machine_readable, s_"Make output machine readable"; [ S 'o' ], Getopt.Set_string (s_"option", option), s_"Add qemu-img options"; [ L"tmp" ], Getopt.Set_string (s_"block|dir|prebuilt:file", tmp), s_"Set temporary block device, directory or prebuilt file"; [ L"zero" ], Getopt.String (s_"fs", add zeroes), s_"Zero filesystem"; @@ -91,7 +88,7 @@ A short summary of the options is given below. For detailed help please read the man page virt-sparsify(1). ") prog in - let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true usage_msg in + let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in Getopt.parse opthandle; (* Dereference the rest of the args. *) @@ -102,7 +99,6 @@ read the man page virt-sparsify(1). let format = match !format with "" -> None | str -> Some str in let ignores = List.rev !ignores in let in_place = !in_place in - let machine_readable = !machine_readable in let option = match !option with "" -> None | str -> Some str in let tmp = match !tmp with "" -> None | str -> Some str in let zeroes = List.rev !zeroes in @@ -110,7 +106,7 @@ read the man page virt-sparsify(1). (* No arguments and machine-readable mode? Print out some facts * about what this binary supports. *) - if disks = [] && machine_readable then ( + if disks = [] && machine_readable () then ( printf "virt-sparsify\n"; printf "linux-swap\n"; printf "zero\n"; @@ -180,7 +176,6 @@ read the man page virt-sparsify(1). { indisk = indisk; format = format; ignores = ignores; - machine_readable = machine_readable; zeroes = zeroes; mode = mode; } diff --git a/sparsify/cmdline.mli b/sparsify/cmdline.mli index fabc669a6..89848df8b 100644 --- a/sparsify/cmdline.mli +++ b/sparsify/cmdline.mli @@ -22,7 +22,6 @@ type cmdline = { indisk : string; format : string option; ignores : string list; - machine_readable : bool; zeroes : string list; mode : mode_t; } diff --git a/sparsify/copying.ml b/sparsify/copying.ml index 8c8924241..a4bfcaa2a 100644 --- a/sparsify/copying.ml +++ b/sparsify/copying.ml @@ -37,7 +37,7 @@ type tmp_place | Directory of string | Block_device of string | Prebuilt_file of string let run indisk outdisk check_tmpdir compress convert - format ignores machine_readable option tmp_param zeroes + format ignores option tmp_param zeroes (* Once we have got past argument parsing and start to create * temporary files (including the potentially massive overlay file), we @@ -179,7 +179,7 @@ You can ignore this warning or change it to a hard failure using the (* Note that the temporary overlay disk is always qcow2 format. *) g#add_drive ~format:"qcow2" ~readonly:false ~cachemode:"unsafe" overlaydisk; - if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable g; + if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable:(machine_readable ()) g; g#launch (); g in diff --git a/sparsify/copying.mli b/sparsify/copying.mli index fae903d3e..50605cc71 100644 --- a/sparsify/copying.mli +++ b/sparsify/copying.mli @@ -22,4 +22,4 @@ type tmp_place | Directory of string | Block_device of string | Prebuilt_file of string -val run : string -> string -> Cmdline.check_t -> bool -> string option -> string option -> string list -> bool -> string option -> string option -> string list -> unit +val run : string -> string -> Cmdline.check_t -> bool -> string option -> string option -> string list -> string option -> string option -> string list -> unit diff --git a/sparsify/in_place.ml b/sparsify/in_place.ml index 5b7c950d0..7be8ee3e1 100644 --- a/sparsify/in_place.ml +++ b/sparsify/in_place.ml @@ -30,7 +30,7 @@ open Cmdline module G = Guestfs -let run disk format ignores machine_readable zeroes +let run disk format ignores zeroes (* Connect to libguestfs. *) let g = open_guestfs () in @@ -49,7 +49,7 @@ let run disk format ignores machine_readable zeroes g#add_drive ?format ~discard:"enable" disk; - if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable g; + if not (quiet ()) then Progress.set_up_progress_bar ~machine_readable:(machine_readable ()) g; g#launch (); (* If discard is not supported in the appliance, we must return exit diff --git a/sparsify/in_place.mli b/sparsify/in_place.mli index 42322858a..8f59ea1be 100644 --- a/sparsify/in_place.mli +++ b/sparsify/in_place.mli @@ -18,4 +18,4 @@ (** This is the virt-sparsify --in-place mode. *) -val run : string -> string option -> string list -> bool -> string list -> unit +val run : string -> string option -> string list -> string list -> unit diff --git a/sparsify/sparsify.ml b/sparsify/sparsify.ml index eeda5bc98..9658b4175 100644 --- a/sparsify/sparsify.ml +++ b/sparsify/sparsify.ml @@ -35,11 +35,9 @@ let rec main () (match cmdline.mode with | Mode_copying (outdisk, check_tmpdir, compress, convert, option, tmp) -> Copying.run cmdline.indisk outdisk check_tmpdir compress convert - cmdline.format cmdline.ignores cmdline.machine_readable - option tmp cmdline.zeroes + cmdline.format cmdline.ignores option tmp cmdline.zeroes | Mode_in_place -> - In_place.run cmdline.indisk cmdline.format cmdline.ignores - cmdline.machine_readable cmdline.zeroes + In_place.run cmdline.indisk cmdline.format cmdline.ignores cmdline.zeroes ) let () = run_main_and_handle_errors main diff --git a/v2v/cmdline.ml b/v2v/cmdline.ml index 5b2df3555..10cbb90e6 100644 --- a/v2v/cmdline.ml +++ b/v2v/cmdline.ml @@ -48,7 +48,6 @@ let parse_cmdline () let compressed = ref false in let debug_overlays = ref false in let do_copy = ref true in - let machine_readable = ref false in let print_source = ref false in let qemu_boot = ref false in @@ -209,8 +208,6 @@ let parse_cmdline () s_"Only tune the guest in the input VM"; [ L"mac" ], Getopt.String ("mac:network|bridge:out", add_mac), s_"Map NIC to network or bridge"; - [ L"machine-readable" ], Getopt.Set machine_readable, - s_"Make output machine readable"; [ S 'n'; L"network" ], Getopt.String ("in:out", add_network), s_"Map network ‘in’ to ‘out’"; [ L"no-copy" ], Getopt.Clear do_copy, @@ -297,7 +294,7 @@ A short summary of the options is given below. For detailed help please read the man page virt-v2v(1). ") prog in - let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true usage_msg in + let opthandle = create_standard_options argspec ~anon_fun ~key_opts:true ~machine_readable:true usage_msg in Getopt.parse opthandle; (* Dereference the arguments. *) @@ -318,7 +315,6 @@ read the man page virt-v2v(1). | Some transport -> error (f_"unknown input transport ‘-it %s’") transport in let in_place = !in_place in - let machine_readable = !machine_readable in let output_alloc match !output_alloc with | `Not_set | `Sparse -> Sparse @@ -337,7 +333,7 @@ read the man page virt-v2v(1). (* No arguments and machine-readable mode? Print out some facts * about what this binary supports. *) - if args = [] && machine_readable then ( + if args = [] && machine_readable () then ( printf "virt-v2v\n"; printf "libguestfs-rewrite\n"; printf "vcenter-https\n"; -- 2.17.1
Richard W.M. Jones
2018-Aug-20 17:03 UTC
Re: [Libguestfs] [PATCH 2/2] OCaml tools: simplify machine-readable handling
Looks like just a simple refactoring, so ACK series. 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
Maybe Matching Threads
- [PATCH 0/2] RFC: --key option for tools
- [PATCH 0/3] add crypto/LUKS support in some OCaml-based tools
- [PATCH v2 0/2] add output selection for --machine-readable
- [PATCH 0/2] RFC: add output selection for --machine-readable
- [PATCH v2 0/3] mllib: Various fixes and changes to Getopt module.