"""
-def CommonChecks(input_api, output_api):
+def _CommonChecks(input_api, output_api):
output = []
blacklist = [r'classification_rules.*']
output.extend(input_api.canned_checks.RunPylint(
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)