[Libguestfs] [PATCH v3 2/2] mllib: Getopt: support hidden options

Richard W.M. Jones rjones at redhat.com
Wed Jul 13 20:35:09 UTC 2016


On Wed, Jul 13, 2016 at 04:23:52PM +0200, Pino Toscano wrote:
> Add a dummy description value to mark an option as "hidden", so it will
> not be shown in the help text.
> 
> Mark few options as hidden:
> - common: --short-options, --long-options
> - virt-sysprep: --dump-pod, --dump-pod-options
> ---
> 
> Related question: should --debug-gc be considered really internal,
> thus marked as such and removed from the documentations?

Yes.

There are also a few deprecated options around, although I can't
recall now if they are in the any of the OCaml tools.

Rich.

> 
>  mllib/getopt.ml  | 13 ++++++++++---
>  mllib/getopt.mli |  4 ++++
>  sysprep/main.ml  |  4 ++--
>  3 files changed, 16 insertions(+), 5 deletions(-)
> 
> diff --git a/mllib/getopt.ml b/mllib/getopt.ml
> index 90f4c44..550baa4 100644
> --- a/mllib/getopt.ml
> +++ b/mllib/getopt.ml
> @@ -43,6 +43,8 @@ type t = {
>    usage_msg : usage_msg;
>  }
>  
> +let hidden_option_description = ""
> +
>  external getopt_parse : string array -> (c_keys * spec * doc) array -> ?anon_fun:anon_fun -> usage_msg -> unit = "guestfs_int_mllib_getopt_parse"
>  
>  let column_wrap = 38
> @@ -56,6 +58,11 @@ let show_help h () =
>    let prologue = sprintf (f_"%s\nOptions:\n") h.usage_msg in
>    Buffer.add_string b prologue;
>  
> +  let specs = List.filter (
> +    fun (_, _, doc) ->
> +      doc <> hidden_option_description
> +  ) h.specs in
> +
>    List.iter (
>      fun (keys, spec, doc) ->
>        let columns = ref 0 in
> @@ -88,7 +95,7 @@ let show_help h () =
>        );
>        Buffer.add_string b doc;
>        Buffer.add_char b '\n';
> -  ) h.specs;
> +  ) specs;
>  
>    Buffer.output_buffer stdout b;
>    exit 0
> @@ -158,8 +165,8 @@ let create specs ?anon_fun usage_msg =
>      } in
>  
>    let specs = specs @ [
> -    [ "--short-options" ], Unit (display_short_options t), s_"List short options (internal)";
> -    [ "--long-options" ], Unit (display_long_options t), s_"List long options (internal)";
> +    [ "--short-options" ], Unit (display_short_options t), hidden_option_description;
> +    [ "--long-options" ], Unit (display_long_options t), hidden_option_description;
>    ] in
>  
>    (* Decide whether the help option can be added, and which switches use.  *)
> diff --git a/mllib/getopt.mli b/mllib/getopt.mli
> index 9d9737e..2a8bada 100644
> --- a/mllib/getopt.mli
> +++ b/mllib/getopt.mli
> @@ -47,6 +47,8 @@ type anon_fun = (string -> unit)
>  
>  type speclist = (keys * spec * doc) list
>  
> +val hidden_option_description : string
> +
>  val compare_command_line_args : string -> string -> int
>  (** Compare command line arguments for equality, ignoring any leading [-]s. *)
>  
> @@ -60,6 +62,8 @@ val create : speclist -> ?anon_fun:anon_fun -> usage_msg -> t
>      [speclist] is a list of triples [(keys, spec, doc)]: [keys] is a
>      list of options, [spec] is the associated action, and [doc] is
>      the help text.
> +    If [doc] is [Getopt.hidden_option_description], then the option
> +    is considered internal, and it is not shown in the help text.
>  
>      [anon_fun] is an optional function to handle non-option arguments;
>      not specifying one means that only options are allowed, and
> diff --git a/sysprep/main.ml b/sysprep/main.ml
> index 3259d0d..b2df880 100644
> --- a/sysprep/main.ml
> +++ b/sysprep/main.ml
> @@ -121,8 +121,8 @@ let main () =
>        [ "-c"; "--connect" ],        Getopt.Set_string (s_"uri", libvirturi),  s_"Set libvirt URI";
>        [ "-d"; "--domain" ],        Getopt.String (s_"domain", set_domain),      s_"Set libvirt guest name";
>        [ "-n"; "--dryrun"; "--dry-run" ],        Getopt.Set dryrun,            s_"Perform a dry run";
> -      [ "--dump-pod" ], Getopt.Unit dump_pod,        s_"Dump POD (internal)";
> -      [ "--dump-pod-options" ], Getopt.Unit dump_pod_options, s_"Dump POD for options (internal)";
> +      [ "--dump-pod" ], Getopt.Unit dump_pod,        Getopt.hidden_option_description;
> +      [ "--dump-pod-options" ], Getopt.Unit dump_pod_options, Getopt.hidden_option_description;
>        [ "--enable" ],  Getopt.String (s_"operations", set_enable),      s_"Enable specific operations";
>        [ "--format" ],  Getopt.String (s_"format", set_format),      s_"Set format (default: auto)";
>        [ "--list-operations" ], Getopt.Unit list_operations, s_"List supported operations";
> -- 
> 2.7.4
> 
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top




More information about the Libguestfs mailing list