# HG changeset patch
# User Boris Feld <boris.feld@octobus.net>
# Date 2019-01-14 16:06:00
# Node ID 1421d0487a61ef92395806d79650fd1fb012b38c
# Parent  4c6fdc7e2e7d624e6be068b8a7fd88803f832231

revlog: accept a revs argument in `headrevs`

Computing the heads of an arbitrary set of revision is useful, we make it
possible to do so through the `headrevs` method of the revlog.

Right now, this is just calling dagop's implementation. However, we expect to
plug a native implementation soon.

diff --git a/mercurial/changelog.py b/mercurial/changelog.py
--- a/mercurial/changelog.py
+++ b/mercurial/changelog.py
@@ -347,8 +347,8 @@ class changelog(revlog.revlog):
     def reachableroots(self, minroot, heads, roots, includepath=False):
         return self.index.reachableroots2(minroot, heads, roots, includepath)
 
-    def headrevs(self):
-        if self.filteredrevs:
+    def headrevs(self, revs=None):
+        if revs is None and self.filteredrevs:
             try:
                 return self.index.headrevsfiltered(self.filteredrevs)
             # AttributeError covers non-c-extension environments and
@@ -356,7 +356,7 @@ class changelog(revlog.revlog):
             except AttributeError:
                 return self._headrevs()
 
-        return super(changelog, self).headrevs()
+        return super(changelog, self).headrevs(revs)
 
     def strip(self, *args, **kwargs):
         # XXX make something better than assert
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -1102,11 +1102,13 @@ class revlog(object):
         assert heads
         return (orderedout, roots, heads)
 
-    def headrevs(self):
-        try:
-            return self.index.headrevs()
-        except AttributeError:
-            return self._headrevs()
+    def headrevs(self, revs=None):
+        if revs is None:
+            try:
+                return self.index.headrevs()
+            except AttributeError:
+                return self._headrevs()
+        return dagop.headrevs(revs, self.parentrevs)
 
     def computephases(self, roots):
         return self.index.computephasesmapsets(roots)