Author: dsahlberg
Date: Sat Mar 1 19:52:37 2025
New Revision: 1924117
URL: http://svn.apache.org/viewvc?rev=1924117&view=rev
Log:
Update backport/status parser with the end goal of creating an interactive
backport nomination script.
Fix a bug in logsummary parsing where a missing logsummary didn't raise
an expected exception. This caused unittests to fail.
* dist/backport/status.py
(StatusEntry.__init__): When parsing the logsummary, also check if the first
line is a subheader (otherwise the logsummary may incorrectly contain
that subheader).
(StatusEntry._is_subheader): Check subheaders against explicit list of known
subheaders to avoid spurious matches if a text starts with a subheader-
like text.
(Test_StatusEntry.test__is_subheader): Test for returning false on subheader-
like text and non-subheader.
Modified:
subversion/trunk/tools/dist/backport/status.py
Modified: subversion/trunk/tools/dist/backport/status.py
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/dist/backport/status.py?rev=1924117&r1=1924116&r2=1924117&view=diff
==============================================================================
--- subversion/trunk/tools/dist/backport/status.py (original)
+++ subversion/trunk/tools/dist/backport/status.py Sat Mar 1 19:52:37 2025
@@ -380,10 +380,10 @@ class StatusEntry:
# Parse the logsummary.
while True:
- self.logsummary.append(lines[0])
- lines = lines[1:]
if (not lines) or self._is_subheader(lines[0]):
break
+ self.logsummary.append(lines[0])
+ lines = lines[1:]
# Parse votes.
if "Votes:" in lines:
@@ -515,7 +515,11 @@ class StatusEntry:
#
# This is currently only used for finding the end of logsummary, and all
# explicitly special-cased headers (e.g., "Depends:") match this, though.
- return re.compile(r'^\s*[A-Z]\w*:').match(string)
+ subheaders = "Justification: Notes: Depends: Branch: Votes:".split()
+ for subheader in subheaders:
+ if string.strip().startswith(subheader):
+ return True
+ return False
def unparse(self, stream):
"Write this entry to STREAM, an open file-like object."
@@ -691,6 +695,9 @@ class Test_StatusEntry(unittest.TestCase
for subheader in subheaders:
self.assertTrue(StatusEntry._is_subheader(subheader))
self.assertTrue(StatusEntry._is_subheader(subheader + " with value"))
+ self.assertFalse(StatusEntry._is_subheader("UnknownSubheader: with value"))
+ self.assertFalse(StatusEntry._is_subheader("UnknownSubheader:"))
+ self.assertFalse(StatusEntry._is_subheader("regular text"))
def setUpModule():
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.