| Index: PRESUBMIT.py
|
| diff --git a/PRESUBMIT.py b/PRESUBMIT.py
|
| index 3fd8314f0b8074a82334481a0b753d777723c9e7..92b686e676d3088a972da7e4b2f94b350dd84609 100644
|
| --- a/PRESUBMIT.py
|
| +++ b/PRESUBMIT.py
|
| @@ -280,14 +280,62 @@ def _CheckTreeStatus(input_api, output_api, json_url):
|
| return tree_status_results
|
|
|
|
|
| +class CodeReview(object):
|
| + """Abstracts which codereview tool is used for the specified issue."""
|
| +
|
| + def __init__(self, input_api):
|
| + self._issue = input_api.change.issue
|
| + self._gerrit = input_api.gerrit
|
| + self._rietveld_properties = None
|
| + if not self._gerrit:
|
| + self._rietveld_properties = input_api.rietveld.get_issue_properties(
|
| + issue=int(self._issue), messages=True)
|
| +
|
| + def GetOwnerEmail(self):
|
| + if self._gerrit:
|
| + return self._gerrit.GetChangeOwner(self._issue)
|
| + else:
|
| + return self._rietveld_properties['owner_email']
|
| +
|
| + def GetSubject(self):
|
| + if self._gerrit:
|
| + return self._gerrit.GetChangeInfo(self._issue)['subject']
|
| + else:
|
| + return self._rietveld_properties['subject']
|
| +
|
| + def GetDescription(self):
|
| + if self._gerrit:
|
| + return self._gerrit.GetChangeDescription(self._issue)
|
| + else:
|
| + return self._rietveld_properties['description']
|
| +
|
| + def IsDryRun(self):
|
| + if self._gerrit:
|
| + return self._gerrit.GetChangeInfo(
|
| + self._issue)['labels']['Commit-Queue'].get('value', 0) == 1
|
| + else:
|
| + return self._rietveld_properties['cq_dry_run']
|
| +
|
| + def GetApprovers(self):
|
| + approvers = []
|
| + if self._gerrit:
|
| + for m in self._gerrit.GetChangeInfo(
|
| + self._issue)['labels']['Code-Review']['all']:
|
| + if m.get("value") == 1:
|
| + approvers.append(m["email"])
|
| + else:
|
| + for m in self._rietveld_properties.get('messages', []):
|
| + if 'lgtm' in m['text'].lower():
|
| + approvers.append(m['sender'])
|
| + return approvers
|
| +
|
| +
|
| def _CheckOwnerIsInAuthorsFile(input_api, output_api):
|
| results = []
|
| - issue = input_api.change.issue
|
| - if issue and input_api.rietveld:
|
| - issue_properties = input_api.rietveld.get_issue_properties(
|
| - issue=int(issue), messages=False)
|
| - owner_email = issue_properties['owner_email']
|
| + if input_api.change.issue:
|
| + cr = CodeReview(input_api)
|
|
|
| + owner_email = cr.GetOwnerEmail()
|
| try:
|
| authors_content = ''
|
| for line in open(AUTHORS_FILE_NAME):
|
| @@ -335,20 +383,19 @@ def _CheckLGTMsForPublicAPI(input_api, output_api):
|
| return results
|
|
|
| lgtm_from_owner = False
|
| - issue = input_api.change.issue
|
| - if issue and input_api.rietveld:
|
| - issue_properties = input_api.rietveld.get_issue_properties(
|
| - issue=int(issue), messages=True)
|
| - if re.match(REVERT_CL_SUBJECT_PREFIX, issue_properties['subject'], re.I):
|
| + if input_api.change.issue:
|
| + cr = CodeReview(input_api)
|
| +
|
| + if re.match(REVERT_CL_SUBJECT_PREFIX, cr.GetSubject(), re.I):
|
| # It is a revert CL, ignore the public api owners check.
|
| return results
|
|
|
| - if issue_properties['cq_dry_run']:
|
| + if cr.IsDryRun():
|
| # Ignore public api owners check for dry run CLs since they are not
|
| # going to be committed.
|
| return results
|
|
|
| - match = re.search(r'^TBR=(.*)$', issue_properties['description'], re.M)
|
| + match = re.search(r'^TBR=(.*)$', cr.GetDescription(), re.M)
|
| if match:
|
| tbr_entries = match.group(1).strip().split(',')
|
| for owner in PUBLIC_API_OWNERS:
|
| @@ -357,18 +404,15 @@ def _CheckLGTMsForPublicAPI(input_api, output_api):
|
| # api owners check.
|
| return results
|
|
|
| - if issue_properties['owner_email'] in PUBLIC_API_OWNERS:
|
| + if cr.GetOwnerEmail() in PUBLIC_API_OWNERS:
|
| # An owner created the CL that is an automatic LGTM.
|
| lgtm_from_owner = True
|
|
|
| - messages = issue_properties.get('messages')
|
| - if messages:
|
| - for message in messages:
|
| - if (message['sender'] in PUBLIC_API_OWNERS and
|
| - 'lgtm' in message['text'].lower()):
|
| - # Found an lgtm in a message from an owner.
|
| - lgtm_from_owner = True
|
| - break
|
| + for approver in cr.GetApprovers():
|
| + if approver in PUBLIC_API_OWNERS:
|
| + # Found an lgtm in a message from an owner.
|
| + lgtm_from_owner = True
|
| + break
|
|
|
| if not lgtm_from_owner:
|
| results.append(
|
| @@ -399,6 +443,12 @@ def PostUploadHook(cl, change, output_api):
|
| """
|
|
|
| results = []
|
| + if cl.IsGerrit():
|
| + results.append(
|
| + output_api.PresubmitNotifyResult(
|
| + 'Post upload hooks are not yet supported for Gerrit CLs'))
|
| + return results
|
| +
|
| atleast_one_docs_change = False
|
| all_docs_changes = True
|
| for affected_file in change.AffectedFiles():
|
|
|