[PATCH 5 of 6] perftemplating: stop going through the log command
Boris Feld
boris.feld at octobus.net
Mon Jun 11 03:52:24 EDT 2018
# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1527787384 -7200
# Thu May 31 19:23:04 2018 +0200
# Node ID d3a7e385f495769fc0bdd37a0801dfb7ee7f153d
# Parent a8dd8972d7b4e809dd9533af7e977ad686b6220c
# EXP-Topic perftemplate
# Available At https://bitbucket.org/octobus/mercurial-devel/
# hg pull https://bitbucket.org/octobus/mercurial-devel/ -r d3a7e385f495
perftemplating: stop going through the log command
Only benchmark the rendering phase by moving steps outside of the timed
function:
* revisions resolution,
* template parsing
diff --git a/contrib/perf.py b/contrib/perf.py
--- a/contrib/perf.py
+++ b/contrib/perf.py
@@ -81,6 +81,16 @@ except (AttributeError, ImportError):
except (AttributeError, ImportError):
queue = util.queue
+try:
+ from mercurial import logcmdutil
+ makelogtemplater = logcmdutil.maketemplater
+except (AttributeError, ImportError):
+ try:
+ from mercurial import cmdutil
+ makelogtemplater = cmdutil.makelogtemplater
+ except (AttributeError, ImportError):
+ makelogtemplater = None
+
# for "historical portability":
# define util.safehasattr forcibly, because util.safehasattr has been
# available since 1.9.3 (or 94b200a11cf7)
@@ -901,14 +911,26 @@ def perfmoonwalk(ui, repo, **opts):
[('r', 'rev', [], 'revisions to run the template on'),
] + formatteropts)
def perftemplating(ui, repo, **opts):
+ if makelogtemplater is None:
+ ui.write_err('incompatible Mercurial version')
+ return 1
+
nullui = ui.copy()
nullui.fout = open(os.devnull, 'wb')
nullui.disablepager()
revs = opts.get('rev')
+ if not revs:
+ revs = ['all()']
+ revs = list(scmutil.revrange(repo, revs))
+
+ template = ('{date|shortdate} [{rev}:{node|short}]'
+ ' {author|person}: {desc|firstline}\n')
+ displayer = makelogtemplater(nullui, repo, template)
def format():
- commands.log(nullui, repo, rev=revs, date='', user='',
- template='{date|shortdate} [{rev}:{node|short}]'
- ' {author|person}: {desc|firstline}\n')
+ for r in revs:
+ ctx = repo[r]
+ displayer.show(ctx)
+ displayer.flush(ctx)
timer, fm = gettimer(ui, opts)
timer(format)
More information about the Mercurial-devel
mailing list