equal
deleted
inserted
replaced
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) |