From patchwork Fri Jul 21 15:44:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [STABLE] run-tests: pre instantiate pygments objects From: Jun Wu X-Patchwork-Id: 22540 Message-Id: To: Date: Fri, 21 Jul 2017 08:44:30 -0700 # HG changeset patch # User Jun Wu # Date 1500651819 25200 # Fri Jul 21 08:43:39 2017 -0700 # Branch stable # Node ID d0e9f607360bdfe9e39a7b9aff765265292b0eeb # Parent 637267114513d02072256219ad866565771f42e9 # Available At https://bitbucket.org/quark-zju/hg-draft # hg pull https://bitbucket.org/quark-zju/hg-draft -r d0e9f607360b run-tests: pre instantiate pygments objects This speeds up run-tests.py diff output by 10x, which affects developer experience significantly. As demonstrated by the following test: ``` #require pygments $ for i in `seq 1 200`; do > echo ' $ echo '$i >> test-a.t > echo ' wrong' >> test-a.t > done $ cat > walltime.py < from __future__ import absolute_import, print_function > import os, sys, time > t1 = time.time() > os.system(' '.join(sys.argv[1:]) + ' >/dev/null 2>/dev/null') > t2 = time.time() > print('%0.2f' % (t2 - t1)) > EOF $ $PYTHON walltime.py $TESTDIR/run-tests.py -l --color=never $TESTTMP/test-a.t 0.24 Before this patch: $ $PYTHON walltime.py $TESTDIR/run-tests.py -l --color=always $TESTTMP/test-a.t 2.46 After this patch: $ $PYTHON walltime.py $TESTDIR/run-tests.py -l --color=always $TESTTMP/test-a.t 0.25 ``` diff --git a/tests/run-tests.py b/tests/run-tests.py --- a/tests/run-tests.py +++ b/tests/run-tests.py @@ -97,4 +97,6 @@ if os.name != 'nt': import pygments.formatters as formatters pygmentspresent = True + difflexer = lexers.DiffLexer() + terminal256formatteer = formatters.Terminal256Formatter() except ImportError: pass @@ -1652,8 +1654,7 @@ class TestResult(unittest._TextTestResul for line in lines: if self.color: - line = pygments.highlight( - line, - lexers.DiffLexer(), - formatters.Terminal256Formatter()) + line = pygments.highlight(line, + difflexer, + terminal256formatteer) if PYTHON3: self.stream.flush()