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

Augie Fackler raf at durin42.com
Fri Sep 16 10:33:32 EDT 2016

On Fri, Sep 16, 2016 at 10:29 AM, Pierre-Yves David <
pierre-yves.david at ens-lyon.org> wrote:

>>> On 09/14/2016 05:11 AM, Augie Fackler wrote:
>>>> # HG changeset patch
>>>> # User Augie Fackler <augie at google.com>
>>>> # Date 1472584421 14400
>>>> #      Tue Aug 30 15:13:41 2016 -0400
>>>> # Node ID 828f260114a3a55e246cb5de434e75bdc782e4ad
>>>> # Parent  600be3c9acee0ec14bd19c032cc0480e4501fe8c
>>>> fancyopts: disallow true as a boolean flag default (API)
>>>> This was nonsense, as there's not been a way for the user to
>>>> un-specify the flag. Restricting this behavior will open the door to
>>>> some nice fit-and-finish functionality in a later patch, and shouldn't
>>>> break any third party extensions. This is marked as (API) since it
>>>> might break a third party extension, but given the fact that it was
>>>> silly before that's mostly a formality.
>>> I really wish we had details on this as requested in the review of the
>>> previous version. Especially because I remember that forbidding 'True' as
>>> default was making other improvement hard so I'm not sure why we have to do
>>> this.
>> Err? I'm not sure what you're asking for now, and I definitely didn't
>> understand it on the last go round.
> Okay, let me clarified, My question here is:
> Why is this problematic to have default to 'True Value'
> You refered this as """These cases are a bit problematic, because we don't
> really have a way to specify default-true flags""" in
> https://www.mercurial-scm.org/pipermail/mercurial-devel/2016
> -September/087968.html
> I'm seeing another avatar of this question when you says "Restricting this
> behavior will open the door to some nice fit-and-finish functionality in a
> later patch" in the current thread. I would like details on this "nice
> fit-and-finish" features.
> Does this clarify my question ?

Sure. The answer (which I can fold into the log message if you think it's
important) is that because of how opts make it into diffopts, we can't rely
on opts to not be filled in for a value that was unspecified on the command
line. Because of that, we need to find a backwards compatible way to thread
defaults through such that they can be identified as defaults. The easy way
out is to use None for default and False for explicitly-false.

I'm open to other solutions on the tri-state, but it's a significant piece
of work that I don't really want to take on.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20160916/a239a21c/attachment.html>

More information about the Mercurial-devel mailing list