[PATCH 2 of 3] revset: add an undocumented _missingancestors function

Siddharth Agarwal sid0 at fb.com
Sun Feb 16 00:41:11 CST 2014


On 02/14/2014 10:55 AM, Durham Goode wrote:
> On 2/13/14 2:10 PM, "Siddharth Agarwal" <sid0 at fb.com> wrote:
>
>> # HG changeset patch
>> # User Siddharth Agarwal <sid0 at fb.com>
>> # Date 1392328485 28800
>> #      Thu Feb 13 13:54:45 2014 -0800
>> # Node ID b23315bb97257c5a8c2a6810990b19f5aa1dd2c7
>> # Parent  36f133144674e0f91b4c16d3ca49c01b3046f572
>> revset: add an undocumented _missingancestors function
>>
>> This will be used in an upcoming patch to optimize expressions of the form
>> (::x - ::y).
>>
>> diff --git a/mercurial/revset.py b/mercurial/revset.py
>> --- a/mercurial/revset.py
>> +++ b/mercurial/revset.py
>> @@ -1021,6 +1021,16 @@
>>              return baseset([m])
>>      return baseset([])
>>
>> +def _missingancestors(repo, subset, x):
>> +    # i18n: "_missingancestors" is a keyword
>> +    revs, bases = getargs(x, 2, 2,
>> +                          _("_missingancestors requires two arguments"))
>> +    rs = baseset(repo)
>> +    revs = getset(repo, rs, revs)
>> +    bases = getset(repo, rs, bases)
>> +    missing = set(repo.changelog.findmissingrevs(bases, revs))
>> +    return baseset([r for r in subset if r in missing])
>> +
> You could use the new 'lazyset' class for the return value here, so we
> don't have to iterate over the entire subset immediately.
>

I replaced the baseset line with

     return lazyset(subset, lambda r: r in missing)

and perfrevset on the revset '::tip - ::-10000' (performed in the next 
patch) is significantly worse:

! wall 0.232009 comb 0.240000 user 0.230000 sys 0.010000 (best of 42)

Looking at the profile, it seems like the entire set is materialized, so 
the lambda function calls only slow things down. Am I missing something?



More information about the Mercurial-devel mailing list