# HG changeset patch # User Siddharth Agarwal # Date 2013-07-15 22:19:43 # Node ID 4da845cd854f12c03509cd875990b5aef82a4820 # Parent 33e1b2d4bdbcce13167d8d6614491dde5d628d59 summary: use missing ancestors algorithm to find new commits For a repository with around 520,000 commits and 190,000 files, this reduces the time hg summary takes from 5.5 seconds to 2.75. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -5480,18 +5480,8 @@ def summary(ui, repo, **opts): ui.write(_('commit: %s\n') % t.strip()) # all ancestors of branch heads - all ancestors of parent = new csets - new = [0] * len(repo) - cl = repo.changelog - for a in [cl.rev(n) for n in bheads]: - new[a] = 1 - for a in cl.ancestors([cl.rev(n) for n in bheads]): - new[a] = 1 - for a in [p.rev() for p in parents]: - if a >= 0: - new[a] = 0 - for a in cl.ancestors([p.rev() for p in parents]): - new[a] = 0 - new = sum(new) + new = len(repo.changelog.findmissing([ctx.node() for ctx in parents], + bheads)) if new == 0: # i18n: column positioning for "hg summary"