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 <[email protected]>
---
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