From patchwork Sun Jun 18 18:55:11 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [01, of, 10] config: explicitly track the use of the standard default value From: Pierre-Yves David X-Patchwork-Id: 21482 Message-Id: <5e988d4f834b981d8aaf.1497812111@nodosa.octopoid.net> To: mercurial-devel@mercurial-scm.org Cc: Gregory Szorc Date: Sun, 18 Jun 2017 20:55:11 +0200 # HG changeset patch # User Pierre-Yves David # Date 1497696671 -7200 # Sat Jun 17 12:51:11 2017 +0200 # Node ID 5e988d4f834b981d8aaf9d77019550d3800687d5 # Parent 29558247b00eff8c95c7604032b59cfbab34010d # EXP-Topic config.register # Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ # hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r 5e988d4f834b config: explicitly track the use of the standard default value We introduce a small object used to detect that no specific default value has been passed to 'ui.config'. We need this explicit special value since "None" is a valid and common default value. The end goal here is to make progress on a centralised and explicit declaration of the available config option. A first good usecase for this are "default" value. Before starting looking further down this alley we needs to rework the handling of default value in the 'ui' object to have all configxyz methods going through the same logic. This is the first changeset on this trek. diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -140,6 +140,10 @@ class httppasswordmgrdbproxy(object): def _catchterm(*args): raise error.SignalInterrupt +# unique object used to detect no default value has been provided when +# retrieving configuration value. +_unset = object() + class ui(object): def __init__(self, src=None): """Create a fresh new ui object if no src given @@ -394,7 +398,9 @@ class ui(object): def configsource(self, section, name, untrusted=False): return self._data(untrusted).source(section, name) - def config(self, section, name, default=None, untrusted=False): + def config(self, section, name, default=_unset, untrusted=False): + if default is _unset: + default = None if isinstance(name, list): alternates = name else: