Re: [PATH/RFC] parse-options: report invalid UTF-8 switches
- From
Erik Faye-Lund <kusmabite@gmail.com>
- Date
- Feb 11, 2013, 17:21 UTC
- Message-ID
- <CABPQNSYtvXED_uj6m02N1-RWEdz3iMUUXUaNZquzy8GqQ2BnLw@mail.gmail.com>
- In-Reply-To
- <20130211171957.GG16402@sigill.intra.peff.net>
On Mon, Feb 11, 2013 at 6:19 PM, Jeff King <peff@peff.net> wrote:
Show 31 quoted lines
> On Mon, Feb 11, 2013 at 09:07:53AM -0800, Junio C Hamano wrote:
>
>> Erik Faye-Lund <kusmabite@gmail.com> writes:
>>
>> > However, since git only looks at one byte at the time for
>> > short-options, it ends up reporting a partial UTF-8 sequence
>> > in such cases, leading to corruption of the output.
>>
>> Isn't it a workable, easier and more robust alternative to punt and
>> use the entire ctx.argv[0] as unrecognized?
>
> Yes, but it regresses the usability:
>
> [before]
> $ git foobar -qrxs
> unknown switch: x
>
> [after]
> $ git foobar -qrxs
> unknown switch: -qrxs
>
> One is much more informative than the other, and you are punishing the
> common ascii case for the extremely uncommon case of utf-8. Maybe:
>
> if (isascii(*ctx.opt))
> error("unknown option `%c'", *ctx.opt);
> else
> error("unknown multi-byte short option in string: `%s'", ctx.argv[0]);
>
> which only kicks in in the uncommon case (and extends the error message
> to make it more clear why we are showing the whole string).Yes. This is IMO a much better approach, and it doesn't involve trying to figure out what encoding the string is. Thanks!