diff --git a/mercurial/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -716,29 +716,33 @@ try: except ImportError: _re2 = False -def compilere(pat, flags=0): - '''Compile a regular expression, using re2 if possible +class _re(object): + def compile(self, pat, flags=0): + '''Compile a regular expression, using re2 if possible - For best performance, use only re2-compatible regexp features. The - only flags from the re module that are re2-compatible are - IGNORECASE and MULTILINE.''' - global _re2 - if _re2 is None: - try: - # check if match works, see issue3964 - _re2 = bool(re2.match(r'\[([^\[]+)\]', '[ui]')) - except ImportError: - _re2 = False - if _re2 and (flags & ~(remod.IGNORECASE | remod.MULTILINE)) == 0: - if flags & remod.IGNORECASE: - pat = '(?i)' + pat - if flags & remod.MULTILINE: - pat = '(?m)' + pat - try: - return re2.compile(pat) - except re2.error: - pass - return remod.compile(pat, flags) + For best performance, use only re2-compatible regexp features. The + only flags from the re module that are re2-compatible are + IGNORECASE and MULTILINE.''' + global _re2 + if _re2 is None: + try: + # check if match works, see issue3964 + _re2 = bool(re2.match(r'\[([^\[]+)\]', '[ui]')) + except ImportError: + _re2 = False + if _re2 and (flags & ~(remod.IGNORECASE | remod.MULTILINE)) == 0: + if flags & remod.IGNORECASE: + pat = '(?i)' + pat + if flags & remod.MULTILINE: + pat = '(?m)' + pat + try: + return re2.compile(pat) + except re2.error: + pass + return remod.compile(pat, flags) + +re = _re() +compilere = re.compile _fspathcache = {} def fspath(name, root):