| Index: tools/memory_inspector/PRESUBMIT.py
|
| diff --git a/tools/memory_inspector/PRESUBMIT.py b/tools/memory_inspector/PRESUBMIT.py
|
| index 5d0e21e3d35ec130486171526ef8518fef52cd38..b09205f6259c196946a495b820065babcf948fca 100644
|
| --- a/tools/memory_inspector/PRESUBMIT.py
|
| +++ b/tools/memory_inspector/PRESUBMIT.py
|
| @@ -9,7 +9,7 @@ details on the presubmit API built into gcl.
|
| """
|
|
|
|
|
| -def CommonChecks(input_api, output_api):
|
| +def _CommonChecks(input_api, output_api):
|
| output = []
|
| blacklist = [r'classification_rules.*']
|
| output.extend(input_api.canned_checks.RunPylint(
|
| @@ -30,9 +30,55 @@ def CommonChecks(input_api, output_api):
|
| 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):
|
| - return CommonChecks(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)
|
| + return _CommonChecks(input_api, output_api)
|
|
|