From 76d0065ef877532a5427907262dccd732d45c8f8 Mon Sep 17 00:00:00 2001 From: Chih-Hung Hsieh Date: Wed, 9 Nov 2016 18:19:05 -0800 Subject: [PATCH] Separate parallel_classify_warnings out of parse_input_file. * Allow other callers of this module to: * pass any input stream to parse_input_file, * pass any warning_lines to parallel_classify_warnings, * call dump_csv or dump_html to get output. * No output change. * Capture and ignore signal.SIGTERM at the end, to avoid bad warning/error messages from the exit clean-up process. Test: run warn.py build.log. Change-Id: I1414797a536c0ee622e2a34c226578621be1ddab --- tools/warn.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tools/warn.py b/tools/warn.py index 355d12019..5c49cd3d7 100755 --- a/tools/warn.py +++ b/tools/warn.py @@ -84,6 +84,8 @@ import argparse import multiprocessing import os import re +import signal +import sys parser = argparse.ArgumentParser(description='Convert a build log into HTML') parser.add_argument('--gencsv', @@ -2090,11 +2092,16 @@ def classify_warnings(lines): results = [] for line in lines: classify_one_warning(line, results) + # After the main work, ignore all other signals to a child process, + # to avoid bad warning/error messages from the exit clean-up process. + if args.processes > 1: + signal.signal(signal.SIGTERM, lambda *args: sys.exit(-signal.SIGTERM)) return results def parallel_classify_warnings(warning_lines): """Classify all warning lines with num_cpu parallel processes.""" + compile_patterns() num_cpu = args.processes if num_cpu > 1: groups = [[] for x in range(num_cpu)] @@ -2177,17 +2184,15 @@ def normalize_warning_line(line): return line -def parse_input_file(): +def parse_input_file(infile): """Parse input file, match warning lines.""" global platform_version global target_product global target_variant - infile = open(args.buildlog, 'r') line_counter = 0 # handle only warning messages with a file path warning_pattern = re.compile('^[^ ]*/[^ ]*: warning: .*') - compile_patterns() # Collect all warnings into the warning_lines set. warning_lines = set() @@ -2207,7 +2212,7 @@ def parse_input_file(): m = re.search('(?<=^TARGET_BUILD_VARIANT=).*', line) if m is not None: target_variant = m.group(0) - parallel_classify_warnings(warning_lines) + return warning_lines # Return s with escaped backslash and quotation characters. @@ -2503,7 +2508,8 @@ def dump_csv(): def main(): - parse_input_file() + warning_lines = parse_input_file(open(args.buildlog, 'r')) + parallel_classify_warnings(warning_lines) if args.gencsv: dump_csv() else: