# HG changeset patch # User Jun Wu # Date 2019-11-25 20:44:04 # Node ID b65bd4b61d78236b68c0bcc3d2f773001e10fcd8 # Parent aef7b043a36f1c3622afbbe46d9322493bab46bb dateutil: correct default for Ymd in parsedate The code uses `0` for the default value of Ymd (year, month, and day), which seems suboptimal. For example, these will fail to parse: dateutil.parsedate('2000', formats=dateutil.extendeddateformats) dateutil.parsedate('Jan 2000', formats=dateutil.extendeddateformats) Fix it by providing sane defaults (1 instead of 0) for year, month, and day. The suboptimal behavior was introduced by 91bc001a592 (2010-12-29, "date: fix matching of underspecified date ranges"), which does not seem to justify the current behavior. Note end-users should not notice the subtle issue, because there are no formats in `defaultdateformats` that allow an explicit year with omitted month, or an explicit month with omitted day. Differential Revision: https://phab.mercurial-scm.org/D7520 diff --git a/mercurial/utils/dateutil.py b/mercurial/utils/dateutil.py --- a/mercurial/utils/dateutil.py +++ b/mercurial/utils/dateutil.py @@ -209,6 +209,8 @@ def parsedate(date, formats=None, bias=N True >>> tz == strtz True + >>> parsedate(b'2000 UTC', formats=extendeddateformats) + (946684800, 0) """ if bias is None: bias = {} @@ -244,7 +246,8 @@ def parsedate(date, formats=None, bias=N if part[0:1] in b"HMS": b = b"00" else: - b = b"0" + # year, month, and day start from 1 + b = b"1" # this piece is for matching the generic end to today's date n = datestr(now, b"%" + part[0:1])