# HG changeset patch # User Siddharth Agarwal # Date 2014-07-15 22:34:50 # Node ID d516b6de38210dea25aad7cb59ee999c6cbe37fd # Parent 10e99839a7a4fd94fffae357216f03b3fafb1610 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 @@ def _globre(pat): 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 @@ def _regex(kind, pat, globsuffix): 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