| 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(
|
|
|