From e7a2e18f9fe9e1c9b0e993049dbf15620604087e Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Thu, 30 Jun 2016 16:43:30 +0200 Subject: rpm.changelog: Wrap str{f,p}time calls so we're sure they run under a C locale. Otherwise we might misparse dates due to locale differences. This unbreaks rpm-ch's the test suite. --- gbp/rpm/changelog.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/gbp/rpm/changelog.py b/gbp/rpm/changelog.py index 504391a..7f59816 100644 --- a/gbp/rpm/changelog.py +++ b/gbp/rpm/changelog.py @@ -16,12 +16,28 @@ # """An RPM Changelog""" +import locale import datetime import re +from functools import wraps + import gbp.log +def c_locale(category): + def _decorator(f): + @wraps(f) + def wrapper(*args, **kwargs): + saved = locale.setlocale(category, None) + locale.setlocale(category, 'C') + ret = f(*args, **kwargs) + locale.setlocale(category, saved) + return ret + return wrapper + return _decorator + + class ChangelogError(Exception): """Problem parsing changelog""" pass @@ -43,6 +59,7 @@ class _ChangelogHeader(object): return self._data[key] return None + @c_locale(locale.LC_TIME) def __str__(self): keys = dict(self._data) keys['time'] = self._data['time'].strftime( @@ -171,6 +188,7 @@ class ChangelogParser(object): except IOError as err: raise ChangelogError("Unable to read changelog file: %s" % err) + @c_locale(locale.LC_TIME) def _parse_section_header(self, text): """Parse one changelog section header""" # Try to split out time stamp and "changelog name" -- cgit v1.2.3