diff options
author | Guido Günther <agx@sigxcpu.org> | 2016-06-30 16:43:30 +0200 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2016-06-30 17:08:31 +0200 |
commit | e7a2e18f9fe9e1c9b0e993049dbf15620604087e (patch) | |
tree | 35c74b914e8d4736e9d0e057dcadd8a0bb2dffe7 /gbp/rpm/changelog.py | |
parent | 6732732d3336d067bcaf140862158c56b62b8031 (diff) |
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.
Diffstat (limited to 'gbp/rpm/changelog.py')
-rw-r--r-- | gbp/rpm/changelog.py | 18 |
1 files changed, 18 insertions, 0 deletions
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 @@ # <http://www.gnu.org/licenses/> """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" |