Successfully tested via: pytest contrib/gcc-changelog/ contrib/ChangeLog: * gcc-changelog/git_commit.py (ChangeLogEntry.__init__): Convert ChangeLogEntry.opened_parentheses from an integer to a stack of line strings. (ChangeLogEntry.parse_changelog): Likewise. (ChangeLogEntry.process_parentheses): Likewise. (GitCommit.check_for_broken_parentheses): Update for above change. Use line containing most recently opened parenthesis as line for error. * gcc-changelog/test_email.py (TestGccChangelog.test_multiline_bad_parentheses): Verify that the error uses the line containing the unclosed parenthesis, rather than the first line.
Signed-off-by: David Malcolm <dmalc...@redhat.com> --- contrib/gcc-changelog/git_commit.py | 14 +++++++------- contrib/gcc-changelog/test_email.py | 1 + 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/contrib/gcc-changelog/git_commit.py b/contrib/gcc-changelog/git_commit.py index d1646bdc0cd..4aac4389a0d 100755 --- a/contrib/gcc-changelog/git_commit.py +++ b/contrib/gcc-changelog/git_commit.py @@ -217,7 +217,7 @@ class ChangeLogEntry: self.lines = [] self.files = [] self.file_patterns = [] - self.opened_parentheses = 0 + self.opened_parentheses = [] # stack of lines def parse_file_names(self): # Whether the content currently processed is between a star prefix the @@ -549,7 +549,7 @@ class GitCommit: m = star_prefix_regex.match(line) if m: if (len(m.group('spaces')) != 1 and - last_entry.opened_parentheses == 0): + last_entry.opened_parentheses == []): msg = 'one space should follow asterisk' self.errors.append(Error(msg, line)) else: @@ -574,13 +574,13 @@ class GitCommit: def process_parentheses(self, last_entry, line): for c in line: if c == '(': - last_entry.opened_parentheses += 1 + last_entry.opened_parentheses.append(line) elif c == ')': - if last_entry.opened_parentheses == 0: + if last_entry.opened_parentheses == []: msg = 'bad wrapping of parenthesis' self.errors.append(Error(msg, line)) else: - last_entry.opened_parentheses -= 1 + last_entry.opened_parentheses.pop() def parse_file_names(self): for entry in self.changelog_entries: @@ -606,9 +606,9 @@ class GitCommit: def check_for_broken_parentheses(self): for entry in self.changelog_entries: - if entry.opened_parentheses != 0: + if entry.opened_parentheses != []: msg = 'bad parentheses wrapping' - self.errors.append(Error(msg, entry.lines[0])) + self.errors.append(Error(msg, entry.opened_parentheses[-1])) def get_file_changelog_location(self, changelog_file): for file in self.info.modified_files: diff --git a/contrib/gcc-changelog/test_email.py b/contrib/gcc-changelog/test_email.py index 319e065ca55..2f8e69fcdc0 100755 --- a/contrib/gcc-changelog/test_email.py +++ b/contrib/gcc-changelog/test_email.py @@ -415,6 +415,7 @@ class TestGccChangelog(unittest.TestCase): def test_multiline_bad_parentheses(self): email = self.from_patch_glob('0002-Wrong-macro-changelog.patch') assert email.errors[0].message == 'bad parentheses wrapping' + assert email.errors[0].line == '\t* config/i386/i386.md (*fix_trunc<mode>_i387_1,' def test_changelog_removal(self): email = self.from_patch_glob('0001-ChangeLog-removal.patch') -- 2.26.3