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 |