branch heads: optimise computation of branch head cache (
issue1734)
The previous branch heads cache implementation iterated all ancestors
for each new revision in the repository, causing a massive slowdown on
cloning larger repositories.
--- a/mercurial/localrepo.py Sun Jul 12 00:46:43 2009 -0500
+++ b/mercurial/localrepo.py Mon Jul 13 20:19:17 2009 +0200
@@ -473,9 +473,8 @@
latest = newnodes.pop()
if latest not in bheads:
continue
- reachable = set()
- for bh in bheads:
- reachable |= self.changelog.reachable(latest, bh)
+ minbhrev = self[min([self[bh].rev() for bh in bheads])].node()
+ reachable = self.changelog.reachable(latest, minbhrev)
bheads = [b for b in bheads if b not in reachable]
newbheads.insert(0, latest)
bheads.extend(newbheads)