# HG changeset patch # User Henrik Stuart # Date 1247509157 -7200 # Node ID d3b995dd4eab7dbef1cedf892820fa822617e43c # Parent 78e54b9f3a629ba3f5200f8e0bcd165b5398b094 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. diff -r 78e54b9f3a62 -r d3b995dd4eab mercurial/localrepo.py --- 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)