diff -r be4dc0007b8d -r 15412bba5a68 mercurial/revset.py --- a/mercurial/revset.py Thu Feb 07 00:32:26 2013 +0000 +++ b/mercurial/revset.py Thu Jun 11 11:42:46 2015 -0700 @@ -91,23 +91,27 @@ # (and if it is not, it should.) minroot = min(roots) roots = set(roots) + # prefetch all the things! (because python is slow) + reached = reachable.add + dovisit = visit.append + nextvisit = visit.pop # open-code the post-order traversal due to the tiny size of # sys.getrecursionlimit() while visit: - rev = visit.pop() + rev = nextvisit() if rev in roots: - reachable.add(rev) + reached(rev) parents = parentrevs(rev) seen[rev] = parents for parent in parents: if parent >= minroot and parent not in seen: - visit.append(parent) + dovisit(parent) if not reachable: return baseset() for rev in sorted(seen): for parent in seen[rev]: if parent in reachable: - reachable.add(rev) + reached(rev) return baseset(sorted(reachable)) elements = {