--- a/mercurial/dagop.py Thu Dec 07 13:20:47 2017 -0800
+++ b/mercurial/dagop.py Sun Oct 22 18:57:42 2017 +0900
@@ -77,7 +77,10 @@
def filectxancestors(fctxs, followfirst=False):
"""Like filectx.ancestors(), but can walk from multiple files/revisions,
- and includes the given fctxs themselves"""
+ and includes the given fctxs themselves
+
+ Yields (rev, {fctx, ...}) pairs in descending order.
+ """
visit = {}
def addvisit(fctx):
rev = fctx.rev()
@@ -93,13 +96,21 @@
for c in fctxs:
addvisit(c)
while visit:
- rev = max(visit)
- c = visit[rev].pop()
- if not visit[rev]:
- del visit[rev]
- yield c
- for parent in c.parents()[:cut]:
- addvisit(parent)
+ currev = max(visit)
+ curfctxs = visit.pop(currev)
+ yield currev, curfctxs
+ for c in curfctxs:
+ for parent in c.parents()[:cut]:
+ addvisit(parent)
+
+def filerevancestors(fctxs, followfirst=False):
+ """Like filectx.ancestors(), but can walk from multiple files/revisions,
+ and includes the given fctxs themselves
+
+ Returns a smartset.
+ """
+ gen = (rev for rev, _cs in filectxancestors(fctxs, followfirst))
+ return generatorset(gen, iterasc=False)
def _genrevancestors(repo, revs, followfirst, startdepth, stopdepth, cutfunc):
if followfirst: