aboutsummaryrefslogtreecommitdiff
path: root/catapult/devil/PRESUBMIT.py
diff options
context:
space:
mode:
Diffstat (limited to 'catapult/devil/PRESUBMIT.py')
-rw-r--r--catapult/devil/PRESUBMIT.py85
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)
+