blob: 0cdacf23315504096d3a21bf6012b846c73c5a4f [file] [log] [blame]
# Copyright 2012 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.
def _CommonChecks(input_api, output_api):
results = []
# TODO(nednguyen): Remove this once telemetry is switched over to use
# catapult/catapult_base/. (crbug.com/565604)
black_list = list(input_api.DEFAULT_BLACK_LIST) + [
r'.*catapult_base/.*']
results.extend(input_api.RunTests(input_api.canned_checks.GetPylint(
input_api, output_api, extra_paths_list=_GetPathsToPrepend(input_api),
black_list=black_list, pylintrc='pylintrc')))
results.extend(_CheckNoMoreUsageOfDeprecatedCode(
input_api, output_api, deprecated_code='GetChromiumSrcDir()',
crbug_number=511332))
return results
def _RunArgs(args, input_api):
p = input_api.subprocess.Popen(args, stdout=input_api.subprocess.PIPE,
stderr=input_api.subprocess.STDOUT)
out, _ = p.communicate()
return (out, p.returncode)
def _CheckTelemetryBinaryDependencies(input_api, output_api):
""" Check that binary_dependencies.json has valid format and content.
This check should only be done in CheckChangeOnUpload() only since it invokes
network I/O.
"""
results = []
telemetry_dir = input_api.PresubmitLocalPath()
telemetry_binary_dependencies_path = input_api.os_path.join(
telemetry_dir, 'telemetry', 'internal', 'binary_dependencies.json')
for f in input_api.AffectedFiles():
if not f.AbsoluteLocalPath() == telemetry_binary_dependencies_path:
continue
out, return_code = _RunArgs([
input_api.python_executable,
input_api.os_path.join(telemetry_dir, 'json_format'),
telemetry_binary_dependencies_path], input_api)
if return_code:
results.append(output_api.PresubmitError(
'Validating binary_dependencies.json failed:', long_text=out))
break
out, return_code = _RunArgs([
input_api.python_executable,
input_api.os_path.join(telemetry_dir, 'validate_binary_dependencies'),
telemetry_binary_dependencies_path], input_api)
if return_code:
results.append(output_api.PresubmitError(
'Validating binary_dependencies.json failed:', long_text=out))
break
return results
def _CheckNoMoreUsageOfDeprecatedCode(
input_api, output_api, deprecated_code, crbug_number):
results = []
# These checks are not perfcet but should be good enough for most of our
# usecases.
def _IsAddedLine(line):
return line.startswith('+') and not line.startswith('+++ ')
def _IsRemovedLine(line):
return line.startswith('-') and not line.startswith('--- ')
presubmit_dir = input_api.os_path.join(
input_api.PresubmitLocalPath(), 'PRESUBMIT.py')
added_calls = 0
removed_calls = 0
for affected_file in input_api.AffectedFiles():
# Do not do the check on PRESUBMIT.py itself.
if affected_file.AbsoluteLocalPath() == presubmit_dir:
continue
for line in affected_file.GenerateScmDiff().splitlines():
if _IsAddedLine(line) and deprecated_code in line:
added_calls += 1
elif _IsRemovedLine(line) and deprecated_code in line:
removed_calls += 1
if added_calls > removed_calls:
results.append(output_api.PresubmitError(
'Your patch adds more instances of %s. Please see crbug.com/%i for'
'how to proceed.' % (deprecated_code, crbug_number)))
return results
def _GetPathsToPrepend(input_api):
telemetry_dir = input_api.PresubmitLocalPath()
chromium_src_dir = input_api.os_path.join(telemetry_dir, '..', '..')
return [
telemetry_dir,
input_api.os_path.join(telemetry_dir, 'third_party', 'altgraph'),
input_api.os_path.join(telemetry_dir, 'third_party', 'mock'),
input_api.os_path.join(telemetry_dir, 'third_party', 'modulegraph'),
input_api.os_path.join(telemetry_dir, 'third_party', 'pexpect'),
input_api.os_path.join(telemetry_dir, 'third_party', 'png'),
input_api.os_path.join(telemetry_dir, 'third_party', 'pyfakefs'),
input_api.os_path.join(telemetry_dir, 'third_party', 'pyserial'),
input_api.os_path.join(telemetry_dir, 'third_party', 'typ'),
input_api.os_path.join(telemetry_dir, 'third_party', 'webpagereplay'),
input_api.os_path.join(telemetry_dir, 'third_party', 'websocket-client'),
input_api.os_path.join(chromium_src_dir, 'build', 'android'),
input_api.os_path.join(chromium_src_dir,
'third_party', 'catapult', 'tracing'),
]
def CheckChangeOnUpload(input_api, output_api):
results = []
results.extend(_CommonChecks(input_api, output_api))
results.extend(_CheckTelemetryBinaryDependencies(input_api, output_api))
return results
def CheckChangeOnCommit(input_api, output_api):
results = []
results.extend(_CommonChecks(input_api, output_api))
return results