mercurial/discovery.py
changeset 29806 82e8c86cdd6d
parent 29805 f09d0004481c
child 29901 4d1e6f91f1c7
--- a/mercurial/discovery.py	Tue Aug 09 15:55:44 2016 +0200
+++ b/mercurial/discovery.py	Tue Aug 09 22:31:38 2016 +0200
@@ -76,11 +76,25 @@
     The sets are computed on demand from the heads, unless provided upfront
     by discovery.'''
 
-    def __init__(self, repo, commonheads=None, missingheads=None):
+    def __init__(self, repo, commonheads=None, missingheads=None,
+                 missingroots=None):
+        # at least one of them must not be set
+        assert None in (commonheads, missingroots)
         cl = repo.changelog
         if not missingheads:
             missingheads = cl.heads()
-        if not commonheads:
+        if missingroots:
+            discbases = []
+            for n in missingroots:
+                discbases.extend([p for p in cl.parents(n) if p != nullid])
+            # TODO remove call to nodesbetween.
+            # TODO populate attributes on outgoing instance instead of setting
+            # discbases.
+            csets, roots, heads = cl.nodesbetween(missingroots, missingheads)
+            included = set(csets)
+            missingheads = heads
+            commonheads = [n for n in discbases if n not in included]
+        elif not commonheads:
             commonheads = [nullid]
         self.commonheads = commonheads
         self.missingheads = missingheads
@@ -106,27 +120,6 @@
             self._computecommonmissing()
         return self._missing
 
-def outgoingbetween(repo, roots, heads):
-    """create an ``outgoing`` consisting of nodes between roots and heads
-
-    The ``missing`` nodes will be descendants of any of the ``roots`` and
-    ancestors of any of the ``heads``, both are which are defined as a list
-    of binary nodes.
-    """
-    cl = repo.changelog
-    if not roots:
-        roots = [nullid]
-    discbases = []
-    for n in roots:
-        discbases.extend([p for p in cl.parents(n) if p != nullid])
-    # TODO remove call to nodesbetween.
-    # TODO populate attributes on outgoing instance instead of setting
-    # discbases.
-    csets, roots, heads = cl.nodesbetween(roots, heads)
-    included = set(csets)
-    discbases = [n for n in discbases if n not in included]
-    return outgoing(repo, discbases, heads)
-
 def findcommonoutgoing(repo, other, onlyheads=None, force=False,
                        commoninc=None, portable=False):
     '''Return an outgoing instance to identify the nodes present in repo but