PRESUBMIT.py improvements

* 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>
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 4798a02..320e63d 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -334,11 +334,20 @@
     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 @@
       # 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.