mercurial/util.py
changeset 46903 856820b497fc
parent 46901 51841b23670b
parent 46802 112826b59476
child 46907 ffd3e823a7e5
equal deleted inserted replaced
46902:631001150e13 46903:856820b497fc
  2175         return True
  2175         return True
  2176     except OSError:
  2176     except OSError:
  2177         return True
  2177         return True
  2178 
  2178 
  2179 
  2179 
       
  2180 _re2_input = lambda x: x
  2180 try:
  2181 try:
  2181     import re2  # pytype: disable=import-error
  2182     import re2  # pytype: disable=import-error
  2182 
  2183 
  2183     _re2 = None
  2184     _re2 = None
  2184 except ImportError:
  2185 except ImportError:
  2186 
  2187 
  2187 
  2188 
  2188 class _re(object):
  2189 class _re(object):
  2189     def _checkre2(self):
  2190     def _checkre2(self):
  2190         global _re2
  2191         global _re2
       
  2192         global _re2_input
  2191         try:
  2193         try:
  2192             # check if match works, see issue3964
  2194             # check if match works, see issue3964
  2193             _re2 = bool(re2.match(br'\[([^\[]+)\]', b'[ui]'))
  2195             check_pattern = br'\[([^\[]+)\]'
       
  2196             check_input = b'[ui]'
       
  2197             _re2 = bool(re2.match(check_pattern, check_input))
  2194         except ImportError:
  2198         except ImportError:
  2195             _re2 = False
  2199             _re2 = False
       
  2200         except TypeError:
       
  2201             # the `pyre-2` project provides a re2 module that accept bytes
       
  2202             # the `fb-re2` project provides a re2 module that acccept sysstr
       
  2203             check_pattern = pycompat.sysstr(check_pattern)
       
  2204             check_input = pycompat.sysstr(check_input)
       
  2205             _re2 = bool(re2.match(check_pattern, check_input))
       
  2206             _re2_input = pycompat.sysstr
  2196 
  2207 
  2197     def compile(self, pat, flags=0):
  2208     def compile(self, pat, flags=0):
  2198         """Compile a regular expression, using re2 if possible
  2209         """Compile a regular expression, using re2 if possible
  2199 
  2210 
  2200         For best performance, use only re2-compatible regexp features. The
  2211         For best performance, use only re2-compatible regexp features. The
  2206             if flags & remod.IGNORECASE:
  2217             if flags & remod.IGNORECASE:
  2207                 pat = b'(?i)' + pat
  2218                 pat = b'(?i)' + pat
  2208             if flags & remod.MULTILINE:
  2219             if flags & remod.MULTILINE:
  2209                 pat = b'(?m)' + pat
  2220                 pat = b'(?m)' + pat
  2210             try:
  2221             try:
  2211                 return re2.compile(pat)
  2222                 return re2.compile(_re2_input(pat))
  2212             except re2.error:
  2223             except re2.error:
  2213                 pass
  2224                 pass
  2214         return remod.compile(pat, flags)
  2225         return remod.compile(pat, flags)
  2215 
  2226 
  2216     @propertycache
  2227     @propertycache