[PATCH 9 of 9] match: use util.re.escape instead of re.escape

Siddharth Agarwal sid at less-broken.com
Fri Jul 18 03:21:18 UTC 2014


On 07/17/2014 07:26 PM, Augie Fackler wrote:
> 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.)

My motivation for it was to avoid an extra function call per invocation 
of util.re.escape -- once the value's been saved as a local, as is done 
in patch 9.


>
>> 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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel




More information about the Mercurial-devel mailing list