Debugging LIT scripts can be rather painful, as LIT directly does not
specify which line has failed.
Rather, FileCheck is expected to report the failing location, but it can
be often ambiguous if multiple commands are tested against the same
prefix. This change adds a -vv option, which echoes all output.
Then detecting the error becomes straightforward: last printed line is
the failing one.
Of course, it could be desired to try to get failing line number
directly from bash, but it involves excessive hacks on older bash
versions (cf.
https://stackoverflow.com/questions/
24398691/how-to-get-the-real-line-number-of-a-failing-bash-command)
Differential Revision: https://reviews.llvm.org/D35330
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@307938
91177308-0d34-0410-b5e6-
96231b3b80d8
Show more information on test failures, for example the entire test output
instead of just the test result.
Show more information on test failures, for example the entire test output
instead of just the test result.
+.. option:: -vv, --echo-all-commands
+
+ Echo all commands to stdout, as they are being executed.
+ This can be valuable for debugging test failures, as the last echoed command
+ will be the one which has failed.
+ This option implies ``--verbose``.
+
.. option:: -a, --show-all
Show more information about all tests, for example the entire test
.. option:: -a, --show-all
Show more information about all tests, for example the entire test
params, config_prefix = None,
maxIndividualTestTime = 0,
maxFailures = None,
params, config_prefix = None,
maxIndividualTestTime = 0,
maxFailures = None,
- parallelism_groups = []):
+ parallelism_groups = [],
+ echo_all_commands = False):
# The name of the test runner.
self.progname = progname
# The items to add to the PATH environment variable.
# The name of the test runner.
self.progname = progname
# The items to add to the PATH environment variable.
self.maxIndividualTestTime = maxIndividualTestTime
self.maxFailures = maxFailures
self.parallelism_groups = parallelism_groups
self.maxIndividualTestTime = maxIndividualTestTime
self.maxFailures = maxFailures
self.parallelism_groups = parallelism_groups
+ self.echo_all_commands = echo_all_commands
@property
def maxIndividualTestTime(self):
@property
def maxIndividualTestTime(self):
else:
if test.config.pipefail:
f.write('set -o pipefail;')
else:
if test.config.pipefail:
f.write('set -o pipefail;')
+ if litConfig.echo_all_commands:
+ f.write('set -x;')
f.write('{ ' + '; } &&\n{ '.join(commands) + '; }')
f.write('\n')
f.close()
f.write('{ ' + '; } &&\n{ '.join(commands) + '; }')
f.write('\n')
f.close()
format_group.add_argument("-v", "--verbose", dest="showOutput",
help="Show test output for failures",
action="store_true", default=False)
format_group.add_argument("-v", "--verbose", dest="showOutput",
help="Show test output for failures",
action="store_true", default=False)
+ format_group.add_argument("-vv", "--echo-all-commands",
+ dest="echoAllCommands",
+ action="store_true", default=False,
+ help="Echo all commands as they are executed to stdout.\
+ In case of failure, last command shown will be the\
+ failing one.")
format_group.add_argument("-a", "--show-all", dest="showAllOutput",
help="Display all commandlines and output",
action="store_true", default=False)
format_group.add_argument("-a", "--show-all", dest="showAllOutput",
help="Display all commandlines and output",
action="store_true", default=False)
if opts.maxFailures == 0:
parser.error("Setting --max-failures to 0 does not have any effect.")
if opts.maxFailures == 0:
parser.error("Setting --max-failures to 0 does not have any effect.")
+ if opts.echoAllCommands:
+ opts.showOutput = True
+
inputs = args
# Create the user defined parameters.
inputs = args
# Create the user defined parameters.
config_prefix = opts.configPrefix,
maxIndividualTestTime = maxIndividualTestTime,
maxFailures = opts.maxFailures,
config_prefix = opts.configPrefix,
maxIndividualTestTime = maxIndividualTestTime,
maxFailures = opts.maxFailures,
- parallelism_groups = {})
+ parallelism_groups = {},
+ echo_all_commands = opts.echoAllCommands)
# Perform test discovery.
run = lit.run.Run(litConfig,
# Perform test discovery.
run = lit.run.Run(litConfig,