# HG changeset patch # User Martijn Pieters # Date 1475852815 -7200 # Node ID 81d38478fced82736066de58cdf36c3a1567b995 # Parent 940c05b25b079ee1c727cdc4d0546dd87dc480d4 util: remove the copypasta unquote function The _urlunquote function was added back in the day to improve startup performance, but this version is a) not compatible with Python 3 and b) has quadratic performance issues that Python core solved eons ago. Moreover, the function moved from urllib to urlparse (cheaper to import) *and* that module is already imported into pycompat. As a result, removing this function improves perf now. Before: ! wall 0.066773 comb 0.000000 user 0.000000 sys 0.000000 (best of 100) After: ! wall 0.065990 comb 0.000000 user 0.000000 sys 0.000000 (best of 100) diff -r 940c05b25b07 -r 81d38478fced mercurial/util.py --- a/mercurial/util.py Fri Oct 07 08:51:50 2016 -0700 +++ b/mercurial/util.py Fri Oct 07 17:06:55 2016 +0200 @@ -2301,26 +2301,6 @@ _hextochr = dict((a + b, chr(int(a + b, 16))) for a in string.hexdigits for b in string.hexdigits) -def _urlunquote(s): - """Decode HTTP/HTML % encoding. - - >>> _urlunquote('abc%20def') - 'abc def' - """ - res = s.split('%') - # fastpath - if len(res) == 1: - return s - s = res[0] - for item in res[1:]: - try: - s += _hextochr[item[:2]] + item[2:] - except KeyError: - s += '%' + item - except UnicodeDecodeError: - s += unichr(int(item[:2], 16)) + item[2:] - return s - class url(object): r"""Reliable URL parser. @@ -2489,7 +2469,7 @@ 'path', 'fragment'): v = getattr(self, a) if v is not None: - setattr(self, a, _urlunquote(v)) + setattr(self, a, pycompat.urlparse.unquote(v)) def __repr__(self): attrs = []