mozautomation: establish API for parsing out commit IDs (
bug 1245589); r?dminor
It is a simple function. But we will have multiple callers. So best to
establish a reusable function.
MozReview-Commit-ID: ByDAiV1uSK7
--- a/pylib/mozautomation/mozautomation/commitparser.py
+++ b/pylib/mozautomation/mozautomation/commitparser.py
@@ -211,8 +211,20 @@ def strip_commit_metadata(s):
if type(s) == str:
joiner = b'\n'
elif type(s) == unicode:
joiner = u'\n'
else:
raise TypeError('do not know type of commit message: %s' % type(s))
return joiner.join(lines)
+
+
+def parse_commit_id(s):
+ """Parse a MozReview-Commit-ID value out of a string.
+
+ Returns None if the commit ID is not found.
+ """
+ m = re.search('^MozReview-Commit-ID: ([a-zA-Z0-9]+)$', s, re.MULTILINE)
+ if not m:
+ return None
+
+ return m.group(1)
--- a/pylib/mozautomation/tests/test_commitparser.py
+++ b/pylib/mozautomation/tests/test_commitparser.py
@@ -10,16 +10,17 @@ import sys
HERE = os.path.split(os.path.realpath(__file__))[0]
sys.path.append(os.path.split(HERE)[0])
from mozautomation.commitparser import (
parse_backouts,
parse_bugs,
+ parse_commit_id,
parse_requal_reviewers,
parse_reviewers,
parse_rquestion_reviewers,
replace_reviewers,
strip_commit_metadata,
)
@@ -369,8 +370,18 @@ class TestBugParsing(unittest.TestCase):
self.assertEqual(strip_commit_metadata(
'Bug 1 - foo\n\nMozReview-Commit-ID: abcdef\n\nTrailing desc'),
'Bug 1 - foo\n\n\nTrailing desc')
# unicode in should get unicode out
res = strip_commit_metadata(u'foo\n\nbar')
self.assertEqual(res, u'foo\n\nbar')
self.assertIsInstance(res, unicode)
+
+ def test_parse_commit_id(self):
+ self.assertIsNone(parse_commit_id('foo'))
+ self.assertIsNone(parse_commit_id('foo\n\nMozReview-Commit-ID\nbar'))
+
+ self.assertEqual(parse_commit_id('MozReview-Commit-ID: foo123'),
+ 'foo123')
+ self.assertEqual(parse_commit_id(
+ 'Bug 1 - foo\n\nMozReview-Commit-ID: abc456'),
+ 'abc456')