Commit 75a9e5a0 authored by primiano's avatar primiano Committed by Commit bot

[Android] memory_inspector: update PRESUBMIT.py to check prebuilts.

Add a PRESUBMIT check to verify that all prebuilts are actually
deployed to GCS (i.e. the committer didn't forget to run
upload_to_google_storage.py).

BUG=340294
NOTRY=true

Review URL: https://codereview.chromium.org/562553003

Cr-Commit-Position: refs/heads/master@{#295057}
parent e464c704
...@@ -9,7 +9,7 @@ details on the presubmit API built into gcl. ...@@ -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 = [] output = []
blacklist = [r'classification_rules.*'] blacklist = [r'classification_rules.*']
output.extend(input_api.canned_checks.RunPylint( output.extend(input_api.canned_checks.RunPylint(
...@@ -30,9 +30,55 @@ def CommonChecks(input_api, output_api): ...@@ -30,9 +30,55 @@ def CommonChecks(input_api, output_api):
return output 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): 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): def CheckChangeOnCommit(input_api, output_api):
return CommonChecks(input_api, output_api) return _CommonChecks(input_api, output_api)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment