[PATCH 1 of 6 V2] hidden: add a function returning ancestors of revs within a domain
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Tue May 23 20:02:29 UTC 2017
# 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)
+ 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'
More information about the Mercurial-devel
mailing list