diff --git a/mercurial/ui.py b/mercurial/ui.py --- a/mercurial/ui.py +++ b/mercurial/ui.py @@ -9,9 +9,6 @@ from i18n import _ import errno, getpass, os, socket, sys, tempfile, traceback import config, util, error -_booleans = {'1': True, 'yes': True, 'true': True, 'on': True, - '0': False, 'no': False, 'false': False, 'off': False} - class ui(object): def __init__(self, src=None): self._buffers = [] @@ -149,10 +146,11 @@ class ui(object): return default if isinstance(v, bool): return v - if v.lower() not in _booleans: + b = util.parsebool(v) + if b is None: raise error.ConfigError(_("%s.%s not a boolean ('%s')") % (section, name, v)) - return _booleans[v.lower()] + return b def configlist(self, section, name, default=None, untrusted=False): """Return a list of comma/space separated strings""" diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -1435,3 +1435,13 @@ def getport(port): return socket.getservbyname(port) except socket.error: raise Abort(_("no port number associated with service '%s'") % port) + +_booleans = {'1': True, 'yes': True, 'true': True, 'on': True, + '0': False, 'no': False, 'false': False, 'off': False} + +def parsebool(s): + """Parse s into a boolean. + + If s is not a valid boolean, returns None. + """ + return _booleans.get(s.lower(), None)