From f8b7269f983aad40730ad845dae5c3d2f43093b0 Mon Sep 17 00:00:00 2001 From: Zinovy Nis Date: Wed, 27 Mar 2019 19:21:32 +0000 Subject: [PATCH] [clang-tidy] Handle missing yaml module in run-clang-tidy.py The Yaml module is missing on some systems and on many of clang buildbots. But the test for run-clang-tidy.py doesn't fail due to 'NOT' statement masking a python runtime error. This patch conditionally imports and enables the yaml module only if it's present in the system. If not, then '-export-fixes' is disabled. Differential Revision: https://reviews.llvm.org/D59734 llvm-svn: 357114 --- clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py | 11 +++++------ clang-tools-extra/clang-tidy/tool/run-clang-tidy.py | 17 +++++++++++------ .../test/clang-tidy/bugprone-parent-virtual-call.cpp | 0 clang-tools-extra/test/clang-tidy/run-clang-tidy.cpp | 1 + 4 files changed, 17 insertions(+), 12 deletions(-) mode change 100755 => 100644 clang-tools-extra/test/clang-tidy/bugprone-parent-virtual-call.cpp diff --git a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py index b9b0fd9..8b6ad90 100755 --- a/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py +++ b/clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py @@ -36,11 +36,10 @@ import tempfile import threading import traceback -yaml_imported = True try: import yaml except ImportError: - yaml_imported = False + yaml = None is_py2 = sys.version[0] == '2' @@ -144,7 +143,7 @@ def main(): default='') parser.add_argument('-path', dest='build_path', help='Path used to read a compile command database.') - if yaml_imported: + if yaml: parser.add_argument('-export-fixes', metavar='FILE', dest='export_fixes', help='Create a yaml file to store suggested fixes in, ' 'which can be applied with clang-apply-replacements.') @@ -204,7 +203,7 @@ def main(): max_task_count = min(len(lines_by_file), max_task_count) tmpdir = None - if yaml_imported and args.export_fixes: + if yaml and args.export_fixes: tmpdir = tempfile.mkdtemp() # Tasks for clang-tidy. @@ -238,7 +237,7 @@ def main(): # Run clang-tidy on files containing changes. command = [args.clang_tidy_binary] command.append('-line-filter=' + line_filter_json) - if yaml_imported and args.export_fixes: + if yaml and args.export_fixes: # Get a temporary file. We immediately close the handle so clang-tidy can # overwrite it. (handle, tmp_name) = tempfile.mkstemp(suffix='.yaml', dir=tmpdir) @@ -253,7 +252,7 @@ def main(): # Wait for all threads to be done. task_queue.join() - if yaml_imported and args.export_fixes: + if yaml and args.export_fixes: print('Writing fixes to ' + args.export_fixes + ' ...') try: merge_replacement_files(tmpdir, args.export_fixes) diff --git a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py index 5ec40f2..cfd4f41 100755 --- a/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py +++ b/clang-tools-extra/clang-tidy/tool/run-clang-tidy.py @@ -47,7 +47,11 @@ import sys import tempfile import threading import traceback -import yaml + +try: + import yaml +except ImportError: + yaml = None is_py2 = sys.version[0] == '2' @@ -199,9 +203,10 @@ def main(): 'headers to output diagnostics from. Diagnostics from ' 'the main file of each translation unit are always ' 'displayed.') - parser.add_argument('-export-fixes', metavar='filename', dest='export_fixes', - help='Create a yaml file to store suggested fixes in, ' - 'which can be applied with clang-apply-replacements.') + if yaml: + parser.add_argument('-export-fixes', metavar='filename', dest='export_fixes', + help='Create a yaml file to store suggested fixes in, ' + 'which can be applied with clang-apply-replacements.') parser.add_argument('-j', type=int, default=0, help='number of tidy instances to be run in parallel.') parser.add_argument('files', nargs='*', default=['.*'], @@ -254,7 +259,7 @@ def main(): max_task = multiprocessing.cpu_count() tmpdir = None - if args.fix or args.export_fixes: + if args.fix or (yaml and args.export_fixes): check_clang_apply_replacements_binary(args) tmpdir = tempfile.mkdtemp() @@ -292,7 +297,7 @@ def main(): shutil.rmtree(tmpdir) os.kill(0, 9) - if args.export_fixes: + if yaml and args.export_fixes: print('Writing fixes to ' + args.export_fixes + ' ...') try: merge_replacement_files(tmpdir, args.export_fixes) diff --git a/clang-tools-extra/test/clang-tidy/bugprone-parent-virtual-call.cpp b/clang-tools-extra/test/clang-tidy/bugprone-parent-virtual-call.cpp old mode 100755 new mode 100644 diff --git a/clang-tools-extra/test/clang-tidy/run-clang-tidy.cpp b/clang-tools-extra/test/clang-tidy/run-clang-tidy.cpp index 2207e43..31c4d68 100644 --- a/clang-tools-extra/test/clang-tidy/run-clang-tidy.cpp +++ b/clang-tools-extra/test/clang-tidy/run-clang-tidy.cpp @@ -1,3 +1,4 @@ +// RUN: %run_clang_tidy --help // RUN: rm -rf %t // RUN: mkdir %t // RUN: echo "[{\"directory\":\".\",\"command\":\"clang++ -c %/t/test.cpp\",\"file\":\"%/t/test.cpp\"}]" | sed -e 's/\\/\\\\/g' > %t/compile_commands.json -- 2.7.4