[PATCH 3 of 8] hidden: add a function returning ancestors of revs within a domain

Martin von Zweigbergk martinvonz at google.com
Tue May 23 17:35:36 EDT 2017


On Mon, May 22, 2017 at 3:00 PM, Augie Fackler <raf at durin42.com> wrote:
> On Sun, May 21, 2017 at 05:20:38PM +0200, Pierre-Yves David wrote:
>> # HG changeset patch
>> # User Pierre-Yves David <pierre-yves.david at octobus.net>
>> # Date 1495372906 -7200
>> #      Sun May 21 15:21:46 2017 +0200
>> # Node ID bde4b1ab7b0111988a521c4c4c28b3963010eeff
>> # Parent  acd7e055dbcb5830de634f52971a39dc654d73e1
>> # EXP-Topic dynamicblocker
>> # Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
>> #              hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r bde4b1ab7b01
>> hidden: add a function returning ancestors of revs within a domain
>>
>> See documentation for details. This will be used to improve the hidden
>> computation algorithm. See new changesets for usage.
>>
>> diff --git a/mercurial/repoview.py b/mercurial/repoview.py
>> --- a/mercurial/repoview.py
>> +++ b/mercurial/repoview.py
>> @@ -92,6 +92,29 @@ def _getstatichidden(repo):
>>                      heappush(heap, -parent)
>>      return hidden
>>
>> +def _domainancestors(pfunc, revs, domain):
>> +    """return ancestors of 'revs' within 'domain'
>> +
>> +    - pfunc(r): a funtion returning parent of 'r',
>                       ^ function (please double-check your spellchecker?)
>
>
>> +    - revs: iterable of revnum,
>> +    - domain: consistent set of revnum.
>
> I'm not sure what "consistent set of revnum" means, which makes the docstring not useful.

Maybe Pierre-Yves meant "contiguous"? I can fix in flight if that's
what it was meant to be (assuming it looks good otherwise; I haven't
started reviewing).

>
>> +
>> +    The domain must be consistent, no connected set are the ancestors of another
>> +    connected set.
>
> I can't parse this definition either. :(

I'm not sure I can either. With the history below, it sounds like B
and C can be in the domain, but A cannot. Correct?

B C
| /
A

>
>> +
>> +    (Ancestors are returned inclusively)
>> +    """
>> +    stack = list(revs)
>> +    ancs = set(stack)
>> +    while stack:
>> +        for p in pfunc(stack.pop()):
>> +            nbanc = len(ancs)
>> +            if p != nullrev and p in domain:
>> +                ancs.add(p)
>> +            if nbanc != len(ancs): # avoid double membership testing
>> +                stack.append(p)
>> +    return ancs
>> +
>>  cacheversion = 1
>>  cachefile = 'cache/hidden'
>>
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list