# HG changeset patch # User Boris Feld # Date 1527787384 -7200 # Node ID a577a199983c5033192660c55db909df83fe65fc # Parent b8f75bc9f6233671884e1c065810a18685469669 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 -r b8f75bc9f623 -r a577a199983c contrib/perf.py --- a/contrib/perf.py Thu May 31 18:48:08 2018 +0200 +++ b/contrib/perf.py Thu May 31 19:23:04 2018 +0200 @@ -81,6 +81,15 @@ except (AttributeError, ImportError): queue = util.queue +try: + from mercurial import logcmdutil + makelogtemplater = logcmdutil.maketemplater +except (AttributeError, ImportError): + try: + 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 +910,26 @@ [('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)