comparison mercurial/ui.py @ 32496:bb18728ea617

util: raise ParseError when parsing dates (BC) a7dce526c462 refactored util.parsedate in order to raise ValueError instead of Abort for using with ui.configwith. It causes several problems, putting arbitrary bytes in ValueError can cause issues with Python 3. Moreover, we added a function to convert ValueError exceptions back to Abort. A better approach would be to make parsedate raises ParseError, removing the convert function and update configwith to also catch ParseError. The side-effect is that error message when giving an invalid date in CLI change from: abort: invalid date: 'foo bar' to: hg: parse error: invalid date: 'foo bar' I'm not sure if it's an acceptable change, I found personally the error message more clear but more verbose too.
author Boris Feld <boris.feld@octobus.net>
date Wed, 24 May 2017 17:50:17 +0200
parents 0ed730f3301c
children 012e0da5b759
comparison
equal deleted inserted replaced
32495:2b5953a49f14 32496:bb18728ea617
520 v = self.config(section, name, None, untrusted) 520 v = self.config(section, name, None, untrusted)
521 if v is None: 521 if v is None:
522 return default 522 return default
523 try: 523 try:
524 return convert(v) 524 return convert(v)
525 except ValueError: 525 except (ValueError, error.ParseError):
526 if desc is None: 526 if desc is None:
527 desc = convert.__name__ 527 desc = convert.__name__
528 raise error.ConfigError(_("%s.%s is not a valid %s ('%s')") 528 raise error.ConfigError(_("%s.%s is not a valid %s ('%s')")
529 % (section, name, desc, v)) 529 % (section, name, desc, v))
530 530
605 >>> u.setconfig(s, 'date', '0 0') 605 >>> u.setconfig(s, 'date', '0 0')
606 >>> u.configdate(s, 'date') 606 >>> u.configdate(s, 'date')
607 (0, 0) 607 (0, 0)
608 """ 608 """
609 if self.config(section, name, default, untrusted): 609 if self.config(section, name, default, untrusted):
610 return self.configwith(util.rawparsedate, section, name, default, 610 return self.configwith(util.parsedate, section, name, default,
611 'date', untrusted) 611 'date', untrusted)
612 return default 612 return default
613 613
614 def hasconfig(self, section, name, untrusted=False): 614 def hasconfig(self, section, name, untrusted=False):
615 return self._data(untrusted).hasitem(section, name) 615 return self._data(untrusted).hasitem(section, name)