Index: presubmit_canned_checks.py |
diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py |
index e21d08675f27849a0a40a1a580908a36b2826d3e..1e16d8fffba2a70c69c75de569b37e9b8d0edbd7 100644 |
--- a/presubmit_canned_checks.py |
+++ b/presubmit_canned_checks.py |
@@ -875,8 +875,7 @@ def CheckOwners(input_api, output_api, source_file_filter=None): |
input_api.change.AffectedFiles(file_filter=source_file_filter)]) |
owners_db = input_api.owners_db |
- # TODO(tandrii): this will always return None, set() in case of Gerrit. |
- owner_email, reviewers = _RietveldOwnerAndReviewers( |
+ owner_email, reviewers = _CodereviewOwnersAndReviewers( |
input_api, |
owners_db.email_regexp, |
approval_needed=input_api.is_committing) |
@@ -905,6 +904,26 @@ def CheckOwners(input_api, output_api, source_file_filter=None): |
return [output('Missing LGTM from someone other than %s' % owner_email)] |
return [] |
+def _CodereviewOwnersAndReviewers(input_api, email_regexp, approval_needed): |
+ """Return the owner and reviewers of a change, if any. |
+ |
+ If approval_needed is True, only reviewers who have approved the change |
+ will be returned. |
+ """ |
+ if input_api.change.issue: |
+ if input_api.gerrit: |
+ res = _GerritOwnerAndReviewers(input_api, email_regexp, approval_needed) |
+ else: |
+ # Rietveld is default. |
+ res = _RietveldOwnerAndReviewers(input_api, email_regexp, approval_needed) |
+ if res: |
+ return res |
+ |
+ reviewers = set() |
+ if not approval_needed: |
+ reviewers = _ReviewersFromChange(input_api.change) |
+ return None, reviewers |
+ |
def _GetRietveldIssueProps(input_api, messages): |
"""Gets the issue properties from rietveld.""" |
@@ -926,35 +945,51 @@ def _ReviewersFromChange(change): |
return set(reviewer for reviewer in reviewers if '@' in reviewer) |
+def _match_reviewer_email(r, owner_email, email_regexp): |
+ return email_regexp.match(r) and r != owner_email |
+ |
def _RietveldOwnerAndReviewers(input_api, email_regexp, approval_needed=False): |
"""Return the owner and reviewers of a change, if any. |
If approval_needed is True, only reviewers who have approved the change |
will be returned. |
+ Returns None if can't fetch issue properties from codereview. |
""" |
issue_props = _GetRietveldIssueProps(input_api, True) |
if not issue_props: |
- reviewers = set() |
- if not approval_needed: |
- reviewers = _ReviewersFromChange(input_api.change) |
- return None, reviewers |
+ return None |
if not approval_needed: |
return issue_props['owner_email'], set(issue_props['reviewers']) |
owner_email = issue_props['owner_email'] |
- def match_reviewer(r): |
- return email_regexp.match(r) and r != owner_email |
- |
messages = issue_props.get('messages', []) |
approvers = set( |
m['sender'] for m in messages |
- if m.get('approval') and match_reviewer(m['sender'])) |
- |
+ if m.get('approval') and _match_reviewer_email(m['sender'], owner_email, |
+ email_regexp)) |
return owner_email, approvers |
+def _GerritOwnerAndReviewers(input_api, email_regexp, approval_needed=False): |
+ """Return the owner and reviewers of a change, if any. |
+ |
+ If approval_needed is True, only reviewers who have approved the change |
+ will be returned. |
+ Returns None if can't fetch issue properties from codereview. |
+ """ |
+ issue = input_api.change.issue |
+ if not issue: |
+ return None |
+ |
+ owner_email = input_api.gerrit.GetChangeOwner(issue) |
+ reviewers = set( |
+ r for r in input_api.gerrit.GetChangeReviewers(issue, approval_needed) |
+ if _match_reviewer_email(r, owner_email, email_regexp)) |
+ return owner_email, reviewers |
+ |
+ |
def _CheckConstNSObject(input_api, output_api, source_file_filter): |
"""Checks to make sure no objective-c files have |const NSSomeClass*|.""" |
pattern = input_api.re.compile( |