Mercurial > public > mercurial-scm > hg-stable
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 |