# HG changeset patch # User Siddharth Agarwal # Date 1427840529 25200 # Node ID ac08de78de7fe6c9710d428cb251f40e899657e3 # Parent bf55df007535739568cbd3165d4c7eaed88e8e38 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 -r bf55df007535 -r ac08de78de7f mercurial/encoding.py --- a/mercurial/encoding.py Tue Mar 31 13:46:21 2015 -0700 +++ b/mercurial/encoding.py Tue Mar 31 15:22:09 2015 -0700 @@ -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: