PRESUBMIT.py improvements
authorRavi Mistry <rmistry@google.com>
Wed, 5 Oct 2016 12:41:12 +0000 (08:41 -0400)
committerSkia Commit-Bot <skia-commit-bot@chromium.org>
Wed, 5 Oct 2016 16:38:38 +0000 (16:38 +0000)
* Updated code to check for owners in reviewers for Gerrit issues instead for in the TBR= line.
* The previous TBR parsing code was not accounting for adding comments. Eg: "TBR=rmistry (Testing only)".

BUG=skia:5825

GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2981

Change-Id: I910a3ae71a9f57c14f80c0b0404041cbe451a77c
Reviewed-on: https://skia-review.googlesource.com/2981
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>

PRESUBMIT.py

index 4798a02d594df20f6dbf4ea6f0b703bce93fc32e..320e63d03af4ee6bda596af0c2bd6d3ed583d0cb 100644 (file)
@@ -334,11 +334,20 @@ class CodeReview(object):
     else:
       return self._rietveld_properties['cq_dry_run']
 
+  def GetReviewers(self):
+    if self._gerrit:
+      code_review_label = (
+          self._gerrit.GetChangeInfo(self._issue)['labels']['Code-Review'])
+      return [r['email'] for r in code_review_label.get('all', [])]
+    else:
+      return self._rietveld_properties['reviewers']
+
   def GetApprovers(self):
     approvers = []
     if self._gerrit:
-      for m in self._gerrit.GetChangeInfo(
-                   self._issue)['labels']['Code-Review']['all']:
+      code_review_label = (
+          self._gerrit.GetChangeInfo(self._issue)['labels']['Code-Review'])
+      for m in code_review_label.get('all', []):
         if m.get("value") == 1:
           approvers.append(m["email"])
     else:
@@ -413,14 +422,22 @@ def _CheckLGTMsForPublicAPI(input_api, output_api):
       # going to be committed.
       return results
 
-    match = re.search(r'^TBR=(.*)$', cr.GetDescription(), re.M)
-    if match:
-      tbr_entries = match.group(1).strip().split(',')
-      for owner in PUBLIC_API_OWNERS:
-        if owner in tbr_entries or owner.split('@')[0] in tbr_entries:
-          # If an owner is specified in the TBR= line then ignore the public
-          # api owners check.
+    if input_api.gerrit:
+      for reviewer in cr.GetReviewers():
+        if reviewer in PUBLIC_API_OWNERS:
+          # If an owner is specified as an reviewer in Gerrit then ignore the
+          # public api owners check.
           return results
+    else:
+      match = re.search(r'^TBR=(.*)$', cr.GetDescription(), re.M)
+      if match:
+        tbr_section = match.group(1).strip().split(' ')[0]
+        tbr_entries = tbr_section.split(',')
+        for owner in PUBLIC_API_OWNERS:
+          if owner in tbr_entries or owner.split('@')[0] in tbr_entries:
+            # If an owner is specified in the TBR= line then ignore the public
+            # api owners check.
+            return results
 
     if cr.GetOwnerEmail() in PUBLIC_API_OWNERS:
       # An owner created the CL that is an automatic LGTM.