Skip to content
Snippets Groups Projects
Commit 1c3184d7 authored by Gregory Szorc's avatar Gregory Szorc
Browse files

dagop: extract headsetofconnecteds() from dagutil

The functionality for resolving the set of DAG heads from a
subset simply requires a function to resolve parent revisions.

Let's establish a function in the dagop module to do this, which
seems to be where generic DAG functionality goes these days.

Differential Revision: https://phab.mercurial-scm.org/D4327
parent 274acf37
No related branches found
No related tags found
No related merge requests found
......@@ -715,3 +715,26 @@
for g in groups:
for r in g[0]:
yield r
def headrevs(revs, parentsfn):
"""Resolve the set of heads from a set of revisions.
Receives an iterable of revision numbers and a callbable that receives a
revision number and returns an iterable of parent revision numbers, possibly
including nullrev.
Returns a set of revision numbers that are DAG heads within the passed
subset.
``nullrev`` is never included in the returned set, even if it is provided in
the input set.
"""
headrevs = set(revs)
for rev in revs:
for prev in parentsfn(rev):
headrevs.discard(prev)
headrevs.discard(node.nullrev)
return headrevs
......@@ -10,6 +10,10 @@
from .node import nullrev
from . import (
dagop,
)
class revlogdag(object):
'''dag interface to a revlog'''
......@@ -31,21 +35,6 @@
return [prev2]
return []
def headsetofconnecteds(self, ixs):
if not ixs:
return set()
rlog = self._revlog
idx = rlog.index
headrevs = set(ixs)
for rev in ixs:
revdata = idx[rev]
for i in [5, 6]:
prev = revdata[i]
if prev != nullrev:
headrevs.discard(prev)
assert headrevs
return headrevs
def linearize(self, ixs):
'''linearize and topologically sort a list of revisions
......@@ -56,7 +45,7 @@
parent, then adding the rev itself to the output list.
'''
sorted = []
visit = list(self.headsetofconnecteds(ixs))
visit = list(dagop.headrevs(ixs, self.parents))
visit.sort(reverse=True)
finished = set()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment