diff -r a3a36bcf122e -r 1858fc2327ef mercurial/obsutil.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mercurial/obsutil.py Thu Jun 15 13:02:58 2017 +0200 @@ -0,0 +1,36 @@ +# obsutil.py - utility functions for obsolescence +# +# Copyright 2017 Boris Feld +# +# This software may be used and distributed according to the terms of the +# GNU General Public License version 2 or any later version. + +from __future__ import absolute_import + +def closestpredecessors(repo, nodeid): + """yield the list of next predecessors pointing on visible changectx nodes + + This function respect the repoview filtering, filtered revision will be + considered missing. + """ + + precursors = repo.obsstore.precursors + stack = [nodeid] + seen = set(stack) + + while stack: + current = stack.pop() + currentpreccs = precursors.get(current, ()) + + for prec in currentpreccs: + precnodeid = prec[0] + + # Basic cycle protection + if precnodeid in seen: + continue + seen.add(precnodeid) + + if precnodeid in repo: + yield precnodeid + else: + stack.append(precnodeid)