In https://gcc.gnu.org/contribute.html#patches we ask to use [PRnnnn] without the Bugzilla component identifier and with no space between 'PR' and the number, but git_check_commit.py accepts all forms. The patch enforces what we document.
Note that this would reject a few of the recent commits. contrib/ChangeLog: * gcc-changelog/git_commit.py (subject_pr_regex): Rename into subject_pr_component_regex. (subject_pr_space_regex): New. (subject_pr_paren_regex): New. (subject_pr2_regex): Remove matching parentheses and rename into subject_pr_regex. (GitCommit): Add checks for new regexps. --- contrib/gcc-changelog/git_commit.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/contrib/gcc-changelog/git_commit.py b/contrib/gcc-changelog/git_commit.py index 5c0596c2627..245c8496553 100755 --- a/contrib/gcc-changelog/git_commit.py +++ b/contrib/gcc-changelog/git_commit.py @@ -167,8 +167,10 @@ author_line_regex = \ re.compile(r'^(?P<datetime>\d{4}-\d{2}-\d{2})\ {2}(?P<name>.* <.*>)') additional_author_regex = re.compile(r'^\t(?P<spaces>\ *)?(?P<name>.* <.*>)') changelog_regex = re.compile(r'^(?:[fF]or +)?([a-z0-9+-/]*)ChangeLog:?') -subject_pr_regex = re.compile(r'(^|\W)PR\s+(?P<component>[a-zA-Z0-9+-]+)/(?P<pr>\d{4,7})') -subject_pr2_regex = re.compile(r'[(\[]PR\s*(?P<pr>\d{4,7})[)\]]') +subject_pr_regex = re.compile(r'\[PR(?P<pr>\d{4,7})\]') # [PRnnnn] +subject_pr_space_regex = re.compile(r'\[PR\s+(?P<pr>\d{4,7})\]') # [PR nnnn] +subject_pr_paren_regex = re.compile(r'\(PR\s*(?P<pr>\d{4,7})\)') # (PRnnnn) / (PR nnnn) +subject_pr_component_regex = re.compile(r'(^|\W)PR\s*(?P<component>[a-zA-Z0-9+-]+)/(?P<pr>\d{4,7})') # PRcomponent/nnnn or PR component/nnnn pr_regex = re.compile(r'\tPR (?P<component>[a-z0-9+-]+\/)?(?P<pr>[0-9]+)$') dr_regex = re.compile(r'\tDR ([0-9]+)$') star_prefix_regex = re.compile(r'\t\*(?P<spaces>\ *)(?P<content>.*)') @@ -346,13 +348,15 @@ class GitCommit: self.check_commit_email() # Extract PR numbers form the subject line - # Match either [PRnnnn] / (PRnnnn) or PR component/nnnn + # Reject [PR nnnn] / (PR nnnn) or PR component/nnnn if self.info.lines and not self.revert_commit: - self.subject_prs = {m.group('pr') for m in subject_pr2_regex.finditer(info.lines[0])} - for m in subject_pr_regex.finditer(info.lines[0]): - if not m.group('component') in bug_components: - self.errors.append(Error('invalid PR component in subject', info.lines[0])) - self.subject_prs.add(m.group('pr')) + self.subject_prs = {m.group('pr') for m in subject_pr_regex.finditer(info.lines[0])} + for m in subject_pr_space_regex.finditer(info.lines[0]): + self.errors.append(Error('Use [PRnnn] in subject, not [PR nnn]', info.lines[0])) + for m in subject_pr_paren_regex.finditer(info.lines[0]): + self.errors.append(Error('Use [PRnnn] in subject, not (PRnnn)', info.lines[0])) + for m in subject_pr_component_regex.finditer(info.lines[0]): + self.errors.append(Error('Do not use PR component in subject', info.lines[0])) # Allow complete deletion of ChangeLog files in a commit project_files = [f for f in self.info.modified_files -- 2.34.1