BaseTools/PatchCheck.py: Extract email check code to EmailAddressCheck
As we are going to reuse this code out of the CommitMessageCheck class, extract it in a new class: EmailAddressCheck. Cc: Bob Feng <bob.c.feng@intel.com> Cc: Liming Gao <liming.gao@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com> Signed-off-by: Philippe Mathieu-Daude <philmd@redhat.com>
This commit is contained in:
		
				
					committed by
					
						
						mergify[bot]
					
				
			
			
				
	
			
			
			
						parent
						
							1f0d809629
						
					
				
				
					commit
					8ffa47fb3a
				
			@@ -2,6 +2,7 @@
 | 
				
			|||||||
#  Check a patch for various format issues
 | 
					#  Check a patch for various format issues
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
 | 
					#  Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
 | 
				
			||||||
 | 
					#  Copyright (C) 2020, Red Hat, Inc.<BR>
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
					#  SPDX-License-Identifier: BSD-2-Clause-Patent
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
@@ -22,6 +23,58 @@ class Verbose:
 | 
				
			|||||||
    SILENT, ONELINE, NORMAL = range(3)
 | 
					    SILENT, ONELINE, NORMAL = range(3)
 | 
				
			||||||
    level = NORMAL
 | 
					    level = NORMAL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class EmailAddressCheck:
 | 
				
			||||||
 | 
					    """Checks an email address."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, email):
 | 
				
			||||||
 | 
					        self.ok = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if email is None:
 | 
				
			||||||
 | 
					            self.error('Email address is missing!')
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.check_email_address(email)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def error(self, *err):
 | 
				
			||||||
 | 
					        if self.ok and Verbose.level > Verbose.ONELINE:
 | 
				
			||||||
 | 
					            print('The email address is not valid:')
 | 
				
			||||||
 | 
					        self.ok = False
 | 
				
			||||||
 | 
					        if Verbose.level < Verbose.NORMAL:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					        count = 0
 | 
				
			||||||
 | 
					        for line in err:
 | 
				
			||||||
 | 
					            prefix = (' *', '  ')[count > 0]
 | 
				
			||||||
 | 
					            print(prefix, line)
 | 
				
			||||||
 | 
					            count += 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    email_re1 = re.compile(r'(?:\s*)(.*?)(\s*)<(.+)>\s*$',
 | 
				
			||||||
 | 
					                           re.MULTILINE|re.IGNORECASE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def check_email_address(self, email):
 | 
				
			||||||
 | 
					        email = email.strip()
 | 
				
			||||||
 | 
					        mo = self.email_re1.match(email)
 | 
				
			||||||
 | 
					        if mo is None:
 | 
				
			||||||
 | 
					            self.error("Email format is invalid: " + email.strip())
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        name = mo.group(1).strip()
 | 
				
			||||||
 | 
					        if name == '':
 | 
				
			||||||
 | 
					            self.error("Name is not provided with email address: " +
 | 
				
			||||||
 | 
					                       email)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            quoted = len(name) > 2 and name[0] == '"' and name[-1] == '"'
 | 
				
			||||||
 | 
					            if name.find(',') >= 0 and not quoted:
 | 
				
			||||||
 | 
					                self.error('Add quotes (") around name with a comma: ' +
 | 
				
			||||||
 | 
					                           name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if mo.group(2) == '':
 | 
				
			||||||
 | 
					            self.error("There should be a space between the name and " +
 | 
				
			||||||
 | 
					                       "email address: " + email)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if mo.group(3).find(' ') >= 0:
 | 
				
			||||||
 | 
					            self.error("The email address cannot contain a space: " +
 | 
				
			||||||
 | 
					                       mo.group(3))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CommitMessageCheck:
 | 
					class CommitMessageCheck:
 | 
				
			||||||
    """Checks the contents of a git commit message."""
 | 
					    """Checks the contents of a git commit message."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -121,38 +174,10 @@ class CommitMessageCheck:
 | 
				
			|||||||
            if s[2] != ' ':
 | 
					            if s[2] != ' ':
 | 
				
			||||||
                self.error("There should be a space after '" + sig + ":'")
 | 
					                self.error("There should be a space after '" + sig + ":'")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self.check_email_address(s[3])
 | 
					            EmailAddressCheck(s[3])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return sigs
 | 
					        return sigs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    email_re1 = re.compile(r'(?:\s*)(.*?)(\s*)<(.+)>\s*$',
 | 
					 | 
				
			||||||
                           re.MULTILINE|re.IGNORECASE)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def check_email_address(self, email):
 | 
					 | 
				
			||||||
        email = email.strip()
 | 
					 | 
				
			||||||
        mo = self.email_re1.match(email)
 | 
					 | 
				
			||||||
        if mo is None:
 | 
					 | 
				
			||||||
            self.error("Email format is invalid: " + email.strip())
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        name = mo.group(1).strip()
 | 
					 | 
				
			||||||
        if name == '':
 | 
					 | 
				
			||||||
            self.error("Name is not provided with email address: " +
 | 
					 | 
				
			||||||
                       email)
 | 
					 | 
				
			||||||
        else:
 | 
					 | 
				
			||||||
            quoted = len(name) > 2 and name[0] == '"' and name[-1] == '"'
 | 
					 | 
				
			||||||
            if name.find(',') >= 0 and not quoted:
 | 
					 | 
				
			||||||
                self.error('Add quotes (") around name with a comma: ' +
 | 
					 | 
				
			||||||
                           name)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if mo.group(2) == '':
 | 
					 | 
				
			||||||
            self.error("There should be a space between the name and " +
 | 
					 | 
				
			||||||
                       "email address: " + email)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if mo.group(3).find(' ') >= 0:
 | 
					 | 
				
			||||||
            self.error("The email address cannot contain a space: " +
 | 
					 | 
				
			||||||
                       mo.group(3))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def check_signed_off_by(self):
 | 
					    def check_signed_off_by(self):
 | 
				
			||||||
        sob='Signed-off-by'
 | 
					        sob='Signed-off-by'
 | 
				
			||||||
        if self.msg.find(sob) < 0:
 | 
					        if self.msg.find(sob) < 0:
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user