[libvirt] [PATCH] virsh: don't shorten incorrect arguments

Ján Tomko jtomko at redhat.com
Wed Apr 24 11:28:27 UTC 2013


On 04/23/2013 06:05 PM, Eric Blake wrote:
> On 04/23/2013 08:08 AM, Ján Tomko wrote:
>> https://bugzilla.redhat.com/show_bug.cgi?id=949373
>>
>> Print the whole incorrect argument as specified by the user
>> instead of the short option.
>>
> 
>>          case 'd':
>>              if (virStrToLong_i(optarg, NULL, 10, &debug) < 0) {
>> -                vshError(ctl, "%s", _("option -d takes a numeric argument"));
>> +                vshError(ctl, _("option %s takes a numeric argument"), argv[optind - 2]);
> 
> I'm not sure this gives the nicest output.  With short option bundling,
> this results in
> 
> $ tools/virsh -rd
> error: option '-rd' requires an argument
> 
> even though the -r option was just fine, and it is really just the
> bundled '-d' option that has a problem.

The output is even worse with two unrecognized options:
$ tools/virsh -pm
error: unsupported option '.../tools/.libs/virsh'. See --help.

> 
> Also, I wonder if we should be using a non-NULL 5th parameter to
> getopt_long; if you provide a longindex parameter, then you can provide
> a nicer error message that mentions the full "--debug" name (rather than
> the user-typed abbreviation '--debu') by indexing back into the
> long-option table (of course, do this only when it was a long option
> that was misused).

It seems longindex is only set when the option parsing is successful.

If we removed the ':' from optstring and let getopt handle the errors,
it would correctly translate --deb to --debug, but keep the short
options unchanged:

$ tools/virsh --deb
.../virsh: option '--debug' requires an argument
...

$ tools/virsh -rd
.../virsh: option requires an argument -- 'd'
...

Maybe we should revert commit dd71fa1 ([1]) and change the message
to something more generic, for example:
error: See virsh --help.

Jan

[1] http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=dd71fa1




More information about the libvir-list mailing list