[PATCH 2/3] utils: checkstyle.py: Skip title and trailers checkers for pre-commit
Laurent Pinchart
laurent.pinchart at ideasonboard.com
Mon Aug 12 14:10:22 CEST 2024
On Mon, Aug 12, 2024 at 01:07:08PM +0100, Daniel Scally wrote:
> 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.
When I copied the existing 'if isinstance(commit, StagedChanges):' line
from TitleChecker, I knew before hitting 'p' that I had to do better :-)
> > 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
--
Regards,
Laurent Pinchart
More information about the libcamera-devel
mailing list