# HG changeset patch # User Yuya Nishihara # Date 2017-06-17 13:33:23 # Node ID b9e2269aeff89ee5ff8665a8537d852d2dadab1a # Parent 1c97df5e3b46d1b8dc3e0df3ae07b35c55c0db68 dagop: unnest inner generator of revancestors() This just moves iterate() to module-level function. diff --git a/mercurial/dagop.py b/mercurial/dagop.py --- a/mercurial/dagop.py +++ b/mercurial/dagop.py @@ -20,43 +20,43 @@ from . import ( baseset = smartset.baseset generatorset = smartset.generatorset -def revancestors(repo, revs, followfirst): - """Like revlog.ancestors(), but supports followfirst.""" +def _genrevancestors(repo, revs, followfirst): if followfirst: cut = 1 else: cut = None cl = repo.changelog + revs.sort(reverse=True) + irevs = iter(revs) + h = [] - def iterate(): - revs.sort(reverse=True) - irevs = iter(revs) - h = [] - - inputrev = next(irevs, None) - if inputrev is not None: - heapq.heappush(h, -inputrev) + inputrev = next(irevs, None) + if inputrev is not None: + heapq.heappush(h, -inputrev) - seen = set() - while h: - current = -heapq.heappop(h) - if current == inputrev: - inputrev = next(irevs, None) - if inputrev is not None: - heapq.heappush(h, -inputrev) - if current not in seen: - seen.add(current) - yield current - try: - for parent in cl.parentrevs(current)[:cut]: - if parent != node.nullrev: - heapq.heappush(h, -parent) - except error.WdirUnsupported: - for parent in repo[current].parents()[:cut]: - if parent.rev() != node.nullrev: - heapq.heappush(h, -parent.rev()) + seen = set() + while h: + current = -heapq.heappop(h) + if current == inputrev: + inputrev = next(irevs, None) + if inputrev is not None: + heapq.heappush(h, -inputrev) + if current not in seen: + seen.add(current) + yield current + try: + for parent in cl.parentrevs(current)[:cut]: + if parent != node.nullrev: + heapq.heappush(h, -parent) + except error.WdirUnsupported: + for parent in repo[current].parents()[:cut]: + if parent.rev() != node.nullrev: + heapq.heappush(h, -parent.rev()) - return generatorset(iterate(), iterasc=False) +def revancestors(repo, revs, followfirst): + """Like revlog.ancestors(), but supports followfirst.""" + gen = _genrevancestors(repo, revs, followfirst) + return generatorset(gen, iterasc=False) def revdescendants(repo, revs, followfirst): """Like revlog.descendants() but supports followfirst."""