[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