util: refactor util.parsedate to raises ValueError
Split most of util.parsedate in util.rawparsedate and make it raises ValueError instead
of error.Abort.
The util.parsedate function is now just a shell function converting ValueError
to error.Abort for existing users.
I need to parse a date from config in a later patch and use util.rawparsedate
with ui.configwith which expect a convert that raises ValueError.
--- a/mercurial/util.py Mon May 22 11:08:18 2017 -0700
+++ b/mercurial/util.py Fri May 19 12:07:23 2017 +0200
@@ -1924,6 +1924,9 @@
The date may be a "unixtime offset" string or in one of the specified
formats. If the date already is a (unixtime, offset) tuple, it is returned.
+ This function calls rawparsedate and convert ValueError to Abort for
+ functions that needs higher level exception.
+
>>> parsedate(' today ') == parsedate(\
datetime.date.today().strftime('%b %d'))
True
@@ -1938,6 +1941,20 @@
>>> tz == strtz
True
"""
+ try:
+ return rawparsedate(date, formats=formats, bias=bias)
+ except ValueError as exception:
+ raise Abort(str(exception))
+
+def rawparsedate(date, formats=None, bias=None):
+ """parse a localized date/time and return a (unixtime, offset) tuple.
+
+ The date may be a "unixtime offset" string or in one of the specified
+ formats. If the date already is a (unixtime, offset) tuple, it is returned.
+
+ See docstring of parsedate for example.
+ Raise ValueError for invalid date value.
+ """
if bias is None:
bias = {}
if not date:
@@ -1984,15 +2001,15 @@
else:
break
else:
- raise Abort(_('invalid date: %r') % date)
+ raise ValueError(_('invalid date: %r') % date)
# validate explicit (probably user-specified) date and
# time zone offset. values must fit in signed 32 bits for
# current 32-bit linux runtimes. timezones go from UTC-12
# to UTC+14
if when < -0x80000000 or when > 0x7fffffff:
- raise Abort(_('date exceeds 32 bits: %d') % when)
+ raise ValueError(_('date exceeds 32 bits: %d') % when)
if offset < -50400 or offset > 43200:
- raise Abort(_('impossible time zone offset: %d') % offset)
+ raise ValueError(_('impossible time zone offset: %d') % offset)
return when, offset
def matchdate(date):