diff --git a/llvm/utils/lit/lit/main.py b/llvm/utils/lit/lit/main.py --- a/llvm/utils/lit/lit/main.py +++ b/llvm/utils/lit/lit/main.py @@ -102,7 +102,7 @@ print_results(discovered_tests, elapsed, opts) for report in opts.reports: - report.write_results(discovered_tests, elapsed) + report.write_results(discovered_tests, elapsed, opts.runShard) if lit_config.numErrors: sys.stderr.write('\n%d error(s) in tests\n' % lit_config.numErrors) diff --git a/llvm/utils/lit/lit/reports.py b/llvm/utils/lit/lit/reports.py --- a/llvm/utils/lit/lit/reports.py +++ b/llvm/utils/lit/lit/reports.py @@ -16,7 +16,7 @@ def __init__(self, output_file): self.output_file = output_file - def write_results(self, tests, elapsed): + def write_results(self, tests, elapsed, shard): unexecuted_codes = {lit.Test.EXCLUDED, lit.Test.SKIPPED} tests = [t for t in tests if t.result.code not in unexecuted_codes] # Construct the data we will write. @@ -86,7 +86,7 @@ self.skipped_codes = {lit.Test.EXCLUDED, lit.Test.SKIPPED, lit.Test.UNSUPPORTED} - def write_results(self, tests, elapsed): + def write_results(self, tests, elapsed, shard): tests.sort(key=by_suite_and_test_path) tests_by_suite = itertools.groupby(tests, lambda t: t.suite) @@ -94,10 +94,15 @@ file.write('\n') file.write('\n'.format(time=elapsed)) for suite, test_iter in tests_by_suite: - self._write_testsuite(file, suite, list(test_iter)) + self._write_testsuite(file, suite, list(test_iter), shard) file.write('\n') - def _write_testsuite(self, file, suite, tests): + def _write_testsuite(self, file, suite, tests, shard): + print("_write_testsuite:", shard) + # When running multiple shards, don't include skipped tests in the xunit output + # since merging the files will result in duplicates otherwise: + if shard is not None: + tests = [t for t in tests if t.result.code != lit.Test.EXCLUDED] skipped = sum(1 for t in tests if t.result.code in self.skipped_codes) failures = sum(1 for t in tests if t.isFailure()) @@ -144,7 +149,7 @@ def _get_skip_reason(self, test): code = test.result.code if code == lit.Test.EXCLUDED: - return 'Test not selected (--filter, --max-tests, --run-shard)' + return 'Test not selected (--filter, --max-tests)' if code == lit.Test.SKIPPED: return 'User interrupt'