[libvirt] [PATCH 3/3] virsh: make 'help' command ignore spurious options

Doug Goldstein cardoe at gentoo.org
Mon Aug 13 18:53:36 UTC 2012


On Mon, Aug 13, 2012 at 9:28 AM, Cole Robinson <crobinso at redhat.com> wrote:
> Similar to the previous patch, prepending 'help' to a partial
> command string doesn't cut us any slack.
>
> $ virsh help pool-define-as --name foo --type dir
> error: command 'help' doesn't support option --name
>
> This patch adds a few hacks to make 'help' ignore everything after the
> first data bit, so the above command shows help output for pool-define-as.
> ---
>  tools/virsh.c | 13 ++++++++++---
>  1 file changed, 10 insertions(+), 3 deletions(-)
>
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 324f789..ab8d6dc 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -1219,8 +1219,10 @@ vshCmddefGetOption(vshControl *ctl, const vshCmdDef *cmd, const char *name,
>          }
>      }
>
> -    vshError(ctl, _("command '%s' doesn't support option --%s"),
> -             cmd->name, name);
> +    if (STRNEQ(cmd->name, "help")) {
> +        vshError(ctl, _("command '%s' doesn't support option --%s"),
> +                 cmd->name, name);
> +    }
>      return NULL;
>  }
>
> @@ -1987,9 +1989,12 @@ vshCommandParse(vshControl *ctl, vshCommandParser *parser)
>                      *optstr = '\0'; /* convert the '=' to '\0' */
>                      optstr = vshStrdup(ctl, optstr + 1);
>                  }
> +                /* Special case 'help' to ignore all spurious options */
>                  if (!(opt = vshCmddefGetOption(ctl, cmd, tkdata + 2,
>                                                 &opts_seen, &opt_index))) {
>                      VIR_FREE(optstr);
> +                    if (STREQ(cmd->name, "help"))
> +                        continue;
>                      goto syntaxError;
>                  }
>                  VIR_FREE(tkdata);
> @@ -2027,8 +2032,10 @@ vshCommandParse(vshControl *ctl, vshCommandParser *parser)
>                  continue;
>              } else {
>  get_data:
> +                /* Special case 'help' to ignore spurious data */
>                  if (!(opt = vshCmddefGetData(cmd, &opts_need_arg,
> -                                             &opts_seen))) {
> +                                             &opts_seen)) &&
> +                     STRNEQ(cmd->name, "help")) {
>                      vshError(ctl, _("unexpected data '%s'"), tkdata);
>                      goto syntaxError;
>                  }
> --
> 1.7.11.2
>

Worked for me when I tested it with the previous patches so ACK.


-- 
Doug Goldstein




More information about the libvir-list mailing list