aboutsummaryrefslogtreecommitdiff
path: root/tools/patman
diff options
context:
space:
mode:
authorSimon Glass2020-10-29 21:46:27 -0600
committerSimon Glass2020-11-05 09:11:31 -0700
commit7457051e41be1058494bcb96f8ebd05176a3e6cc (patch)
tree77d5ce508a7beff151678c5222088f9f94165b21 /tools/patman
parent47f62952cce810c6e02eb216ec32ce69713534a7 (diff)
patman: Add a test for PatchStream tags
The current functional tests run most of patman. Add a smaller test that just checks tag handling with the PatchStream class. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/patman')
-rw-r--r--tools/patman/func_test.py26
-rw-r--r--tools/patman/patchstream.py23
2 files changed, 44 insertions, 5 deletions
diff --git a/tools/patman/func_test.py b/tools/patman/func_test.py
index 2290ba95e9d..2a0da8b3ccf 100644
--- a/tools/patman/func_test.py
+++ b/tools/patman/func_test.py
@@ -31,6 +31,9 @@ except ModuleNotFoundError:
class TestFunctional(unittest.TestCase):
"""Functional tests for checking that patman behaves correctly"""
+ leb = (b'Lord Edmund Blackadd\xc3\xabr <weasel@blackadder.org>'.
+ decode('utf-8'))
+
def setUp(self):
self.tmpdir = tempfile.mkdtemp(prefix='patman.')
self.gitdir = os.path.join(self.tmpdir, 'git')
@@ -177,8 +180,6 @@ class TestFunctional(unittest.TestCase):
stefan = b'Stefan Br\xc3\xbcns <stefan.bruens@rwth-aachen.de>'.decode('utf-8')
rick = 'Richard III <richard@palace.gov>'
mel = b'Lord M\xc3\xablchett <clergy@palace.gov>'.decode('utf-8')
- leb = (b'Lond Edmund Blackadd\xc3\xabr <weasel@blackadder.org'.
- decode('utf-8'))
fred = 'Fred Bloggs <f.bloggs@napier.net>'
add_maintainers = [stefan, rick]
dry_run = True
@@ -187,7 +188,7 @@ class TestFunctional(unittest.TestCase):
settings.alias = {
'fdt': ['simon'],
'u-boot': ['u-boot@lists.denx.de'],
- 'simon': [leb],
+ 'simon': [self.leb],
'fred': [fred],
}
@@ -231,7 +232,7 @@ class TestFunctional(unittest.TestCase):
self.assertEqual('Cover: 4 lines', lines[line + 4])
line += 5
self.assertEqual(' Cc: %s' % fred, lines[line + 0])
- self.assertEqual(' Cc: %s' % tools.FromUnicode(leb),
+ self.assertEqual(' Cc: %s' % tools.FromUnicode(self.leb),
lines[line + 1])
self.assertEqual(' Cc: %s' % tools.FromUnicode(mel),
lines[line + 2])
@@ -247,7 +248,7 @@ class TestFunctional(unittest.TestCase):
self.assertEqual(('%s %s\0%s' % (args[0], rick, stefan)),
tools.ToUnicode(cc_lines[0]))
self.assertEqual(
- '%s %s\0%s\0%s\0%s' % (args[1], fred, leb, rick, stefan),
+ '%s %s\0%s\0%s\0%s' % (args[1], fred, self.leb, rick, stefan),
tools.ToUnicode(cc_lines[1]))
expected = '''
@@ -480,3 +481,18 @@ complicated as possible''')
self.assertEqual(2, len(patch_files))
finally:
os.chdir(orig_dir)
+
+ def testTags(self):
+ """Test collection of tags in a patchstream"""
+ text = '''This is a patch
+
+Signed-off-by: Terminator
+Reviewed-by: Joe Bloggs <joe@napierwallies.co.nz>
+Reviewed-by: Mary Bloggs <mary@napierwallies.co.nz>
+Tested-by: %s
+''' % self.leb
+ pstrm = PatchStream.process_text(text)
+ self.assertEqual(pstrm.commit.rtags, {
+ 'Reviewed-by': {'Mary Bloggs <mary@napierwallies.co.nz>',
+ 'Joe Bloggs <joe@napierwallies.co.nz>'},
+ 'Tested-by': {self.leb}})
diff --git a/tools/patman/patchstream.py b/tools/patman/patchstream.py
index cf591b27573..d6f6ae92513 100644
--- a/tools/patman/patchstream.py
+++ b/tools/patman/patchstream.py
@@ -5,6 +5,7 @@
"""Handles parsing a stream of commits/emails from 'git log' or other source"""
import datetime
+import io
import math
import os
import re
@@ -81,6 +82,28 @@ class PatchStream:
self.state = STATE_MSG_HEADER # What state are we in?
self.commit = None # Current commit
+ @staticmethod
+ def process_text(text, is_comment=False):
+ """Process some text through this class using a default Commit/Series
+
+ Args:
+ text (str): Text to parse
+ is_comment (bool): True if this is a comment rather than a patch.
+ If True, PatchStream doesn't expect a patch subject at the
+ start, but jumps straight into the body
+
+ Returns:
+ PatchStream: object with results
+ """
+ pstrm = PatchStream(Series())
+ pstrm.commit = commit.Commit(None)
+ infd = io.StringIO(text)
+ outfd = io.StringIO()
+ if is_comment:
+ pstrm.state = STATE_PATCH_HEADER
+ pstrm.process_stream(infd, outfd)
+ return pstrm
+
def _add_warn(self, warn):
"""Add a new warning to report to the user about the current commit