mercurial/obsolete.py
changeset 51644 f28c52a9f7b4
parent 51631 bf1d26bd5b6a
child 51645 ff523675cd69
--- a/mercurial/obsolete.py	Wed Jun 12 11:29:11 2024 +0200
+++ b/mercurial/obsolete.py	Tue Jun 11 18:47:50 2024 +0200
@@ -771,10 +771,11 @@
             _addchildren(self.children, markers)
         _checkinvalidmarkers(self.repo, markers)
 
-    def relevantmarkers(self, nodes):
-        """return a set of all obsolescence markers relevant to a set of nodes.
+    def relevantmarkers(self, nodes=None, revs=None):
+        """return a set of all obsolescence markers relevant to a set of
+        nodes or revisions.
 
-        "relevant" to a set of nodes mean:
+        "relevant" to a set of nodes or revisions mean:
 
         - marker that use this changeset as successor
         - prune marker of direct children on this changeset
@@ -782,10 +783,24 @@
           markers
 
         It is a set so you cannot rely on order."""
+        if nodes is None:
+            nodes = set()
+        if revs is None:
+            revs = set()
 
-        pendingnodes = set(nodes)
+        get_rev = self.repo.unfiltered().changelog.index.get_rev
+        pendingnodes = set()
+        for marker in self._all:
+            for node in (marker[0],) + marker[1] + (marker[5] or ()):
+                if node in nodes:
+                    pendingnodes.add(node)
+                elif revs:
+                    rev = get_rev(node)
+                    if rev is not None and rev in revs:
+                        pendingnodes.add(node)
         seenmarkers = set()
-        seennodes = set(pendingnodes)
+        seenmarkers = set()
+        seennodes = set()
         precursorsmarkers = self.predecessors
         succsmarkers = self.successors
         children = self.children