mozautomation: don't fail when parsing empty strings (bug 1424014) r?gps draft
authorbyron jones <glob@mozilla.com>
Fri, 08 Dec 2017 11:56:32 +0800
changeset 11946 693efbf4bf3ad71ff976771dabf898c0de53a34d
parent 11945 491b2a7475b1f3098f1752eeb10c1c858085483e
push id1846
push userbjones@mozilla.com
push dateFri, 08 Dec 2017 03:56:46 +0000
reviewersgps
bugs1424014
mozautomation: don't fail when parsing empty strings (bug 1424014) r?gps MozReview-Commit-ID: 8FCWICEYLWL
pylib/mozautomation/mozautomation/commitparser.py
pylib/mozautomation/tests/test_commitparser.py
--- a/pylib/mozautomation/mozautomation/commitparser.py
+++ b/pylib/mozautomation/mozautomation/commitparser.py
@@ -120,16 +120,19 @@ def filter_reviewers(s):
 
         if DIGIT_RE.match(word):
             continue
 
         yield word
 
 
 def parse_reviewers(commit_description, flag_re=None):
+    if commit_description == '':
+        return
+
     commit_summary = commit_description.splitlines().pop(0)
     for match in re.finditer(REVIEWERS_RE, commit_summary):
         if not match.group(3):
             continue
 
         for reviewer in re.split(LIST_RE, match.group(3)):
             if flag_re is None:
                 yield reviewer
@@ -150,16 +153,19 @@ def parse_rquestion_reviewers(commit_des
 
 
 def replace_reviewers(commit_description, reviewers):
     if not reviewers:
         reviewers_str = ''
     else:
         reviewers_str = 'r=' + ','.join(reviewers)
 
+    if commit_description == '':
+        return reviewers_str
+
     commit_description = commit_description.splitlines()
     commit_summary = commit_description.pop(0)
     commit_description = '\n'.join(commit_description)
 
     if not R_SPECIFIER_RE.search(commit_summary):
         commit_summary += ' ' + reviewers_str
     else:
         # replace the first r? with the reviewer list, and all subsequent
--- a/pylib/mozautomation/tests/test_commitparser.py
+++ b/pylib/mozautomation/tests/test_commitparser.py
@@ -145,18 +145,19 @@ differs from that used to generate the h
         self.assertEqual(list(parse_reviewers(
             'Bug 1182996 - Fix and add missing namespace comments. rs=ehsan\n'
             'run-clang-tidy.py \\\n'
             '-checks=\'-*,llvm-namespace-comment\' \\\n'
             '-header-filter=^/.../mozilla-central/.* \\\n'
             '-fix')),
             ['ehsan'])
 
-
     def test_requal_reviewers(self):
+        # empty
+        self.assertEqual(list(parse_requal_reviewers('')), [])
 
         # first with r? reviewer request syntax
         self.assertEqual(list(parse_requal_reviewers('Bug 1 - some stuff; r?romulus')), [])
         self.assertEqual(list(parse_requal_reviewers('Bug 1 - More stuff; r?romulus, r?remus')), [])
         self.assertEqual(list(parse_requal_reviewers('Bug 1 - More stuff; r?romulus,r?remus')), [])
         self.assertEqual(list(parse_requal_reviewers('Bug 1 - More stuff; r?romulus, remus')), [])
         self.assertEqual(list(parse_requal_reviewers('Bug 1 - More stuff; r?romulus,remus')), [])
         self.assertEqual(list(parse_requal_reviewers('Bug 1 - More stuff; (r?romulus)')), [])
@@ -207,16 +208,18 @@ differs from that used to generate the h
              'Fixing form test for date fields r=me\n')),
              [])
 
         self.assertEqual(list(parse_requal_reviewers(
             'Bug 1024110 - Change Aurora\'s default profile behavior to use channel-specific profiles. r=bsmedberg f=gavin,markh')),
             ['bsmedberg'])
 
     def test_rquestion_reviewers(self):
+        # empty
+        self.assertEqual(list(parse_rquestion_reviewers('')), [])
 
         # first with r? reviewer request syntax
         self.assertEqual(list(parse_rquestion_reviewers('Bug 1 - some stuff; r?romulus')), ['romulus'])
         self.assertEqual(list(parse_rquestion_reviewers('Bug 1 - More stuff; r?romulus, r?remus')), ['romulus', 'remus'])
         self.assertEqual(list(parse_rquestion_reviewers('Bug 1 - More stuff; r?romulus,r?remus')), ['romulus', 'remus'])
         self.assertEqual(list(parse_rquestion_reviewers('Bug 1 - More stuff; r?romulus, remus')), ['romulus', 'remus'])
         self.assertEqual(list(parse_rquestion_reviewers('Bug 1 - More stuff; r?romulus,remus')), ['romulus', 'remus'])
         self.assertEqual(list(parse_rquestion_reviewers('Bug 1 - More stuff; (r?romulus)')), ['romulus'])
@@ -260,16 +263,19 @@ differs from that used to generate the h
              'Fixing form test for date fields r=me\n')),
              [])
 
         self.assertEqual(list(parse_rquestion_reviewers(
             'Bug 1024110 - Change Aurora\'s default profile behavior to use channel-specific profiles. r=bsmedberg f=gavin,markh')),
             [])
 
     def test_replace_reviewers(self):
+        # empty
+        self.assertEqual(replace_reviewers('', ['remus']), 'r=remus')
+
         # first with r? reviewer request syntax
         self.assertEqual(replace_reviewers('Bug 1 - some stuff; r?romulus', ['remus']), 'Bug 1 - some stuff; r=remus')
         self.assertEqual(replace_reviewers('Bug 1 - More stuff; r?romulus, r?remus', ['remus']), 'Bug 1 - More stuff; r=remus')
         self.assertEqual(replace_reviewers('Bug 1 - More stuff; r?romulus,r?remus', ['remus']), 'Bug 1 - More stuff; r=remus')
         self.assertEqual(replace_reviewers('Bug 1 - More stuff; r?romulus, remus', ['remus']), 'Bug 1 - More stuff; r=remus')
         self.assertEqual(replace_reviewers('Bug 1 - More stuff; r?romulus,remus', ['remus']), 'Bug 1 - More stuff; r=remus')
         self.assertEqual(replace_reviewers('Bug 1 - More stuff; (r?romulus)', ['remus']), 'Bug 1 - More stuff; (r=remus)')
         self.assertEqual(replace_reviewers('Bug 1 - More stuff; (r?romulus,remus)', ['remus']), 'Bug 1 - More stuff; (r=remus)')