[PATCH 9 of 9] match: use util.re.escape instead of re.escape
Augie Fackler
raf at durin42.com
Thu Jul 17 21:26:11 CDT 2014
On Tue, Jul 15, 2014 at 04:15:31PM -0700, Siddharth Agarwal wrote:
> # 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
Series looks sensible and straighforward. Queued.
(I particuarly like that (ab)use of @propertycache to return different
functions and have it look like a class method. Clever.)
>
> 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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list