[libvirt] [PATCH 01/10 V2] allow name for VSH_OT_ARGV options
Daniel P. Berrange
berrange at redhat.com
Mon Jun 13 22:43:59 UTC 2011
On Tue, Jun 07, 2011 at 05:11:08PM +0800, Lai Jiangshan wrote:
> A name will improve the usege, example
>
> # virsh help echo
> NAME
> echo - echo arguments
>
> SYNOPSIS
> echo [--shell] [--xml] [<string>]...
>
> DESCRIPTION
> Echo back arguments, possibly with quoting.
>
> OPTIONS
> --shell escape for shell use
> --xml escape for XML use
> <string> arguments to echo
>
> "[<string>]..." is added to SYNOPSIS.
> "<string> arguments to echo" is added to OPTIONS.
>
> Signed-off-by: Lai Jiangshan <laijs at cn.fujitsu.com>
> ---
> tools/virsh.c | 19 +++++++++++++------
> 1 files changed, 13 insertions(+), 6 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index d98be1c..61eb11e 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -126,7 +126,7 @@ typedef enum {
> VSH_OT_STRING, /* optional string option */
> VSH_OT_INT, /* optional or mandatory int option */
> VSH_OT_DATA, /* string data (as non-option) */
> - VSH_OT_ARGV /* remaining arguments, opt->name should be "" */
> + VSH_OT_ARGV /* remaining arguments */
> } vshCmdOptType;
>
> /*
> @@ -10328,7 +10328,7 @@ static const vshCmdInfo info_echo[] = {
> static const vshCmdOptDef opts_echo[] = {
> {"shell", VSH_OT_BOOL, 0, N_("escape for shell use")},
> {"xml", VSH_OT_BOOL, 0, N_("escape for XML use")},
> - {"", VSH_OT_ARGV, 0, N_("arguments to echo")},
> + {"string", VSH_OT_ARGV, 0, N_("arguments to echo")},
> {NULL, 0, 0, NULL}
> };
>
> @@ -11379,6 +11379,11 @@ vshCmddefGetOption(vshControl *ctl, const vshCmdDef *cmd, const char *name,
> vshError(ctl, _("option --%s already seen"), name);
> return NULL;
> }
> + if (opt->type == VSH_OT_ARGV) {
> + vshError(ctl, _("variable argument <%s> "
> + "should not be used with --<%s>"), name, name);
> + return NULL;
> + }
> *opts_seen |= 1 << i;
> return opt;
> }
> @@ -11427,7 +11432,7 @@ vshCommandCheckOpts(vshControl *ctl, const vshCmd *cmd, uint32_t opts_required,
> const vshCmdOptDef *opt = &def->opts[i];
>
> vshError(ctl,
> - opt->type == VSH_OT_DATA ?
> + opt->type == VSH_OT_DATA || opt->type == VSH_OT_ARGV ?
> _("command '%s' requires <%s> option") :
> _("command '%s' requires --%s option"),
> def->name, opt->name);
> @@ -11535,7 +11540,8 @@ vshCmddefHelp(vshControl *ctl, const char *cmdname)
> break;
> case VSH_OT_ARGV:
> /* xgettext:c-format */
> - fmt = _("[<string>]...");
> + fmt = (opt->flag & VSH_OFLAG_REQ) ? _("<%s>...")
> + : _("[<%s>]...");
> break;
> default:
> assert(0);
> @@ -11575,7 +11581,8 @@ vshCmddefHelp(vshControl *ctl, const char *cmdname)
> break;
> case VSH_OT_ARGV:
> /* Not really an option. */
> - continue;
> + snprintf(buf, sizeof(buf), _("<%s>"), opt->name);
> + break;
> default:
> assert(0);
> }
> @@ -13012,7 +13019,7 @@ vshReadlineOptionsGenerator(const char *text, int state)
>
> list_index++;
>
> - if (opt->type == VSH_OT_DATA)
> + if (opt->type == VSH_OT_DATA || opt->type == VSH_OT_ARGV)
> /* ignore non --option */
> continue;
ACK
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list