mercurial/cmdutil.py
changeset 10024 2b630e4c8f2f
parent 10012 2bfe1a23dafa
child 10026 0b0a46607ac9
equal deleted inserted replaced
10023:15fbbc939373 10024:2b630e4c8f2f
  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