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

Cole Robinson crobinso at redhat.com
Mon Aug 13 20:11:58 UTC 2012


On 08/13/2012 02:53 PM, Doug Goldstein wrote:
> 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.
> 
> 

Thanks guys, pushed now.

- Cole




More information about the libvir-list mailing list