[PATCH 2/3] utils: checkstyle.py: Skip title and trailers checkers for pre-commit
Dan Scally
dan.scally at ideasonboard.com
Mon Aug 12 14:07:08 CEST 2024
Hi Laurent, thanks for the patch
On 10/08/2024 01:58, Laurent Pinchart wrote:
> When running checkstyle.py in a pre-commit hook, there is either no
> commit message at all (when committing staged changes as a new commit),
> or the commit message comes from a previous commit being amended. In
> either case, there's no new commit message yet, and thus nothing to
> validate for the title and trailers checkers. The trailers checker, in
> particular, will always flag an error, making all commits fail.
>
> To fix that, just skip the two checkers during pre-commit.
I like that this is done in a way which facilitates the same thing being done more easily in the
future if needed.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
Reviewed-by: Daniel Scally <dan.scally at ideasonboard.com>
> ---
> utils/checkstyle.py | 22 ++++++++++++++--------
> 1 file changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/utils/checkstyle.py b/utils/checkstyle.py
> index aa0731abdb5a..2b1e1f6c1b9e 100755
> --- a/utils/checkstyle.py
> +++ b/utils/checkstyle.py
> @@ -344,11 +344,16 @@ class CommitChecker(metaclass=ClassRegistry):
> # Class methods
> #
> @classmethod
> - def checkers(cls, names):
> + def checkers(cls, commit, names):
> for checker in cls.subclasses:
> if names and checker.__name__ not in names:
> continue
> - yield checker
> + if checker.supports(commit):
> + yield checker
> +
> + @classmethod
> + def supports(cls, commit):
> + return type(commit) in cls.commit_types
>
>
> class CommitIssue(object):
> @@ -357,6 +362,8 @@ class CommitIssue(object):
>
>
> class HeaderAddChecker(CommitChecker):
> + commit_types = (Commit, StagedChanges, Amendment)
> +
> @classmethod
> def check(cls, commit, top_level):
> issues = []
> @@ -401,6 +408,8 @@ class HeaderAddChecker(CommitChecker):
>
>
> class TitleChecker(CommitChecker):
> + commit_types = (Commit,)
> +
> prefix_regex = re.compile(r'^([a-zA-Z0-9_.-]+: )+')
> release_regex = re.compile(r'libcamera v[0-9]+\.[0-9]+\.[0-9]+')
>
> @@ -408,11 +417,6 @@ class TitleChecker(CommitChecker):
> def check(cls, commit, top_level):
> title = commit.title
>
> - # Skip the check when validating staged changes (as done through a
> - # pre-commit hook) as there is no title to check in that case.
> - if isinstance(commit, StagedChanges):
> - return []
> -
> # Ignore release commits, they don't need a prefix.
> if TitleChecker.release_regex.fullmatch(title):
> return []
> @@ -468,6 +472,8 @@ class TitleChecker(CommitChecker):
>
>
> class TrailersChecker(CommitChecker):
> + commit_types = (Commit,)
> +
> commit_regex = re.compile(r'[0-9a-f]{12}[0-9a-f]* \(".*"\)')
>
> coverity_regex = re.compile(r'Coverity CID=.*')
> @@ -1020,7 +1026,7 @@ def check_style(top_level, commit, checkers):
> issues = 0
>
> # Apply the commit checkers first.
> - for checker in CommitChecker.checkers(checkers):
> + for checker in CommitChecker.checkers(commit, checkers):
> for issue in checker.check(commit, top_level):
> print('%s%s%s' % (Colours.fg(Colours.Yellow), issue.msg, Colours.reset()))
> issues += 1
More information about the libcamera-devel
mailing list