[PATCH 2 of 3 v4] diffopts: notice a negated boolean flag in diffopts

Yuya Nishihara yuya at tcha.org
Sat Sep 17 03:53:24 EDT 2016


On Fri, 16 Sep 2016 11:15:02 -0400, Augie Fackler wrote:
> # HG changeset patch
> # User Augie Fackler <augie at google.com>
> # Date 1472586907 14400
> #      Tue Aug 30 15:55:07 2016 -0400
> # Node ID aea18fa52d954e234fdfd1d24d3f37f0cb03dc60
> # Parent  cb57a762749f29065635d0480bf5c87c644ba0c5
> diffopts: notice a negated boolean flag in diffopts

Also queued this, thanks.

> I feel a little bad about the isinstance() check, but some values in
> diffopts are not booleans and so we need to preserve false iff the
> flag is a boolean flag: failing to do this means we end up with empty
> string defaults for flags clobbering meaningful values from the [diff]
> section in hgrc.
> 
> diff --git a/mercurial/patch.py b/mercurial/patch.py
> --- a/mercurial/patch.py
> +++ b/mercurial/patch.py
> @@ -2144,7 +2144,14 @@ def difffeatureopts(ui, opts=None, untru
>      def get(key, name=None, getter=ui.configbool, forceplain=None):
>          if opts:
>              v = opts.get(key)
> -            if v:
> +            # diffopts flags are either None-default (which is passed
> +            # through unchanged, so we can identify unset values), or
> +            # some other falsey default (eg --unified, which defaults
> +            # to an empty string). We only want to override the config
> +            # entries from hgrc with command line values if they
> +            # appear to have been set, which is any truthy value,
> +            # True, or False.
> +            if v or isinstance(v, bool):
>                  return v

Perhaps this could be slightly simpler if we split get() to getbool() and
getstr(), and use v is None, but that isn't a big deal.


More information about the Mercurial-devel mailing list