mercurial/revlog.py
changeset 14549 48ec0763afbb
parent 14523 b4175b72bbd8
child 14960 497819817307
equal deleted inserted replaced
14548:cd1a01550ca2 14549:48ec0763afbb
   489             roots = list(roots)
   489             roots = list(roots)
   490             if not roots:
   490             if not roots:
   491                 return nonodes
   491                 return nonodes
   492             lowestrev = min([self.rev(n) for n in roots])
   492             lowestrev = min([self.rev(n) for n in roots])
   493         else:
   493         else:
   494             roots = [nullid] # Everybody's a descendent of nullid
   494             roots = [nullid] # Everybody's a descendant of nullid
   495             lowestrev = nullrev
   495             lowestrev = nullrev
   496         if (lowestrev == nullrev) and (heads is None):
   496         if (lowestrev == nullrev) and (heads is None):
   497             # We want _all_ the nodes!
   497             # We want _all_ the nodes!
   498             return ([self.node(r) for r in self], [nullid], list(self.heads()))
   498             return ([self.node(r) for r in self], [nullid], list(self.heads()))
   499         if heads is None:
   499         if heads is None:
   526                 # A node's revision number represents its place in a
   526                 # A node's revision number represents its place in a
   527                 # topologically sorted list of nodes.
   527                 # topologically sorted list of nodes.
   528                 r = self.rev(n)
   528                 r = self.rev(n)
   529                 if r >= lowestrev:
   529                 if r >= lowestrev:
   530                     if n not in ancestors:
   530                     if n not in ancestors:
   531                         # If we are possibly a descendent of one of the roots
   531                         # If we are possibly a descendant of one of the roots
   532                         # and we haven't already been marked as an ancestor
   532                         # and we haven't already been marked as an ancestor
   533                         ancestors.add(n) # Mark as ancestor
   533                         ancestors.add(n) # Mark as ancestor
   534                         # Add non-nullid parents to list of nodes to tag.
   534                         # Add non-nullid parents to list of nodes to tag.
   535                         nodestotag.update([p for p in self.parents(n) if
   535                         nodestotag.update([p for p in self.parents(n) if
   536                                            p != nullid])
   536                                            p != nullid])
   560                 # We are descending from nullid, and don't need to care about
   560                 # We are descending from nullid, and don't need to care about
   561                 # any other roots.
   561                 # any other roots.
   562                 lowestrev = nullrev
   562                 lowestrev = nullrev
   563                 roots = [nullid]
   563                 roots = [nullid]
   564         # Transform our roots list into a set.
   564         # Transform our roots list into a set.
   565         descendents = set(roots)
   565         descendants = set(roots)
   566         # Also, keep the original roots so we can filter out roots that aren't
   566         # Also, keep the original roots so we can filter out roots that aren't
   567         # 'real' roots (i.e. are descended from other roots).
   567         # 'real' roots (i.e. are descended from other roots).
   568         roots = descendents.copy()
   568         roots = descendants.copy()
   569         # Our topologically sorted list of output nodes.
   569         # Our topologically sorted list of output nodes.
   570         orderedout = []
   570         orderedout = []
   571         # Don't start at nullid since we don't want nullid in our output list,
   571         # Don't start at nullid since we don't want nullid in our output list,
   572         # and if nullid shows up in descedents, empty parents will look like
   572         # and if nullid shows up in descedents, empty parents will look like
   573         # they're descendents.
   573         # they're descendants.
   574         for r in xrange(max(lowestrev, 0), highestrev + 1):
   574         for r in xrange(max(lowestrev, 0), highestrev + 1):
   575             n = self.node(r)
   575             n = self.node(r)
   576             isdescendent = False
   576             isdescendant = False
   577             if lowestrev == nullrev:  # Everybody is a descendent of nullid
   577             if lowestrev == nullrev:  # Everybody is a descendant of nullid
   578                 isdescendent = True
   578                 isdescendant = True
   579             elif n in descendents:
   579             elif n in descendants:
   580                 # n is already a descendent
   580                 # n is already a descendant
   581                 isdescendent = True
   581                 isdescendant = True
   582                 # This check only needs to be done here because all the roots
   582                 # This check only needs to be done here because all the roots
   583                 # will start being marked is descendents before the loop.
   583                 # will start being marked is descendants before the loop.
   584                 if n in roots:
   584                 if n in roots:
   585                     # If n was a root, check if it's a 'real' root.
   585                     # If n was a root, check if it's a 'real' root.
   586                     p = tuple(self.parents(n))
   586                     p = tuple(self.parents(n))
   587                     # If any of its parents are descendents, it's not a root.
   587                     # If any of its parents are descendants, it's not a root.
   588                     if (p[0] in descendents) or (p[1] in descendents):
   588                     if (p[0] in descendants) or (p[1] in descendants):
   589                         roots.remove(n)
   589                         roots.remove(n)
   590             else:
   590             else:
   591                 p = tuple(self.parents(n))
   591                 p = tuple(self.parents(n))
   592                 # A node is a descendent if either of its parents are
   592                 # A node is a descendant if either of its parents are
   593                 # descendents.  (We seeded the dependents list with the roots
   593                 # descendants.  (We seeded the dependents list with the roots
   594                 # up there, remember?)
   594                 # up there, remember?)
   595                 if (p[0] in descendents) or (p[1] in descendents):
   595                 if (p[0] in descendants) or (p[1] in descendants):
   596                     descendents.add(n)
   596                     descendants.add(n)
   597                     isdescendent = True
   597                     isdescendant = True
   598             if isdescendent and ((ancestors is None) or (n in ancestors)):
   598             if isdescendant and ((ancestors is None) or (n in ancestors)):
   599                 # Only include nodes that are both descendents and ancestors.
   599                 # Only include nodes that are both descendants and ancestors.
   600                 orderedout.append(n)
   600                 orderedout.append(n)
   601                 if (ancestors is not None) and (n in heads):
   601                 if (ancestors is not None) and (n in heads):
   602                     # We're trying to figure out which heads are reachable
   602                     # We're trying to figure out which heads are reachable
   603                     # from roots.
   603                     # from roots.
   604                     # Mark this head as having been reached
   604                     # Mark this head as having been reached