summaryrefslogtreecommitdiff
path: root/tools/patman
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2023-03-08 10:52:55 -0800
committerSimon Glass <sjg@chromium.org>2023-03-08 13:15:14 -0800
commit00d54ae8f4ea17af90dee294f326a156a00cb4ba (patch)
treecc6429e2c0de07035b3f16ada6fffa0963dfcda3 /tools/patman
parent27409e35d5fa56f1b51b6e0704081133e3881058 (diff)
downloadu-boot-00d54ae8f4ea17af90dee294f326a156a00cb4ba.tar.gz
patman: Check patches in parallel
For large series this can take a while. Run checkpatch in parallel to try to reduce the time. The checkpatch information is still reported in sequential order, so a very slow patch at the start can still slow things down. But overall this gives good results. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Douglas Anderson <dianders@chromium.org>
Diffstat (limited to 'tools/patman')
-rw-r--r--tools/patman/checkpatch.py46
1 files changed, 26 insertions, 20 deletions
diff --git a/tools/patman/checkpatch.py b/tools/patman/checkpatch.py
index c1dec323f3..e03cac115e 100644
--- a/tools/patman/checkpatch.py
+++ b/tools/patman/checkpatch.py
@@ -3,6 +3,7 @@
#
import collections
+import concurrent.futures
import os
import re
import sys
@@ -244,26 +245,31 @@ def check_patches(verbose, args, use_tree):
error_count, warning_count, check_count = 0, 0, 0
col = terminal.Color()
- for fname in args:
- result = check_patch(fname, verbose, use_tree=use_tree)
- if not result.ok:
- error_count += result.errors
- warning_count += result.warnings
- check_count += result.checks
- print('%d errors, %d warnings, %d checks for %s:' % (result.errors,
- result.warnings, result.checks, col.build(col.BLUE, fname)))
- if (len(result.problems) != result.errors + result.warnings +
- result.checks):
- print("Internal error: some problems lost")
- # Python seems to get confused by this
- # pylint: disable=E1133
- for item in result.problems:
- sys.stderr.write(
- get_warning_msg(col, item.get('type', '<unknown>'),
- item.get('file', '<unknown>'),
- item.get('line', 0), item.get('msg', 'message')))
- print
- #print(stdout)
+ with concurrent.futures.ThreadPoolExecutor(max_workers=16) as executor:
+ futures = []
+ for fname in args:
+ f = executor.submit(check_patch, fname, verbose, use_tree=use_tree)
+ futures.append(f)
+
+ for fname, f in zip(args, futures):
+ result = f.result()
+ if not result.ok:
+ error_count += result.errors
+ warning_count += result.warnings
+ check_count += result.checks
+ print('%d errors, %d warnings, %d checks for %s:' % (result.errors,
+ result.warnings, result.checks, col.build(col.BLUE, fname)))
+ if (len(result.problems) != result.errors + result.warnings +
+ result.checks):
+ print("Internal error: some problems lost")
+ # Python seems to get confused by this
+ # pylint: disable=E1133
+ for item in result.problems:
+ sys.stderr.write(
+ get_warning_msg(col, item.get('type', '<unknown>'),
+ item.get('file', '<unknown>'),
+ item.get('line', 0), item.get('msg', 'message')))
+ print
if error_count or warning_count or check_count:
str = 'checkpatch.pl found %d error(s), %d warning(s), %d checks(s)'
color = col.GREEN