| Index: PRESUBMIT.py
|
| ===================================================================
|
| --- PRESUBMIT.py (revision 10639)
|
| +++ PRESUBMIT.py (working copy)
|
| @@ -15,7 +15,14 @@
|
|
|
| SKIA_TREE_STATUS_URL = 'http://skia-tree-status.appspot.com'
|
|
|
| +PUBLIC_API_OWNERS = (
|
| + 'reed@chromium.org',
|
| + 'reed@google.com',
|
| + 'bsalomon@chromium.org',
|
| + 'bsalomon@google.com',
|
| +)
|
|
|
| +
|
| def _CheckChangeHasEol(input_api, output_api, source_file_filter=None):
|
| """Checks that files end with atleast one \n (LF)."""
|
| eof_files = []
|
| @@ -96,6 +103,50 @@
|
| return tree_status_results
|
|
|
|
|
| +def _CheckLGTMsForPublicAPI(input_api, output_api):
|
| + """Check LGTMs for public API changes.
|
| +
|
| + For public API files make sure there is an LGTM from the list of owners in
|
| + PUBLIC_API_OWNERS.
|
| + """
|
| + results = []
|
| + requires_owner_check = False
|
| + for affected_svn_file in input_api.AffectedFiles():
|
| + affected_file_path = affected_svn_file.AbsoluteLocalPath()
|
| + file_path, file_ext = os.path.splitext(affected_file_path)
|
| + # We only care about files that end in .h and are under the include dir.
|
| + if file_ext == '.h' and 'include' in file_path.split(os.path.sep):
|
| + requires_owner_check = True
|
| +
|
| + if not requires_owner_check:
|
| + 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 issue_properties['owner_email'] 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;
|
| +
|
| + if not lgtm_from_owner:
|
| + results.append(
|
| + output_api.PresubmitError(
|
| + 'Since the CL is editing public API, you must have an LGTM from '
|
| + 'one of: %s' % str(PUBLIC_API_OWNERS)))
|
| + return results
|
| +
|
| +
|
| def CheckChangeOnCommit(input_api, output_api):
|
| """Presubmit checks for the change on commit.
|
|
|
| @@ -110,4 +161,5 @@
|
| results.extend(
|
| _CheckTreeStatus(input_api, output_api, json_url=(
|
| SKIA_TREE_STATUS_URL + '/banner-status?format=json')))
|
| + results.extend(_CheckLGTMsForPublicAPI(input_api, output_api))
|
| return results
|
|
|