Mercurial > hg
comparison mercurial/repoview.py @ 32475:1d70ec85ae00
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.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sun, 21 May 2017 15:21:46 +0200 |
parents | 8db2feb04ceb |
children | e5e31b0fc924 |
comparison
equal
deleted
inserted
replaced
32474:c2b7fb580794 | 32475:1d70ec85ae00 |
---|---|
90 seen.add(parent) | 90 seen.add(parent) |
91 if pre < len(seen) and getphase(repo, rev): | 91 if pre < len(seen) and getphase(repo, rev): |
92 heappush(heap, -parent) | 92 heappush(heap, -parent) |
93 return hidden | 93 return hidden |
94 | 94 |
95 def _domainancestors(pfunc, revs, domain): | |
96 """return ancestors of 'revs' within 'domain' | |
97 | |
98 - pfunc(r): a funtion returning parent of 'r', | |
99 - revs: iterable of revnum, | |
100 - domain: consistent set of revnum. | |
101 | |
102 The domain must be consistent: no connected subset are the ancestors of | |
103 another connected subset. In other words, if the parents of a revision are | |
104 not in the domains, no other ancestors of that revision. For example, with | |
105 the following graph: | |
106 | |
107 F | |
108 | | |
109 E | |
110 | D | |
111 | | | |
112 | C | |
113 |/ | |
114 B | |
115 | | |
116 A | |
117 | |
118 If C, D, E and F are in the domain but B is not, A cannot be ((A) is an | |
119 ancestors disconnected subset disconnected of (C+D)). | |
120 | |
121 (Ancestors are returned inclusively) | |
122 """ | |
123 stack = list(revs) | |
124 ancestors = set(stack) | |
125 while stack: | |
126 for p in pfunc(stack.pop()): | |
127 if p != nullrev and p in domain and p not in ancestors: | |
128 ancestors.add(p) | |
129 stack.append(p) | |
130 return ancestors | |
131 | |
95 cacheversion = 1 | 132 cacheversion = 1 |
96 cachefile = 'cache/hidden' | 133 cachefile = 'cache/hidden' |
97 | 134 |
98 def cachehash(repo, hideable): | 135 def cachehash(repo, hideable): |
99 """return sha1 hash of repository data to identify a valid cache. | 136 """return sha1 hash of repository data to identify a valid cache. |