xref: /openbmc/openbmc-build-scripts/config/gitlint/bad_signedoffby.py (revision e6dadf7e39a13db8fe2049850c04036af7a2e63d)
113dd2fb0SPatrick Williamsimport re
213dd2fb0SPatrick Williams
313dd2fb0SPatrick Williamsfrom gitlint.rules import CommitRule, RuleViolation
413dd2fb0SPatrick Williams
5*e6dadf7eSPatrick Williams# These are individuals, by email address, who chose to go by a one-word name.
6*e6dadf7eSPatrick Williamsallowed_singlename_emails = ["anthonyhkf@google.com"]
7*e6dadf7eSPatrick Williams
813dd2fb0SPatrick Williams
913dd2fb0SPatrick Williamsclass BadSignedOffBy(CommitRule):
1013dd2fb0SPatrick Williams    name = "bad-signed-off-by"
1113dd2fb0SPatrick Williams    id = "UC3"
1213dd2fb0SPatrick Williams
1313dd2fb0SPatrick Williams    def validate(self, commit):
1413dd2fb0SPatrick Williams        violations = []
1513dd2fb0SPatrick Williams
1613dd2fb0SPatrick Williams        sobs = [
1713dd2fb0SPatrick Williams            x for x in commit.message.body if x.startswith("Signed-off-by:")
1813dd2fb0SPatrick Williams        ]
1913dd2fb0SPatrick Williams        for sob in sobs:
2013dd2fb0SPatrick Williams            match = re.search("Signed-off-by: (.*) <(.*)>", sob)
2113dd2fb0SPatrick Williams            if not match:
2213dd2fb0SPatrick Williams                violations.append(
2313dd2fb0SPatrick Williams                    RuleViolation(self.id, "Invalid Signed-off-by format", sob)
2413dd2fb0SPatrick Williams                )
2513dd2fb0SPatrick Williams                continue
2613dd2fb0SPatrick Williams
2713dd2fb0SPatrick Williams            if (
2813dd2fb0SPatrick Williams                len(match.group(1).split()) <= 1
29*e6dadf7eSPatrick Williams                and match.group(2) not in allowed_singlename_emails
3013dd2fb0SPatrick Williams            ):
3113dd2fb0SPatrick Williams                violations.append(
3213dd2fb0SPatrick Williams                    RuleViolation(
3313dd2fb0SPatrick Williams                        self.id,
3413dd2fb0SPatrick Williams                        "Signed-off-by user has too few words; likely user id instead of legal name?",
3513dd2fb0SPatrick Williams                        sob,
3613dd2fb0SPatrick Williams                    )
3713dd2fb0SPatrick Williams                )
3813dd2fb0SPatrick Williams                continue
3913dd2fb0SPatrick Williams
4013dd2fb0SPatrick Williams        return violations
41*e6dadf7eSPatrick Williams
42*e6dadf7eSPatrick Williams
43*e6dadf7eSPatrick Williamsclass BadAuthoredBy(CommitRule):
44*e6dadf7eSPatrick Williams    name = "bad-authored-by"
45*e6dadf7eSPatrick Williams    id = "UC4"
46*e6dadf7eSPatrick Williams
47*e6dadf7eSPatrick Williams    def validate(self, commit):
48*e6dadf7eSPatrick Williams        if commit.author_email in allowed_singlename_emails:
49*e6dadf7eSPatrick Williams            return None
50*e6dadf7eSPatrick Williams
51*e6dadf7eSPatrick Williams        if len(commit.author_name.split()) <= 1:
52*e6dadf7eSPatrick Williams            return [
53*e6dadf7eSPatrick Williams                RuleViolation(
54*e6dadf7eSPatrick Williams                    self.id,
55*e6dadf7eSPatrick Williams                    "Author user has too few words; likely user id instead of legal name?",
56*e6dadf7eSPatrick Williams                    commit.author_name,
57*e6dadf7eSPatrick Williams                )
58*e6dadf7eSPatrick Williams            ]
59*e6dadf7eSPatrick Williams
60*e6dadf7eSPatrick Williams        return None
61