[PATCH V2] revset: use manifest.matches in _follow revset
Sean Farley
sean at farley.io
Fri Feb 5 16:50:02 EST 2016
Sean Farley <sean at farley.io> writes:
> Durham Goode <durham at fb.com> writes:
>
>> # HG changeset patch
>> # User Durham Goode <durham at fb.com>
>> # Date 1454707825 28800
>> # Fri Feb 05 13:30:25 2016 -0800
>> # Node ID 3e36d1273ba86c354729e1876a6585b8ab37a681
>> # Parent 01a5143cd25f285f8c745a92986cd7186bb32c90
>> revset: use manifest.matches in _follow revset
>>
>> The old _follow revset iterated over every file in the commit and checked if it
>> matched. For repos with large manifests, this could take 500ms. By switching to
>> use manifest.matches() we can take advantage of the fastpaths built in to
>> manifest.py that allows iterating over only the files in the matcher when it's a
>> simple matcher. This brings the time spent down from 500ms to 0ms during simple
>> operations like 'hg log -f file.txt'.
>>
>> diff --git a/mercurial/revset.py b/mercurial/revset.py
>> --- a/mercurial/revset.py
>> +++ b/mercurial/revset.py
>> @@ -1086,13 +1086,14 @@ def _follow(repo, subset, x, name, follo
>> matcher = matchmod.match(repo.root, repo.getcwd(), [x],
>> ctx=repo[None], default='path')
>>
>> + files = c.manifest().walk(matcher)
>
> Looks like this is the previous patch?
Nevermind. My mistake.
More information about the Mercurial-devel
mailing list