[libvirt] [PATCH v3 6/8] virt-admin: Tweak command parsing logic so that aliases point to new commands
Ján Tomko
jtomko at redhat.com
Fri Sep 16 12:10:08 UTC 2016
On Fri, Sep 16, 2016 at 12:50:43PM +0200, Erik Skultety wrote:
>Change the logic in a way, so that VSH_CMD_FLAG_ALIAS behaves similarly to
>how VSH_OT_ALIAS for command options, i.e. there is no need for code duplication
>for the alias and the aliased command structures. Along with that change,
>switch any existing VSH_CMD_FLAG_ALIAS occurrences to this new format. Also,
>since this patch introduces a new command structure element, adjust the
>virsh-self-test test to make sure we won't ever miss to specify the '.alias'
>member for an aliased command because doing that would lead to an internal
>error.
>
>Signed-off-by: Erik Skultety <eskultet at redhat.com>
>---
> tools/virsh-nodedev.c | 6 ++----
> tools/virsh.pod | 2 --
> tools/vsh.c | 15 +++++++++++++--
> tools/vsh.h | 4 +++-
> 4 files changed, 18 insertions(+), 9 deletions(-)
>
>diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c
>index 321f15c..9446664 100644
>--- a/tools/virsh-nodedev.c
>+++ b/tools/virsh-nodedev.c
>@@ -986,10 +986,8 @@ const vshCmdDef nodedevCmds[] = {
> .flags = 0
> },
> {.name = "nodedev-dettach",
>- .handler = cmdNodeDeviceDetach,
>- .opts = opts_node_device_detach,
>- .info = info_node_device_detach,
>- .flags = VSH_CMD_FLAG_ALIAS
>+ .flags = VSH_CMD_FLAG_ALIAS,
>+ .alias = "nodedev-detach"
> },
> {.name = "nodedev-dumpxml",
> .handler = cmdNodeDeviceDumpXML,
>diff --git a/tools/virsh.pod b/tools/virsh.pod
>index 3da7879..49abda9 100644
>--- a/tools/virsh.pod
>+++ b/tools/virsh.pod
>@@ -2936,8 +2936,6 @@ make that device unusable by the rest of the physical host until a reboot.
> Detach I<nodedev> from the host, so that it can safely be used by
> guests via <hostdev> passthrough. This is reversed with
> B<nodedev-reattach>, and is done automatically for managed devices.
>-For compatibility purposes, this command can also be spelled
>-B<nodedev-dettach>.
>
> Different backend drivers expect the device to be bound to different
> dummy devices. For example, QEMU's "kvm" backend driver (the default)
This man page change is unrelated to the logic change and would fit
better in a separate commit.
>diff --git a/tools/vsh.c b/tools/vsh.c
>index a66e2f9..88a6f37 100644
>--- a/tools/vsh.c
>+++ b/tools/vsh.c
>@@ -329,6 +329,9 @@ vshCmddefCheckInternals(const vshCmdDef *cmd)
> {
> size_t i;
>
>+ if (cmd->flags & VSH_CMD_FLAG_ALIAS && !cmd->alias)
>+ return -1;
>+
> if (!cmd->opts)
> return 0;
>
>@@ -1408,6 +1411,13 @@ vshCommandParse(vshControl *ctl, vshCommandParser *parser)
> vshError(ctl, _("unknown command: '%s'"), tkdata);
> goto syntaxError; /* ... or ignore this command only? */
> }
>+
>+ /* aliases need to be resolved to the actual commands */
>+ if (cmd->flags & VSH_CMD_FLAG_ALIAS) {
>+ VIR_FREE(tkdata);
>+ tkdata = vshStrdup(ctl, cmd->alias);
>+ cmd = vshCmddefSearch(tkdata);
>+ }
There is a call to vshCmddefSearch in vshReadlineParse which also seems
to need to resolve the alias.
ACK with that fixed.
Without it, the behavior is a bit unexpected:
virsh # nodedev-det
nodedev-detach nodedev-dettach
But the options are only offered for nodedev-detach, not the alias.
Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 801 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20160916/e50a8e2b/attachment-0001.sig>
More information about the libvir-list
mailing list