1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

allow name for VSH_OT_ARGV options

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@cn.fujitsu.com>
This commit is contained in:
Lai Jiangshan 2011-06-07 17:11:08 +08:00 committed by Eric Blake
parent a2d401d3ba
commit 6cf77ca7bf

View File

@ -126,7 +126,7 @@ typedef enum {
VSH_OT_STRING, /* optional string option */ VSH_OT_STRING, /* optional string option */
VSH_OT_INT, /* optional or mandatory int option */ VSH_OT_INT, /* optional or mandatory int option */
VSH_OT_DATA, /* string data (as non-option) */ VSH_OT_DATA, /* string data (as non-option) */
VSH_OT_ARGV /* remaining arguments, opt->name should be "" */ VSH_OT_ARGV /* remaining arguments */
} vshCmdOptType; } vshCmdOptType;
/* /*
@ -10426,7 +10426,7 @@ static const vshCmdInfo info_echo[] = {
static const vshCmdOptDef opts_echo[] = { static const vshCmdOptDef opts_echo[] = {
{"shell", VSH_OT_BOOL, 0, N_("escape for shell use")}, {"shell", VSH_OT_BOOL, 0, N_("escape for shell use")},
{"xml", VSH_OT_BOOL, 0, N_("escape for XML 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} {NULL, 0, 0, NULL}
}; };
@ -11479,6 +11479,11 @@ vshCmddefGetOption(vshControl *ctl, const vshCmdDef *cmd, const char *name,
vshError(ctl, _("option --%s already seen"), name); vshError(ctl, _("option --%s already seen"), name);
return NULL; 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; *opts_seen |= 1 << i;
return opt; return opt;
} }
@ -11527,7 +11532,7 @@ vshCommandCheckOpts(vshControl *ctl, const vshCmd *cmd, uint32_t opts_required,
const vshCmdOptDef *opt = &def->opts[i]; const vshCmdOptDef *opt = &def->opts[i];
vshError(ctl, 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") :
_("command '%s' requires --%s option"), _("command '%s' requires --%s option"),
def->name, opt->name); def->name, opt->name);
@ -11635,7 +11640,8 @@ vshCmddefHelp(vshControl *ctl, const char *cmdname)
break; break;
case VSH_OT_ARGV: case VSH_OT_ARGV:
/* xgettext:c-format */ /* xgettext:c-format */
fmt = _("[<string>]..."); fmt = (opt->flag & VSH_OFLAG_REQ) ? _("<%s>...")
: _("[<%s>]...");
break; break;
default: default:
assert(0); assert(0);
@ -11675,7 +11681,8 @@ vshCmddefHelp(vshControl *ctl, const char *cmdname)
break; break;
case VSH_OT_ARGV: case VSH_OT_ARGV:
/* Not really an option. */ /* Not really an option. */
continue; snprintf(buf, sizeof(buf), _("<%s>"), opt->name);
break;
default: default:
assert(0); assert(0);
} }
@ -13112,7 +13119,7 @@ vshReadlineOptionsGenerator(const char *text, int state)
list_index++; list_index++;
if (opt->type == VSH_OT_DATA) if (opt->type == VSH_OT_DATA || opt->type == VSH_OT_ARGV)
/* ignore non --option */ /* ignore non --option */
continue; continue;