[PATCH 9 of 9] match: use util.re.escape instead of re.escape
Siddharth Agarwal
sid0 at fb.com
Tue Jul 15 23:15:31 UTC 2014
# HG changeset patch
# User Siddharth Agarwal <sid0 at fb.com>
# Date 1405463690 25200
# Tue Jul 15 15:34:50 2014 -0700
# Node ID 2d645e993f8cb3d386ae520e7233089316e830f2
# Parent 8ec138de734383da9ab4fd60e4a61054906f50ed
match: use util.re.escape instead of re.escape
For a pathological .hgignore with over 2500 glob lines and over 200000 calls to
re.escape, and with re2 available, this speeds up parsing the .hgignore from
0.75 seconds to 0.20 seconds. This causes e.g. 'hg status' with hgwatchman
enabled to go from 1.02 seconds to 0.47 seconds.
diff --git a/mercurial/match.py b/mercurial/match.py
--- a/mercurial/match.py
+++ b/mercurial/match.py
@@ -247,7 +247,7 @@
i, n = 0, len(pat)
res = ''
group = 0
- escape = re.escape
+ escape = util.re.escape
def peek():
return i < n and pat[i]
while i < n:
@@ -310,11 +310,11 @@
if kind == 're':
return pat
if kind == 'path':
- return '^' + re.escape(pat) + '(?:/|$)'
+ return '^' + util.re.escape(pat) + '(?:/|$)'
if kind == 'relglob':
return '(?:|.*/)' + _globre(pat) + globsuffix
if kind == 'relpath':
- return re.escape(pat) + '(?:/|$)'
+ return util.re.escape(pat) + '(?:/|$)'
if kind == 'relre':
if pat.startswith('^'):
return pat
More information about the Mercurial-devel
mailing list