[PATCH 2 of 7 v3 flags] fancyopts: disallow true as a boolean flag default (API)

Augie Fackler raf at durin42.com
Wed Sep 14 17:51:18 EDT 2016


> On Sep 14, 2016, at 12:37, Yuya Nishihara <yuya at tcha.org> wrote:
> 
> On Wed, 14 Sep 2016 11:52:59 -0400, Augie Fackler wrote:
>>> On Sep 14, 2016, at 11:30, Yuya Nishihara <yuya at tcha.org> wrote:
>> Is the idea something like:
>> 
>> fancyopts.py:
>> 
>> unsetbool = object()
>> 
>> in commands.py:
>> 
>> diffopts = [
>> -     ('a', 'text', None, _('treat all files as text')),
>> +     ('a', 'text', fancyopts.unsetbool, _('treat all files as text')),
>> -     ('g', 'git', None, _('use git extended diff format')),
>> +     ('g', 'git', fancyopts.unsetbool, _('use git extended diff format')),
>> -     ('', 'nodates', None, _('omit dates from diff headers'))
>> +     ('', 'nodates', fancyopts.unsetbool, _('omit dates from diff headers'))
>> ]
> 
> Yes.
> 
>> And then we could synthesize negated versions only for booleans that have
>> fancyopts.unsetbool as the default?
> 
> No. My idea is to not set 'git' at all.
> 
>  default:  {}  # not {'git': None}
>  --git:    {'git': True}
>  --no-git: {'git': False}
> 
> and falls back to ui.configbool if 'git' not in opts.
> 
> My point is diffopts are special in that their defaults are configurable. Many
> other boolean options have no such feature, so they can simply be default=None
> (or False.)

Ah, I see. I'll see about rolling a v4 that uses this approach so we can then not mangle true/false as a default.



More information about the Mercurial-devel mailing list