match: use re2 in readpatternfile if possible
authorBryan O'Sullivan <bos@serpentine.com>
Thu, 10 Dec 2015 21:33:55 -0800
changeset 27327 d500341e4f55
parent 27326 ee2d7b5daa8a
child 27328 96dc6664fa9c
match: use re2 in readpatternfile if possible This has a small, but measurable, effect on performance if a pattern file is very large. In an artificial test with 200,000 lines of pattern data, using re2 reduced read time by 200 milliseconds.
mercurial/match.py
--- a/mercurial/match.py	Thu Dec 10 21:32:19 2015 -0800
+++ b/mercurial/match.py	Thu Dec 10 21:33:55 2015 -0800
@@ -654,9 +654,11 @@
         if "#" in line:
             global _commentre
             if not _commentre:
-                _commentre = re.compile(r'((^|[^\\])(\\\\)*)#.*')
+                _commentre = util.re.compile(r'((?:^|[^\\])(?:\\\\)*)#.*')
             # remove comments prefixed by an even number of escapes
-            line = _commentre.sub(r'\1', line)
+            m = _commentre.search(line)
+            if m:
+                line = line[:m.end(1)]
             # fixup properly escaped comments that survived the above
             line = line.replace("\\#", "#")
         line = line.rstrip()