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(a)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 :|