comparison mercurial/cmdutil.py @ 10024:2b630e4c8f2f

log --follow: use a set instead of a list benchmarked with hg log -qf on the linux kernel: before: Time: real 39.010 secs (user 38.840+0.000 sys 0.060+0.000) after: Time: real 8.560 secs (user 8.440+0.000 sys 0.080+0.000)
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Thu, 10 Dec 2009 00:14:22 +0100
parents 2bfe1a23dafa
children 0b0a46607ac9
comparison
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