[PATCH 1 of 6 V2] hidden: add a function returning ancestors of revs within a domain
Martin von Zweigbergk
martinvonz at google.com
Tue May 23 20:04:43 EDT 2017
On Tue, May 23, 2017 at 1:02 PM, Pierre-Yves David
<pierre-yves.david at ens-lyon.org> 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 5f964af88a0fae242ce24b0478c676d2056e0dc6
> # Parent 8db2feb04cebc1878c6232dd2650f2c5468d350e
> # EXP-Topic fast-compute-hidden
> # Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/
> # hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r 5f964af88a0f
> 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,31 @@ 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',
> + - revs: iterable of revnum,
> + - domain: consistent set of revnum.
> +
> + The domain must be consistent: no connected subset are the ancestors of
> + another connected subset. In other words, if the parents of a revision are
> + not in the domains, no other ancestors of that revision.
> +
> + (Ancestors are returned inclusively, 'revs' must be within the domain or
> + direct children of it.)
> + """
> + stack = list(revs)
> + ancs = set(stack)
> + while stack:
> + for p in pfunc(stack.pop()):
> + nbanc = len(ancs)
s/nb/num/ maybe? I'd also prefer to have "ancestors" spelled out
(which seems ~3x more common so far in our code base according to
"grep -E 'anc(estor)?s = ' mercurial/*.py").
> + if p != nullrev and p in domain:
> + ancs.add(p)
> + if nbanc != len(ancs): # avoid double membership testing
> + stack.append(p)
The following seems easier to read than the above 5 lines. Does the
comment imply that it's noticeably slower?
if p != nullrev and p in domain and not p in ancs:
ancs.add(p)
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
More information about the Mercurial-devel
mailing list