--- a/mercurial/revlog.py Sat Feb 06 10:23:18 2010 +0100
+++ b/mercurial/revlog.py Sat Feb 06 11:27:22 2010 +0100
@@ -1137,17 +1137,22 @@
self._cache = (node, curr, text)
return node
+ def descendant(self, a, b):
+ if a > b:
+ return False
+ for i in self.descendants(a):
+ if i == b:
+ return True
+ elif i > b:
+ break
+ return False
+
def ancestor(self, a, b):
"""calculate the least common ancestor of nodes a and b"""
- # fast path, check if it is a descendant
- a, b = self.rev(a), self.rev(b)
start, end = sorted((a, b))
- for i in self.descendants(start):
- if i == end:
- return self.node(start)
- elif i > end:
- break
+ if self.descendant(a, b):
+ return self.node(start)
def parents(rev):
return [p for p in self.parentrevs(rev) if p != nullrev]