[PATCH 4 of 4 foldmap-in-C] encoding: use parsers.asciiupper when available
Siddharth Agarwal
sid0 at fb.com
Wed Apr 1 12:28:07 CDT 2015
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1427840529 25200
# Tue Mar 31 15:22:09 2015 -0700
# Node ID abee696f43573242ac2ec19f30fe009dbaffb26c
# Parent 3f8d0b236c26c00ccb0def72ea9e380ab0cbba82
encoding: use parsers.asciiupper when available
This is used on Windows and Cygwin, and the gains from this are expected to be
similar to what was seen in 80f2b63dd83a.
diff --git a/mercurial/encoding.py b/mercurial/encoding.py
--- a/mercurial/encoding.py
+++ b/mercurial/encoding.py
@@ -296,6 +296,22 @@
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)
+ import 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:
@@ -320,8 +336,7 @@
def upper(s):
"best-effort encoding-aware case-folding of local string s"
try:
- s.decode('ascii') # throw exception for non-ASCII character
- return s.upper()
+ return asciiupper(s)
except UnicodeDecodeError:
pass
try:
More information about the Mercurial-devel
mailing list