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