diff options
Diffstat (limited to 'catapult/devil/PRESUBMIT.py')
-rw-r--r-- | catapult/devil/PRESUBMIT.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/catapult/devil/PRESUBMIT.py b/catapult/devil/PRESUBMIT.py new file mode 100644 index 00000000..edec3e16 --- /dev/null +++ b/catapult/devil/PRESUBMIT.py @@ -0,0 +1,85 @@ +# Copyright 2015 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. + +"""Presubmit script for devil. + +See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts for +details on the presubmit API built into depot_tools. +""" + + +def _RunPylint(input_api, output_api): + return input_api.RunTests(input_api.canned_checks.RunPylint( + input_api, output_api, pylintrc='pylintrc')) + + +def _RunUnitTests(input_api, output_api): + def J(*dirs): + """Returns a path relative to presubmit directory.""" + return input_api.os_path.join( + input_api.PresubmitLocalPath(), 'devil', *dirs) + + test_env = dict(input_api.environ) + test_env.update({ + 'PYTHONDONTWRITEBYTECODE': '1', + 'PYTHONPATH': ':'.join([J(), J('..')]), + }) + + return input_api.canned_checks.RunUnitTests( + input_api, + output_api, + unit_tests=[ + J('devil_env_test.py'), + J('android', 'battery_utils_test.py'), + J('android', 'device_utils_test.py'), + J('android', 'fastboot_utils_test.py'), + J('android', 'md5sum_test.py'), + J('android', 'logcat_monitor_test.py'), + J('android', 'tools', 'script_common_test.py'), + J('utils', 'cmd_helper_test.py'), + J('utils', 'timeout_retry_unittest.py'), + ], + env=test_env) + + +def _EnsureNoPylibUse(input_api, output_api): + def other_python_files(f): + this_presubmit_file = input_api.os_path.join( + input_api.PresubmitLocalPath(), 'PRESUBMIT.py') + return (f.LocalPath().endswith('.py') + and not f.AbsoluteLocalPath() == this_presubmit_file) + + changed_files = input_api.AffectedSourceFiles(other_python_files) + import_error_re = input_api.re.compile( + r'(from pylib.* import)|(import pylib)') + + errors = [] + for f in changed_files: + errors.extend( + '%s:%d' % (f.LocalPath(), line_number) + for line_number, line_text in f.ChangedContents() + if import_error_re.search(line_text)) + + if errors: + return [output_api.PresubmitError( + 'pylib modules should not be imported from devil modules.', + items=errors)] + return [] + + +def CommonChecks(input_api, output_api): + output = [] + output += _RunPylint(input_api, output_api) + output += _RunUnitTests(input_api, output_api) + output += _EnsureNoPylibUse(input_api, output_api) + return output + + +def CheckChangeOnUpload(input_api, output_api): + return CommonChecks(input_api, output_api) + + +def CheckChangeOnCommit(input_api, output_api): + return CommonChecks(input_api, output_api) + |