[libcamera-devel,7/8] utils: checkstyle.py: Add commit checkers
diff mbox series

Message ID 20201224122855.22200-8-laurent.pinchart@ideasonboard.com
State Accepted
Delegated to: Laurent Pinchart
Headers show
Series
  • checkstyle.py: Ensure meson.build is updated when adding header
Related show

Commit Message

Laurent Pinchart Dec. 24, 2020, 12:28 p.m. UTC
Add a new category of checkers that operate on a whole commit.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 utils/checkstyle.py | 42 +++++++++++++++++++++++++++++++++++-------
 1 file changed, 35 insertions(+), 7 deletions(-)

Comments

Niklas Söderlund Dec. 27, 2020, 10:41 a.m. UTC | #1
Hi Laurent,

Thanks for your work.

On 2020-12-24 14:28:54 +0200, Laurent Pinchart wrote:
> Add a new category of checkers that operate on a whole commit.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>

> ---
>  utils/checkstyle.py | 42 +++++++++++++++++++++++++++++++++++-------
>  1 file changed, 35 insertions(+), 7 deletions(-)
> 
> diff --git a/utils/checkstyle.py b/utils/checkstyle.py
> index 9c2a1837aa11..c0a6b7ab06cd 100755
> --- a/utils/checkstyle.py
> +++ b/utils/checkstyle.py
> @@ -296,6 +296,30 @@ class ClassRegistry(type):
>          return newclass
>  
>  
> +# ------------------------------------------------------------------------------
> +# Commit Checkers
> +#
> +
> +class CommitChecker(metaclass=ClassRegistry):
> +    subclasses = []
> +
> +    def __init__(self):
> +        pass
> +
> +    #
> +    # Class methods
> +    #
> +    @classmethod
> +    def checkers(cls):
> +        for checker in cls.subclasses:
> +            yield checker
> +
> +
> +class CommitIssue(object):
> +    def __init__(self, msg):
> +        self.msg = msg
> +
> +
>  # ------------------------------------------------------------------------------
>  # Style Checkers
>  #
> @@ -721,25 +745,29 @@ def check_style(top_level, commit):
>      print(commit.title)
>      print(separator)
>  
> +    issues = 0
> +
> +    # Apply the commit checkers first.
> +    for checker in CommitChecker.checkers():
> +        for issue in checker.check(commit, top_level):
> +            print('%s%s%s' % (Colours.fg(Colours.Yellow), issue.msg, Colours.reset()))
> +            issues += 1
> +
>      # Filter out files we have no checker for.
>      patterns = set()
>      patterns.update(StyleChecker.all_patterns())
>      patterns.update(Formatter.all_patterns())
>      files = [f for f in commit.files() if len([p for p in patterns if fnmatch.fnmatch(os.path.basename(f), p)])]
> -    if len(files) == 0:
> -        print("Commit doesn't touch source files, skipping")
> -        return 0
>  
> -    issues = 0
>      for f in files:
>          issues += check_file(top_level, commit, f)
>  
>      if issues == 0:
> -        print("No style issue detected")
> +        print("No issue detected")
>      else:
>          print('---')
> -        print("%u potential style %s detected, please review" % \
> -                (issues, 'issue' if issues == 1 else 'issues'))
> +        print("%u potential %s detected, please review" %
> +              (issues, 'issue' if issues == 1 else 'issues'))
>  
>      return issues
>  
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> libcamera-devel mailing list
> libcamera-devel@lists.libcamera.org
> https://lists.libcamera.org/listinfo/libcamera-devel

Patch
diff mbox series

diff --git a/utils/checkstyle.py b/utils/checkstyle.py
index 9c2a1837aa11..c0a6b7ab06cd 100755
--- a/utils/checkstyle.py
+++ b/utils/checkstyle.py
@@ -296,6 +296,30 @@  class ClassRegistry(type):
         return newclass
 
 
+# ------------------------------------------------------------------------------
+# Commit Checkers
+#
+
+class CommitChecker(metaclass=ClassRegistry):
+    subclasses = []
+
+    def __init__(self):
+        pass
+
+    #
+    # Class methods
+    #
+    @classmethod
+    def checkers(cls):
+        for checker in cls.subclasses:
+            yield checker
+
+
+class CommitIssue(object):
+    def __init__(self, msg):
+        self.msg = msg
+
+
 # ------------------------------------------------------------------------------
 # Style Checkers
 #
@@ -721,25 +745,29 @@  def check_style(top_level, commit):
     print(commit.title)
     print(separator)
 
+    issues = 0
+
+    # Apply the commit checkers first.
+    for checker in CommitChecker.checkers():
+        for issue in checker.check(commit, top_level):
+            print('%s%s%s' % (Colours.fg(Colours.Yellow), issue.msg, Colours.reset()))
+            issues += 1
+
     # Filter out files we have no checker for.
     patterns = set()
     patterns.update(StyleChecker.all_patterns())
     patterns.update(Formatter.all_patterns())
     files = [f for f in commit.files() if len([p for p in patterns if fnmatch.fnmatch(os.path.basename(f), p)])]
-    if len(files) == 0:
-        print("Commit doesn't touch source files, skipping")
-        return 0
 
-    issues = 0
     for f in files:
         issues += check_file(top_level, commit, f)
 
     if issues == 0:
-        print("No style issue detected")
+        print("No issue detected")
     else:
         print('---')
-        print("%u potential style %s detected, please review" % \
-                (issues, 'issue' if issues == 1 else 'issues'))
+        print("%u potential %s detected, please review" %
+              (issues, 'issue' if issues == 1 else 'issues'))
 
     return issues