Index: build/android/devil/PRESUBMIT.py |
diff --git a/build/android/devil/PRESUBMIT.py b/build/android/devil/PRESUBMIT.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e2c3dfe5107f1bd9e047df7734577082b3fb52ef |
--- /dev/null |
+++ b/build/android/devil/PRESUBMIT.py |
@@ -0,0 +1,87 @@ |
+# 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.canned_checks.RunPylint( |
+ input_api, |
+ output_api, |
+ pylintrc='pylintrc', |
+ extra_paths_list=[ |
+ input_api.os_path.join(input_api.PresubmitLocalPath(), '..'), |
+ ]) |
+ |
+ |
+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(), *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('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) |