mercurial/obsolete.py
branchstable
changeset 51661 a0f1378b932e
parent 51660 66aa49e6e5d1
child 51667 b8647465b59a
child 51690 493034cc3265
equal deleted inserted replaced
51660:66aa49e6e5d1 51661:a0f1378b932e
   769             _addpredecessors(self.predecessors, markers)
   769             _addpredecessors(self.predecessors, markers)
   770         if self._cached('children'):
   770         if self._cached('children'):
   771             _addchildren(self.children, markers)
   771             _addchildren(self.children, markers)
   772         _checkinvalidmarkers(self.repo, markers)
   772         _checkinvalidmarkers(self.repo, markers)
   773 
   773 
   774     def relevantmarkers(self, nodes=None, revs=None):
   774     def relevantmarkers(self, nodes):
   775         """return a set of all obsolescence markers relevant to a set of
   775         """return a set of all obsolescence markers relevant to a set of nodes.
   776         nodes or revisions.
   776 
   777 
   777         "relevant" to a set of nodes mean:
   778         "relevant" to a set of nodes or revisions mean:
       
   779 
   778 
   780         - marker that use this changeset as successor
   779         - marker that use this changeset as successor
   781         - prune marker of direct children on this changeset
   780         - prune marker of direct children on this changeset
   782         - recursive application of the two rules on predecessors of these
   781         - recursive application of the two rules on predecessors of these
   783           markers
   782           markers
   784 
   783 
   785         It is a set so you cannot rely on order."""
   784         It is a set so you cannot rely on order."""
   786         if nodes is None:
   785 
   787             nodes = set()
   786         pendingnodes = set(nodes)
   788         if revs is None:
       
   789             revs = set()
       
   790 
       
   791         get_rev = self.repo.unfiltered().changelog.index.get_rev
       
   792         pendingnodes = set()
       
   793         for marker in self._all:
       
   794             for node in (marker[0],) + marker[1] + (marker[5] or ()):
       
   795                 if node in nodes:
       
   796                     pendingnodes.add(node)
       
   797                 elif revs:
       
   798                     rev = get_rev(node)
       
   799                     if rev is not None and rev in revs:
       
   800                         pendingnodes.add(node)
       
   801         seenmarkers = set()
   787         seenmarkers = set()
   802         seenmarkers = set()
   788         seennodes = set(pendingnodes)
   803         seennodes = set()
       
   804         precursorsmarkers = self.predecessors
   789         precursorsmarkers = self.predecessors
   805         succsmarkers = self.successors
   790         succsmarkers = self.successors
   806         children = self.children
   791         children = self.children
   807         while pendingnodes:
   792         while pendingnodes:
   808             direct = set()
   793             direct = set()