Hi, On Sat, Dec 23, 2023 at 04:48:51PM +0100, Gioele Barabucci wrote: > Package: git-buildpackage > Version: 0.9.33 > > Dear git-buildpackage maintainer, > > the gbp-import-dsc script crashes while parsing changelogs that include leap > seconds. > > For example, while parsing the changelog of unicode/5.0, gbp-import-dsc > crashes with > > ``` > File "/usr/lib/python3/dist-packages/gbp/scripts/import_dsc.py", line 116, > in get_author_from_changelog > date = rfc822_date_to_git(dch.date, fuzzy=True) > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > File "/usr/lib/python3/dist-packages/gbp/git/__init__.py", line 44, in > rfc822_date_to_git > d = dateutil.parser.parse(rfc822_date, fuzzy=fuzzy) > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > File "/usr/lib/python3/dist-packages/dateutil/parser/_parser.py", line > 1368, in parse > return DEFAULTPARSER.parse(timestr, **kwargs) > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > File "/usr/lib/python3/dist-packages/dateutil/parser/_parser.py", line > 651, in parse > six.raise_from(ParserError(str(e) + ": %s", timestr), e) > File "<string>", line 3, in raise_from > dateutil.parser._parser.ParserError: second must be in 0..59: Sun, 1 Jan > 2006 00:59:60 +0100 > ```
This looks like a bug in dateutil, can you reassign there? Cheers, -- Guido > > Leap seconds (:60) are explicitly permitted by Debian Policy [1] and RFC > 5322 [2] and produced by `date -R`. > > As of 2023-12 there is an open issue asking for support for leap seconds in > dateutils [3]. > > A possible solution to this issue, suggested by olasd, would to parse the > date using the stdlib method `email.utils.parsedate_tz` and handle the leap > seconds manually: > > ``` > import email, datetime > > add_leap_second = False > dateinfo = list(email.utils.parsedate_tz(rfc822_date)) > if dateinfo[5] == 60: > dateinfo[5] = 59 > add_leap_second = True > > date = datetime.datetime(*dateinfo[:6]) > > if add_leap_second: > date += datetime.timedelta(seconds=1) > ``` > > Alternatively: > > ``` > dhc_date = dch.date.replace(":60 ", ":59 ") > date = rfc822_date_to_git(dch.date, fuzzy=True) > if dch_date != dch.date: > date += datetime.timedelta(seconds=1) > ``` > > Regards, > > [1] «ss is the two-digit seconds (00-60)» > https://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog > > [2] «the time-of-day MUST be in the range 00:00:00 through 23:59:60 (the > number of seconds allowing for a leap second; see [RFC1305])» > https://datatracker.ietf.org/doc/html/rfc5322#section-3.3 > > [3] https://github.com/dateutil/dateutil/issues/1018 > > -- > Gioele Barabucci >