Mercurial > hg
changeset 18172:e6c5e0092469
cmdutil: make getgraphlogrevs limit-aware
For a repository with over 400,000 changesets, this speeds up graphlog with a
small limit by around 0.05 seconds (~50%).
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Fri, 28 Dec 2012 16:25:12 -0800 |
parents | 9d350f2d9458 |
children | 9916d104c485 |
files | mercurial/cmdutil.py |
diffstat | 1 files changed, 17 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/cmdutil.py Fri Dec 28 16:25:00 2012 -0800 +++ b/mercurial/cmdutil.py Fri Dec 28 16:25:12 2012 -0800 @@ -1401,6 +1401,7 @@ """ if not len(repo): return [], None, None + limit = loglimit(opts) # Default --rev value depends on --follow but --follow behaviour # depends on revisions resolved from --rev... follow = opts.get('follow') or opts.get('follow_first') @@ -1435,7 +1436,22 @@ # --hidden is still experimental and not worth a dedicated revset # yet. Fortunately, filtering revision number is fast. hiddenrevs = repo.hiddenrevs - revs = [r for r in revs if r not in hiddenrevs] + nrevs = [] + taken = 0 + if limit is not None: + for i in xrange(len(revs)): + if taken >= limit: + break + r = revs[i] + if r not in hiddenrevs: + nrevs.append(r) + taken += 1 + revs = nrevs + else: + revs = [r for r in revs if r not in hiddenrevs] + elif limit is not None: + revs = revs[:limit] + return revs, expr, filematcher def displaygraph(ui, dag, displayer, showparents, edgefn, getrenamed=None, @@ -1470,9 +1486,6 @@ def graphlog(ui, repo, *pats, **opts): # Parameters are identical to log command ones revs, expr, filematcher = getgraphlogrevs(repo, pats, opts) - limit = loglimit(opts) - if limit is not None: - revs = revs[:limit] revdag = graphmod.dagwalker(repo, revs) getrenamed = None