Mercurial > hg
changeset 22973:bcff9ecdaae0
encoding: avoid cyclic dependency around "parsers" in pure Python build
80f2b63dd83a brought "asciilower" and "import parsers" into
"encoding.py".
This works fine with "parsers" module in C implementation, but doesn't
with one in pure Python implementation, because the latter causes
cyclic dependency below and aborting execution:
util => i18n => encoding => parsers => util
This patch delays importing "parsers" module until it is really
needed, to avoid cyclic dependency around "parsers" in pure Python
build.
author | FUJIWARA Katsunori <foozy@lares.dti.ne.jp> |
---|---|
date | Fri, 17 Oct 2014 02:07:04 +0900 |
parents | 44b16b59b80a |
children | 6bd43614d387 |
files | mercurial/encoding.py |
diffstat | 1 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/encoding.py Tue Oct 14 01:40:04 2014 -0700 +++ b/mercurial/encoding.py Fri Oct 17 02:07:04 2014 +0900 @@ -5,7 +5,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -import error, parsers +import error import unicodedata, locale, os def _getpreferredencoding(): @@ -258,14 +258,21 @@ return concat(usub.encode(encoding)) return ellipsis # no enough room for multi-column characters -def asciilower(s): +def _asciilower(s): '''convert a string to lowercase if ASCII Raises UnicodeDecodeError if non-ASCII characters are found.''' s.decode('ascii') return s.lower() -asciilower = getattr(parsers, 'asciilower', asciilower) +def asciilower(s): + # delay importing avoids cyclic dependency around "parsers" in + # pure Python build (util => i18n => encoding => parsers => util) + import parsers + impl = getattr(parsers, 'asciilower', _asciilower) + global asciilower + asciilower = impl + return impl(s) def lower(s): "best-effort encoding-aware case-folding of local string s"