Mercurial > hg
comparison mercurial/util.py @ 51623:59f846fbc11d
branching: merge stable into default
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 06 May 2024 18:50:21 +0200 |
parents | a452807df09b 6c39edd1d348 |
children | ba205f944cb4 |
comparison
equal
deleted
inserted
replaced
51607:a4b3b8dee0a8 | 51623:59f846fbc11d |
---|---|
2207 except OSError: | 2207 except OSError: |
2208 return True | 2208 return True |
2209 | 2209 |
2210 | 2210 |
2211 _re2_input = lambda x: x | 2211 _re2_input = lambda x: x |
2212 # google-re2 will need to be tell to not output error on its own | |
2213 _re2_options = None | |
2212 try: | 2214 try: |
2213 import re2 # pytype: disable=import-error | 2215 import re2 # pytype: disable=import-error |
2214 | 2216 |
2215 _re2 = None | 2217 _re2 = None |
2216 except ImportError: | 2218 except ImportError: |
2227 class _re: | 2229 class _re: |
2228 @staticmethod | 2230 @staticmethod |
2229 def _checkre2(): | 2231 def _checkre2(): |
2230 global _re2 | 2232 global _re2 |
2231 global _re2_input | 2233 global _re2_input |
2234 global _re2_options | |
2232 if _re2 is not None: | 2235 if _re2 is not None: |
2233 # we already have the answer | 2236 # we already have the answer |
2234 return | 2237 return |
2235 | 2238 |
2236 check_pattern = br'\[([^\[]+)\]' | 2239 check_pattern = br'\[([^\[]+)\]' |
2245 # the `fb-re2` project provides a re2 module that acccept sysstr | 2248 # the `fb-re2` project provides a re2 module that acccept sysstr |
2246 check_pattern = pycompat.sysstr(check_pattern) | 2249 check_pattern = pycompat.sysstr(check_pattern) |
2247 check_input = pycompat.sysstr(check_input) | 2250 check_input = pycompat.sysstr(check_input) |
2248 _re2 = bool(re2.match(check_pattern, check_input)) | 2251 _re2 = bool(re2.match(check_pattern, check_input)) |
2249 _re2_input = pycompat.sysstr | 2252 _re2_input = pycompat.sysstr |
2253 try: | |
2254 quiet = re2.Options() | |
2255 quiet.log_errors = False | |
2256 _re2_options = quiet | |
2257 except AttributeError: | |
2258 pass | |
2250 | 2259 |
2251 def compile(self, pat, flags=0): | 2260 def compile(self, pat, flags=0): |
2252 """Compile a regular expression, using re2 if possible | 2261 """Compile a regular expression, using re2 if possible |
2253 | 2262 |
2254 For best performance, use only re2-compatible regexp features. The | 2263 For best performance, use only re2-compatible regexp features. The |
2260 if flags & remod.IGNORECASE: | 2269 if flags & remod.IGNORECASE: |
2261 pat = b'(?i)' + pat | 2270 pat = b'(?i)' + pat |
2262 if flags & remod.MULTILINE: | 2271 if flags & remod.MULTILINE: |
2263 pat = b'(?m)' + pat | 2272 pat = b'(?m)' + pat |
2264 try: | 2273 try: |
2265 return re2.compile(_re2_input(pat)) | 2274 input_regex = _re2_input(pat) |
2275 if _re2_options is not None: | |
2276 compiled = re2.compile(input_regex, options=_re2_options) | |
2277 else: | |
2278 compiled = re2.compile(input_regex) | |
2279 return compiled | |
2266 except re2.error: | 2280 except re2.error: |
2267 pass | 2281 pass |
2268 return remod.compile(pat, flags) | 2282 return remod.compile(pat, flags) |
2269 | 2283 |
2270 @propertycache | 2284 @propertycache |