mercurial/revlog.py
changeset 10897 adb6a291bbdb
parent 10404 3e7cbe859871
child 10900 cf016c9831d1
equal deleted inserted replaced
10895:217557b26bc7 10897:adb6a291bbdb
   843                         c.append(self.node(r))
   843                         c.append(self.node(r))
   844             elif p == nullrev:
   844             elif p == nullrev:
   845                 c.append(self.node(r))
   845                 c.append(self.node(r))
   846         return c
   846         return c
   847 
   847 
       
   848     def descendant(self, start, end):
       
   849         for i in self.descendants(start):
       
   850             if i == end:
       
   851                 return True
       
   852             elif i > end:
       
   853                 break
       
   854         return False
       
   855 
       
   856     def ancestor(self, a, b):
       
   857         """calculate the least common ancestor of nodes a and b"""
       
   858 
       
   859         # fast path, check if it is a descendant
       
   860         a, b = self.rev(a), self.rev(b)
       
   861         start, end = sorted((a, b))
       
   862         if self.descendant(start, end):
       
   863             return self.node(start)
       
   864 
       
   865         def parents(rev):
       
   866             return [p for p in self.parentrevs(rev) if p != nullrev]
       
   867 
       
   868         c = ancestor.ancestor(a, b, parents)
       
   869         if c is None:
       
   870             return nullid
       
   871 
       
   872         return self.node(c)
       
   873 
   848     def _match(self, id):
   874     def _match(self, id):
   849         if isinstance(id, (long, int)):
   875         if isinstance(id, (long, int)):
   850             # rev
   876             # rev
   851             return self.node(id)
   877             return self.node(id)
   852         if len(id) == 20:
   878         if len(id) == 20:
  1116             self.checkinlinesize(transaction, ifh)
  1142             self.checkinlinesize(transaction, ifh)
  1117 
  1143 
  1118         if type(text) == str: # only accept immutable objects
  1144         if type(text) == str: # only accept immutable objects
  1119             self._cache = (node, curr, text)
  1145             self._cache = (node, curr, text)
  1120         return node
  1146         return node
  1121 
       
  1122     def descendant(self, start, end):
       
  1123         for i in self.descendants(start):
       
  1124             if i == end:
       
  1125                 return True
       
  1126             elif i > end:
       
  1127                 break
       
  1128         return False
       
  1129 
       
  1130     def ancestor(self, a, b):
       
  1131         """calculate the least common ancestor of nodes a and b"""
       
  1132 
       
  1133         # fast path, check if it is a descendant
       
  1134         a, b = self.rev(a), self.rev(b)
       
  1135         start, end = sorted((a, b))
       
  1136         if self.descendant(start, end):
       
  1137             return self.node(start)
       
  1138 
       
  1139         def parents(rev):
       
  1140             return [p for p in self.parentrevs(rev) if p != nullrev]
       
  1141 
       
  1142         c = ancestor.ancestor(a, b, parents)
       
  1143         if c is None:
       
  1144             return nullid
       
  1145 
       
  1146         return self.node(c)
       
  1147 
  1147 
  1148     def group(self, nodelist, lookup, infocollect=None):
  1148     def group(self, nodelist, lookup, infocollect=None):
  1149         """Calculate a delta group, yielding a sequence of changegroup chunks
  1149         """Calculate a delta group, yielding a sequence of changegroup chunks
  1150         (strings).
  1150         (strings).
  1151 
  1151