mercurial/revlog.py
changeset 10329 ae0ae8691e47
parent 10325 bc72e21f9dc8
child 10395 ea52a2d4f42c
equal deleted inserted replaced
10328:0798a3d5f812 10329:ae0ae8691e47
  1135 
  1135 
  1136         if type(text) == str: # only accept immutable objects
  1136         if type(text) == str: # only accept immutable objects
  1137             self._cache = (node, curr, text)
  1137             self._cache = (node, curr, text)
  1138         return node
  1138         return node
  1139 
  1139 
  1140     def descendant(self, a, b):
  1140     def descendant(self, start, end):
  1141         if a > b:
  1141         for i in self.descendants(start):
  1142             return False
  1142             if i == end:
  1143         for i in self.descendants(a):
       
  1144             if i == b:
       
  1145                 return True
  1143                 return True
  1146             elif i > b:
  1144             elif i > end:
  1147                 break
  1145                 break
  1148         return False
  1146         return False
  1149 
  1147 
  1150     def ancestor(self, a, b):
  1148     def ancestor(self, a, b):
  1151         """calculate the least common ancestor of nodes a and b"""
  1149         """calculate the least common ancestor of nodes a and b"""
  1152 
  1150 
       
  1151         # fast path, check if it is a descendant
       
  1152         a, b = self.rev(a), self.rev(b)
  1153         start, end = sorted((a, b))
  1153         start, end = sorted((a, b))
  1154         if self.descendant(a, b):
  1154         if self.descendant(start, end):
  1155             return self.node(start)
  1155             return self.node(start)
  1156 
  1156 
  1157         def parents(rev):
  1157         def parents(rev):
  1158             return [p for p in self.parentrevs(rev) if p != nullrev]
  1158             return [p for p in self.parentrevs(rev) if p != nullrev]
  1159 
  1159