diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -1137,17 +1137,22 @@ class revlog(object): 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]