mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 05:35:25 +00:00
vsh: Introduce annotation for vsh options which are unexpectedly parsed positionally
Based on the rationale in previous commit, all commands which were parsed as positional but not documented as such will be annotated with this flag. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
348010ac93
commit
d226a2cd70
12
tools/vsh.c
12
tools/vsh.c
@ -334,7 +334,8 @@ vshCmddefCheckInternals(vshControl *ctl,
|
|||||||
case VSH_OT_ARGV:
|
case VSH_OT_ARGV:
|
||||||
if (brokenPositionals == 0 ||
|
if (brokenPositionals == 0 ||
|
||||||
brokenPositionals == opt->type) {
|
brokenPositionals == opt->type) {
|
||||||
if (!(opt->flags & VSH_OFLAG_REQ_OPT) && !opt->positional)
|
if (!(opt->flags & VSH_OFLAG_REQ_OPT) &&
|
||||||
|
!(opt->positional || opt->unwanted_positional))
|
||||||
virBufferStrcat(&posbuf, opt->name, ", ", NULL);
|
virBufferStrcat(&posbuf, opt->name, ", ", NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -363,6 +364,12 @@ vshCmddefCheckInternals(vshControl *ctl,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (opt->unwanted_positional && opt->positional) {
|
||||||
|
vshError(ctl, "unwanted_positional flag of argument '%s' of command '%s' must not be used together with positional",
|
||||||
|
opt->name, cmd->name);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
switch (opt->type) {
|
switch (opt->type) {
|
||||||
case VSH_OT_NONE:
|
case VSH_OT_NONE:
|
||||||
vshError(ctl, "invalid type 'NONE' of option '%s' of command '%s'",
|
vshError(ctl, "invalid type 'NONE' of option '%s' of command '%s'",
|
||||||
@ -376,7 +383,7 @@ vshCmddefCheckInternals(vshControl *ctl,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt->positional) {
|
if (opt->positional || opt->unwanted_positional) {
|
||||||
vshError(ctl, "boolean parameter '%s' of command '%s' must not be positional",
|
vshError(ctl, "boolean parameter '%s' of command '%s' must not be positional",
|
||||||
opt->name, cmd->name);
|
opt->name, cmd->name);
|
||||||
return -1;
|
return -1;
|
||||||
@ -397,6 +404,7 @@ vshCmddefCheckInternals(vshControl *ctl,
|
|||||||
|
|
||||||
if (opt->required ||
|
if (opt->required ||
|
||||||
opt->positional ||
|
opt->positional ||
|
||||||
|
opt->unwanted_positional ||
|
||||||
opt->completer ||
|
opt->completer ||
|
||||||
opt->flags ||
|
opt->flags ||
|
||||||
!opt->help) {
|
!opt->help) {
|
||||||
|
@ -133,6 +133,13 @@ struct _vshCmdOptDef {
|
|||||||
vshCmdOptType type; /* option type */
|
vshCmdOptType type; /* option type */
|
||||||
bool required; /* option is required */
|
bool required; /* option is required */
|
||||||
bool positional; /* option is a positional option (not requiring '--optionname') */
|
bool positional; /* option is a positional option (not requiring '--optionname') */
|
||||||
|
|
||||||
|
/* Historically the command parser in virsh allowed many optional arguments
|
||||||
|
* which were documented as non-positional to be filled positionally. To
|
||||||
|
* preserve this functionality those need to be annotated with the
|
||||||
|
* 'unwanted_positional' flag. New options must not use this flag */
|
||||||
|
bool unwanted_positional;
|
||||||
|
|
||||||
unsigned int flags; /* flags */
|
unsigned int flags; /* flags */
|
||||||
const char *help; /* non-NULL help string; or for VSH_OT_ALIAS
|
const char *help; /* non-NULL help string; or for VSH_OT_ALIAS
|
||||||
* the name of a later public option */
|
* the name of a later public option */
|
||||||
|
Loading…
Reference in New Issue
Block a user