--- a/hgext/evolve.py Thu Jun 18 15:25:51 2015 -0700
+++ b/hgext/evolve.py Thu Jun 18 17:57:11 2015 -0700
@@ -257,7 +257,7 @@
def templatekw(self, keywordname):
- """Decorated function is a revset keyword
+ """Decorated function is a template keyword
The name of the keyword must be given as the decorator argument.
The symbol is added during `extsetup`.
@@ -444,7 +444,9 @@
troubled.update(getrevs(repo, 'unstable'))
troubled.update(getrevs(repo, 'bumped'))
troubled.update(getrevs(repo, 'divergent'))
- return subset & revset.baseset(troubled)
+ troubled = revset.baseset(troubled)
+ troubled.sort() # set is non-ordered, enforce order
+ return subset & troubled
### Obsolescence graph
@@ -455,16 +457,19 @@
cs = set()
nm = repo.changelog.nodemap
markerbysubj = repo.obsstore.precursors
+ node = repo.changelog.node
for r in s:
- for p in markerbysubj.get(repo[r].node(), ()):
+ for p in markerbysubj.get(node(r), ()):
pr = nm.get(p[0])
if pr is not None:
cs.add(pr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
def _allprecursors(repo, s): # XXX we need a better naming
"""transitive precursors of a subset"""
- toproceed = [repo[r].node() for r in s]
+ node = repo.changelog.node
+ toproceed = [node(r) for r in s]
seen = set()
allsubjects = repo.obsstore.precursors
while toproceed:
@@ -480,19 +485,22 @@
pr = nm.get(p)
if pr is not None:
cs.add(pr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
def _successors(repo, s):
"""Successors of a changeset"""
cs = set()
+ node = repo.changelog.node
nm = repo.changelog.nodemap
markerbyobj = repo.obsstore.successors
for r in s:
- for p in markerbyobj.get(repo[r].node(), ()):
+ for p in markerbyobj.get(node(r), ()):
for sub in p[1]:
sr = nm.get(sub)
if sr is not None:
cs.add(sr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
def _allsuccessors(repo, s, haltonflags=0): # XXX we need a better naming
@@ -500,7 +508,8 @@
haltonflags allows to provide flags which prevent the evaluation of a
marker. """
- toproceed = [repo[r].node() for r in s]
+ node = repo.changelog.node
+ toproceed = [node(r) for r in s]
seen = set()
allobjects = repo.obsstore.successors
while toproceed:
@@ -520,6 +529,7 @@
sr = nm.get(s)
if sr is not None:
cs.add(sr)
+ cs -= repo.changelog.filteredrevs # nodemap has no filtering
return cs
@@ -540,8 +550,9 @@
Obsolete changesets with non-obsolete descendants.
"""
revset.getargs(x, 0, 0, 'suspended takes no arguments')
- suspended = getrevs(repo, 'suspended')
- return [r for r in subset if r in suspended]
+ suspended = revset.baseset(getrevs(repo, 'suspended'))
+ suspended.sort()
+ return subset & suspended
@eh.revset('precursors')
@@ -550,8 +561,9 @@
Immediate precursors of changesets in set.
"""
s = revset.getset(repo, revset.fullreposet(repo), x)
- cs = _precursors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.baseset(_precursors(repo, s))
+ s.sort()
+ return subset & s
@eh.revset('allprecursors')
@@ -560,8 +572,9 @@
Transitive precursors of changesets in set.
"""
s = revset.getset(repo, revset.fullreposet(repo), x)
- cs = _allprecursors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.baseset(_allprecursors(repo, s))
+ s.sort()
+ return subset & s
@eh.revset('successors')
@@ -570,8 +583,9 @@
Immediate successors of changesets in set.
"""
s = revset.getset(repo, revset.fullreposet(repo), x)
- cs = _successors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.baseset(_successors(repo, s))
+ s.sort()
+ return subset & s
@eh.revset('allsuccessors')
def revsetallsuccessors(repo, subset, x):
@@ -579,8 +593,9 @@
Transitive successors of changesets in set.
"""
s = revset.getset(repo, revset.fullreposet(repo), x)
- cs = _allsuccessors(repo, s)
- return [r for r in subset if r in cs]
+ s = revset.baseset(_allsuccessors(repo, s))
+ s.sort()
+ return subset & s
### template keywords
# XXX it does not handle troubles well :-/
@@ -1740,8 +1755,8 @@
XXX this woobly function won't survive XXX
"""
- repo = ctx.repo.unfitered()
- for base in repo.set('reverse(precursors(%d))', ctx):
+ repo = ctx._repo.unfiltered()
+ for base in repo.set('reverse(allprecursors(%d))', ctx):
newer = obsolete.successorssets(ctx._repo, base.node())
# drop filter and solution including the original ctx
newer = [n for n in newer if n and ctx.node() not in n]