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