mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 23:38:50 +03:00
encoding: drop circular import by proxying through '<policy>.charencode'
I decided not to split charencode.c to new C extension module because it would duplicate binary codes unnecessarily.
This commit is contained in:
parent
742443aa7d
commit
854edbfe8b
@ -18,6 +18,11 @@ from . import (
|
||||
pycompat,
|
||||
)
|
||||
|
||||
charencode = policy.importmod(r'charencode')
|
||||
|
||||
asciilower = charencode.asciilower
|
||||
asciiupper = charencode.asciiupper
|
||||
|
||||
_sysstr = pycompat.sysstr
|
||||
|
||||
if pycompat.ispy3:
|
||||
@ -318,38 +323,6 @@ def trim(s, width, ellipsis='', leftside=False):
|
||||
return concat(usub.encode(_sysstr(encoding)))
|
||||
return ellipsis # no enough room for multi-column characters
|
||||
|
||||
def _asciilower(s):
|
||||
'''convert a string to lowercase if ASCII
|
||||
|
||||
Raises UnicodeDecodeError if non-ASCII characters are found.'''
|
||||
s.decode('ascii')
|
||||
return s.lower()
|
||||
|
||||
def asciilower(s):
|
||||
# delay importing avoids cyclic dependency around "parsers" in
|
||||
# pure Python build (util => i18n => encoding => parsers => util)
|
||||
parsers = policy.importmod(r'parsers')
|
||||
impl = getattr(parsers, 'asciilower', _asciilower)
|
||||
global asciilower
|
||||
asciilower = impl
|
||||
return impl(s)
|
||||
|
||||
def _asciiupper(s):
|
||||
'''convert a string to uppercase if ASCII
|
||||
|
||||
Raises UnicodeDecodeError if non-ASCII characters are found.'''
|
||||
s.decode('ascii')
|
||||
return s.upper()
|
||||
|
||||
def asciiupper(s):
|
||||
# delay importing avoids cyclic dependency around "parsers" in
|
||||
# pure Python build (util => i18n => encoding => parsers => util)
|
||||
parsers = policy.importmod(r'parsers')
|
||||
impl = getattr(parsers, 'asciiupper', _asciiupper)
|
||||
global asciiupper
|
||||
asciiupper = impl
|
||||
return impl(s)
|
||||
|
||||
def lower(s):
|
||||
"best-effort encoding-aware case-folding of local string s"
|
||||
try:
|
||||
|
@ -80,7 +80,9 @@ _cextversions = {
|
||||
|
||||
# map import request to other package or module
|
||||
_modredirects = {
|
||||
(r'cext', r'charencode'): (r'cext', r'parsers'),
|
||||
(r'cffi', r'base85'): (r'pure', r'base85'),
|
||||
(r'cffi', r'charencode'): (r'pure', r'charencode'),
|
||||
(r'cffi', r'diffhelpers'): (r'pure', r'diffhelpers'),
|
||||
(r'cffi', r'parsers'): (r'pure', r'parsers'),
|
||||
}
|
||||
|
22
mercurial/pure/charencode.py
Normal file
22
mercurial/pure/charencode.py
Normal file
@ -0,0 +1,22 @@
|
||||
# charencode.py - miscellaneous character encoding
|
||||
#
|
||||
# Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
|
||||
#
|
||||
# This software may be used and distributed according to the terms of the
|
||||
# GNU General Public License version 2 or any later version.
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
def asciilower(s):
|
||||
'''convert a string to lowercase if ASCII
|
||||
|
||||
Raises UnicodeDecodeError if non-ASCII characters are found.'''
|
||||
s.decode('ascii')
|
||||
return s.lower()
|
||||
|
||||
def asciiupper(s):
|
||||
'''convert a string to uppercase if ASCII
|
||||
|
||||
Raises UnicodeDecodeError if non-ASCII characters are found.'''
|
||||
s.decode('ascii')
|
||||
return s.upper()
|
Loading…
Reference in New Issue
Block a user