util,python: Fix Pre-commit hooks to ignore non-source files
authorBobby R. Bruce <bbruce@ucdavis.edu>
Thu, 28 Jan 2021 05:44:31 +0000 (21:44 -0800)
committerBobby R. Bruce <bbruce@ucdavis.edu>
Tue, 2 Feb 2021 21:39:09 +0000 (21:39 +0000)
Previously if binary blobs were modified the pre-commit hook attempted
to run style-checks on the binary, causing an error when attempting to
decode to utf-8. This commit runs a check on each file to ensure it has
a valid source-code extension prior to running style checks. If a file
does not have a valid extension style checks are not run.

Change-Id: Id1263cac0d6c190ad1a3d67720b3f373e0e42234
Issue-on: https://gem5.atlassian.net/browse/GEM5-903
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/39795
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
util/style/style.py

index e765a92daaf9745ff578f8b0331737b317c8fa92..1a5e94bdcd93b5c7cf0f2229a334a309d160be5d 100644 (file)
@@ -86,6 +86,15 @@ def _re_ignore(expr):
         return rex.match(fname)
     return match_re
 
+def _re_only(expr):
+    """Helper function to create regular expressions to only keep
+    matcher functions"""
+
+    rex = re.compile(expr)
+    def match_re(fname):
+        return not rex.match(fname)
+    return match_re
+
 # This list contains a list of functions that are called to determine
 # if a file should be excluded from the style matching rules or
 # not. The functions are called with the file name relative to the
@@ -97,11 +106,10 @@ style_ignores = [
     _re_ignore("^ext/"),
     # Ignore test data, as they are not code
     _re_ignore("^tests/(?:quick|long)/"),
-    # Ignore RISC-V assembly tests as they are maintained in an external
-    # project that does not follow the gem5 coding convention
-    _re_ignore("tests/test-progs/asmtest/src/riscv/"),
-    # Ignore RISC-V assembly dump files
-    _re_ignore("tests/test-progs/asmtest/dump/riscv/")
+    # Only include Scons files and those with extensions that suggest source
+    # code
+    _re_only("^((.*\/)?(SConscript|SConstruct)|"
+             ".*\.(c|h|cc|hh|cpp|hpp|py|isa|proto))$")
 ]
 
 def check_ignores(fname):