blob: bd1f73be6ad962a25f70d51872c04955dad8db72 [file] [log] [blame]
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Top-level presubmit script for memory_inspector.
See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for
details on the presubmit API built into depot_tools.
"""
def _CommonChecks(input_api, output_api):
output = []
blacklist = [r'classification_rules.*']
output.extend(input_api.canned_checks.RunPylint(
input_api, output_api, black_list=blacklist,
extra_paths_list=[
input_api.os_path.join(input_api.PresubmitLocalPath(), '..', '..',
'build', 'android')
]))
output.extend(input_api.canned_checks.RunUnitTests(
input_api,
output_api,
[input_api.os_path.join(input_api.PresubmitLocalPath(), 'run_tests')]))
if input_api.is_committing:
output.extend(input_api.canned_checks.PanProjectChecks(input_api,
output_api,
owners_check=False))
return output
def _CheckPrebuiltsAreUploaded(input_api, output_api):
"""Checks that the SHA1 files in prebuilts/ reference existing objects on GCS.
This is to avoid that somebody accidentally checks in some new XXX.sha1 files
into prebuilts/ without having previously uploaded the corresponding binaries
to the cloud storage bucket. This can happen if the developer has a consistent
local copy of the binary. This check verifies (through a HTTP HEAD request)
that the GCS bucket has an object for each .sha1 file in prebuilts and raises
a presubmit error, listing the missing files, if not.
"""
import sys
import urllib2
old_sys_path = sys.path
try:
sys.path = [input_api.PresubmitLocalPath()] + sys.path
from memory_inspector import constants
finally:
sys.path = old_sys_path
missing_files = []
for f in input_api.os_listdir(constants.PREBUILTS_PATH):
if not f.endswith('.sha1'):
continue
prebuilt_sha_path = input_api.os_path.join(constants.PREBUILTS_PATH, f)
with open(prebuilt_sha_path) as sha_file:
sha = sha_file.read().strip()
url = constants.PREBUILTS_BASE_URL + sha
request = urllib2.Request(url)
request.get_method = lambda : 'HEAD'
try:
urllib2.urlopen(request, timeout=5)
except Exception as e:
if isinstance(e, urllib2.HTTPError) and e.code == 404:
missing_files += [prebuilt_sha_path]
else:
return [output_api.PresubmitError('HTTP Error while checking %s' % url,
long_text=str(e))]
if missing_files:
return [output_api.PresubmitError(
'Some prebuilts have not been uploaded. Perhaps you forgot to '
'upload_to_google_storage.py?', missing_files)]
return []
def CheckChangeOnUpload(input_api, output_api):
results = []
results.extend(_CommonChecks(input_api, output_api))
results.extend(_CheckPrebuiltsAreUploaded(input_api, output_api))
return results
def CheckChangeOnCommit(input_api, output_api):
return _CommonChecks(input_api, output_api)