From patchwork Thu Dec 24 12:28:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Laurent Pinchart X-Patchwork-Id: 10743 X-Patchwork-Delegate: laurent.pinchart@ideasonboard.com Return-Path: X-Original-To: parsemail@patchwork.libcamera.org Delivered-To: parsemail@patchwork.libcamera.org Received: from lancelot.ideasonboard.com (lancelot.ideasonboard.com [92.243.16.209]) by patchwork.libcamera.org (Postfix) with ESMTPS id CB076C0F1A for ; Thu, 24 Dec 2020 12:29:16 +0000 (UTC) Received: from lancelot.ideasonboard.com (localhost [IPv6:::1]) by lancelot.ideasonboard.com (Postfix) with ESMTP id 9B22C62005; Thu, 24 Dec 2020 13:29:16 +0100 (CET) Authentication-Results: lancelot.ideasonboard.com; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="TB85nlZb"; dkim-atps=neutral Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [213.167.242.64]) by lancelot.ideasonboard.com (Postfix) with ESMTPS id 50A82615AC for ; Thu, 24 Dec 2020 13:29:10 +0100 (CET) Received: from pendragon.lan (62-78-145-57.bb.dnainternet.fi [62.78.145.57]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id EB866DFC for ; Thu, 24 Dec 2020 13:29:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1608812950; bh=LXq3q8vXJNF3MJqbcdQQ/ujxaZIqwAZYEuyeR+1e0AA=; h=From:To:Subject:Date:In-Reply-To:References:From; b=TB85nlZbVt1ga9hir0emhP3hFKax/2CQ4WecXJQ4vd9HK7ZFCyuc1vNn0YnbCXqi+ VgESeXzWFTWCq/+wN2AaPQRoY9FwS7yMMXF1GWBueHVnAfSmfawz/LbEixJXabQH55 GzftOKtzmFrqyMzlllkDhkB7HHlxLnU/ieJLiPg0= From: Laurent Pinchart To: libcamera-devel@lists.libcamera.org Date: Thu, 24 Dec 2020 14:28:54 +0200 Message-Id: <20201224122855.22200-8-laurent.pinchart@ideasonboard.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201224122855.22200-1-laurent.pinchart@ideasonboard.com> References: <20201224122855.22200-1-laurent.pinchart@ideasonboard.com> MIME-Version: 1.0 Subject: [libcamera-devel] [PATCH 7/8] utils: checkstyle.py: Add commit checkers X-BeenThere: libcamera-devel@lists.libcamera.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libcamera-devel-bounces@lists.libcamera.org Sender: "libcamera-devel" Add a new category of checkers that operate on a whole commit. Signed-off-by: Laurent Pinchart Reviewed-by: Niklas Söderlund --- 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