equal
deleted
inserted
replaced
1167 wanted.add(ctx.rev()) |
1167 wanted.add(ctx.rev()) |
1168 |
1168 |
1169 class followfilter(object): |
1169 class followfilter(object): |
1170 def __init__(self, onlyfirst=False): |
1170 def __init__(self, onlyfirst=False): |
1171 self.startrev = nullrev |
1171 self.startrev = nullrev |
1172 self.roots = [] |
1172 self.roots = set() |
1173 self.onlyfirst = onlyfirst |
1173 self.onlyfirst = onlyfirst |
1174 |
1174 |
1175 def match(self, rev): |
1175 def match(self, rev): |
1176 def realparents(rev): |
1176 def realparents(rev): |
1177 if self.onlyfirst: |
1177 if self.onlyfirst: |
1185 return True |
1185 return True |
1186 |
1186 |
1187 if rev > self.startrev: |
1187 if rev > self.startrev: |
1188 # forward: all descendants |
1188 # forward: all descendants |
1189 if not self.roots: |
1189 if not self.roots: |
1190 self.roots.append(self.startrev) |
1190 self.roots.add(self.startrev) |
1191 for parent in realparents(rev): |
1191 for parent in realparents(rev): |
1192 if parent in self.roots: |
1192 if parent in self.roots: |
1193 self.roots.append(rev) |
1193 self.roots.add(rev) |
1194 return True |
1194 return True |
1195 else: |
1195 else: |
1196 # backwards: all parents |
1196 # backwards: all parents |
1197 if not self.roots: |
1197 if not self.roots: |
1198 self.roots.extend(realparents(self.startrev)) |
1198 self.roots.update(realparents(self.startrev)) |
1199 if rev in self.roots: |
1199 if rev in self.roots: |
1200 self.roots.remove(rev) |
1200 self.roots.remove(rev) |
1201 self.roots.extend(realparents(rev)) |
1201 self.roots.update(realparents(rev)) |
1202 return True |
1202 return True |
1203 |
1203 |
1204 return False |
1204 return False |
1205 |
1205 |
1206 # it might be worthwhile to do this in the iterator if the rev range |
1206 # it might be worthwhile to do this in the iterator if the rev range |