mercurial/revlog.py
changeset 1550 ccb9b62de892
parent 1535 7ae0ce7a3dc4
child 1551 e793cbc8be00
equal deleted inserted replaced
1547:4dea10839201 1550:ccb9b62de892
   407         assert orderedout
   407         assert orderedout
   408         assert roots
   408         assert roots
   409         assert heads
   409         assert heads
   410         return (orderedout, roots, heads)
   410         return (orderedout, roots, heads)
   411 
   411 
   412     def heads(self, stop=None):
   412     def heads(self, start=nullid):
   413         """return the list of all nodes that have no children"""
   413         """return the list of all nodes that have no children
   414         p = {}
   414         if start is specified, only heads that are children of
   415         h = []
   415         start will be returned"""
   416         stoprev = 0
   416         reachable = {start: 1}
   417         if stop and stop in self.nodemap:
   417         heads = {start: 1}
   418             stoprev = self.rev(stop)
   418         startrev = self.rev(start)
   419 
   419 
   420         for r in range(self.count() - 1, -1, -1):
   420         for r in xrange(startrev + 1, self.count()):
   421             n = self.node(r)
   421             n = self.node(r)
   422             if n not in p:
       
   423                 h.append(n)
       
   424             if n == stop:
       
   425                 break
       
   426             if r < stoprev:
       
   427                 break
       
   428             for pn in self.parents(n):
   422             for pn in self.parents(n):
   429                 p[pn] = 1
   423                 if pn in reachable:
   430         return h
   424                     reachable[n] = 1
       
   425                     heads[n] = 1
       
   426                 if pn in heads:
       
   427                     del heads[pn]
       
   428         return heads.keys()
   431 
   429 
   432     def children(self, node):
   430     def children(self, node):
   433         """find the children of a given node"""
   431         """find the children of a given node"""
   434         c = []
   432         c = []
   435         p = self.rev(node)
   433         p = self.rev(node)