From patchwork Sun Jun 14 16:54:06 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Glass X-Patchwork-Id: 242332 List-Id: U-Boot discussion From: sjg at chromium.org (Simon Glass) Date: Sun, 14 Jun 2020 10:54:06 -0600 Subject: [PATCH 3/5] patman: Decode output from the '--show-types' option In-Reply-To: <20200614165409.158795-1-sjg@chromium.org> References: <20200614165409.158795-1-sjg@chromium.org> Message-ID: <20200614165409.158795-4-sjg@chromium.org> Collect the 'checkpatch type' from each error, warning and check. Provide this to patman and update the uclass test to use it. Signed-off-by: Simon Glass --- tools/patman/checkpatch.py | 24 +++++++++++++++--------- tools/patman/test_checkpatch.py | 4 ++-- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/tools/patman/checkpatch.py b/tools/patman/checkpatch.py index 98c63af1dd..07c3e2739a 100644 --- a/tools/patman/checkpatch.py +++ b/tools/patman/checkpatch.py @@ -38,7 +38,7 @@ def FindCheckPatch(): sys.exit('Cannot find checkpatch.pl - please put it in your ' + '~/bin directory or use --no-check') -def CheckPatch(fname, verbose=False): +def CheckPatch(fname, verbose=False, show_types=False): """Run checkpatch.pl on a file. Returns: @@ -64,8 +64,10 @@ def CheckPatch(fname, verbose=False): result.problems = [] chk = FindCheckPatch() item = {} - result.stdout = command.Output(chk, '--no-tree', fname, - raise_on_error=False) + args = [chk, '--no-tree'] + if show_types: + args.append('--show-types') + result.stdout = command.Output(*args, fname, raise_on_error=False) #pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE) #stdout, stderr = pipe.communicate() @@ -81,9 +83,10 @@ def CheckPatch(fname, verbose=False): ' checks, (\d+)') re_ok = re.compile('.*has no obvious style problems') re_bad = re.compile('.*has style problems, please review') - re_error = re.compile('ERROR: (.*)') - re_warning = re.compile(emacs_prefix + 'WARNING:(?:[A-Z_]+:)? (.*)') - re_check = re.compile('CHECK: (.*)') + type_name = '([A-Z_]+:)?' + re_error = re.compile('ERROR:%s (.*)' % type_name) + re_warning = re.compile(emacs_prefix + 'WARNING:%s (.*)' % type_name) + re_check = re.compile('CHECK:%s (.*)' % type_name) re_file = re.compile('#\d+: FILE: ([^:]*):(\d+):') re_note = re.compile('NOTE: (.*)') indent = ' ' * 6 @@ -129,13 +132,16 @@ def CheckPatch(fname, verbose=False): check_match = re_check.match(line) subject_match = line.startswith('Subject:') if err_match: - item['msg'] = err_match.group(1) + item['cptype'] = err_match.group(1) + item['msg'] = err_match.group(2) item['type'] = 'error' elif warn_match: - item['msg'] = warn_match.group(1) + item['cptype'] = warn_match.group(1) + item['msg'] = warn_match.group(2) item['type'] = 'warning' elif check_match: - item['msg'] = check_match.group(1) + item['cptype'] = check_match.group(1) + item['msg'] = check_match.group(2) item['type'] = 'check' elif file_match: item['file'] = file_match.group(1) diff --git a/tools/patman/test_checkpatch.py b/tools/patman/test_checkpatch.py index e841b9abca..7f40133b33 100644 --- a/tools/patman/test_checkpatch.py +++ b/tools/patman/test_checkpatch.py @@ -82,7 +82,7 @@ Signed-off-by: Simon Glass return inname def run_checkpatch(self): - return checkpatch.CheckPatch(self.get_patch()) + return checkpatch.CheckPatch(self.get_patch(), show_types=True) class TestPatch(unittest.TestCase): @@ -355,7 +355,7 @@ index 0000000..2234c87 result = pm.run_checkpatch() self.assertEqual(result.warnings, 1) self.assertEqual(len(result.problems), 1) - self.assertIn('Possible new uclass', result.problems[0]['msg']) + self.assertIn('NEW_UCLASS', result.problems[0]['cptype']) if __name__ == "__main__":