# 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)