blob: 3c0229835a8e3f49e1dbf4dc78bd72d4f4de64ef [file] [log] [blame]
pauljensenc3a04232015-08-14 17:21:011# Copyright 2015 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5"""Top-level presubmit script for src/components/cronet.
6
7See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
8for more details about the presubmit API built into depot_tools.
9"""
10
kapishnikov0f15b892017-09-29 13:55:2911import os
12
pauljensen6a6e7832016-05-05 15:43:0313def _PyLintChecks(input_api, output_api):
14 pylint_checks = input_api.canned_checks.GetPylint(input_api, output_api,
15 extra_paths_list=_GetPathsToPrepend(input_api), pylintrc='pylintrc')
16 return input_api.RunTests(pylint_checks)
17
pauljensen6c178be2016-11-18 23:06:5618
pauljensen6a6e7832016-05-05 15:43:0319def _GetPathsToPrepend(input_api):
20 current_dir = input_api.PresubmitLocalPath()
21 chromium_src_dir = input_api.os_path.join(current_dir, '..', '..')
22 return [
Juan Antonio Navarro Perezf18a2a492019-07-01 07:01:0623 input_api.os_path.join(chromium_src_dir, 'components'),
pauljensen6a6e7832016-05-05 15:43:0324 input_api.os_path.join(chromium_src_dir, 'tools', 'perf'),
25 input_api.os_path.join(chromium_src_dir, 'build', 'android'),
Juan Antonio Navarro Perezf18a2a492019-07-01 07:01:0626 input_api.os_path.join(chromium_src_dir, 'build', 'android', 'gyp'),
Misha Efimovb427f9862017-11-30 21:32:5327 input_api.os_path.join(chromium_src_dir,
28 'mojo', 'public', 'tools', 'bindings', 'pylib'),
pauljensen6a6e7832016-05-05 15:43:0329 input_api.os_path.join(chromium_src_dir, 'net', 'tools', 'net_docs'),
30 input_api.os_path.join(chromium_src_dir, 'tools'),
31 input_api.os_path.join(chromium_src_dir, 'third_party'),
32 input_api.os_path.join(chromium_src_dir,
33 'third_party', 'catapult', 'telemetry'),
34 input_api.os_path.join(chromium_src_dir,
35 'third_party', 'catapult', 'devil'),
Juan Antonio Navarro Perez18a6a482019-07-02 07:04:0836 input_api.os_path.join(chromium_src_dir,
37 'third_party', 'catapult', 'common', 'py_utils'),
pauljensen6a6e7832016-05-05 15:43:0338 ]
39
pauljensen6c178be2016-11-18 23:06:5640
pauljensen17ebec652016-09-14 18:53:2241def _PackageChecks(input_api, output_api):
42 """Verify API classes are in org.chromium.net package, and implementation
43 classes are not in org.chromium.net package."""
44 api_file_pattern = input_api.re.compile(
45 r'^components/cronet/android/api/.*\.(java|template)$')
46 impl_file_pattern = input_api.re.compile(
47 r'^components/cronet/android/java/.*\.(java|template)$')
48 api_package_pattern = input_api.re.compile(r'^package (?!org.chromium.net;)')
49 impl_package_pattern = input_api.re.compile(r'^package org.chromium.net;')
50
51 source_filter = lambda path: input_api.FilterSourceFile(path,
52 white_list=[r'^components/cronet/android/.*\.(java|template)$'])
53
54 problems = []
55 for f in input_api.AffectedSourceFiles(source_filter):
56 local_path = f.LocalPath()
57 for line_number, line in f.ChangedContents():
58 if (api_file_pattern.search(local_path)):
59 if (api_package_pattern.search(line)):
60 problems.append(
61 '%s:%d\n %s' % (local_path, line_number, line.strip()))
62 elif (impl_file_pattern.search(local_path)):
63 if (impl_package_pattern.search(line)):
64 problems.append(
65 '%s:%d\n %s' % (local_path, line_number, line.strip()))
66
67 if problems:
68 return [output_api.PresubmitError(
69 'API classes must be in org.chromium.net package, and implementation\n'
70 'classes must not be in org.chromium.net package.',
71 problems)]
72 else:
73 return []
74
pauljensen6c178be2016-11-18 23:06:5675
Paul Jenseneca797ab2018-08-14 19:32:4676def _RunToolsUnittests(input_api, output_api):
pauljensen8c990542017-01-03 19:44:3177 return input_api.canned_checks.RunUnitTestsInDirectory(
Paul Jenseneca797ab2018-08-14 19:32:4678 input_api, output_api, '.', [ r'^tools_unittest\.py$'])
pauljensen8c990542017-01-03 19:44:3179
80
Paul Jenseneca797ab2018-08-14 19:32:4681def _ChangeAffectsCronetTools(change):
82 """ Returns |true| if the change may affect Cronet tools. """
83
84 for path in change.LocalPaths():
85 if path.startswith(os.path.join('components', 'cronet', 'tools')):
86 return True
87 return False
88
89
pauljensenc3a04232015-08-14 17:21:0190def CheckChangeOnUpload(input_api, output_api):
pauljensen6a6e7832016-05-05 15:43:0391 results = []
92 results.extend(_PyLintChecks(input_api, output_api))
pauljensen17ebec652016-09-14 18:53:2293 results.extend(_PackageChecks(input_api, output_api))
Paul Jenseneca797ab2018-08-14 19:32:4694 if _ChangeAffectsCronetTools(input_api.change):
95 results.extend(_RunToolsUnittests(input_api, output_api))
pauljensen6a6e7832016-05-05 15:43:0396 return results
pauljensen6c178be2016-11-18 23:06:5697
98
pauljensen8c990542017-01-03 19:44:3199def CheckChangeOnCommit(input_api, output_api):
Paul Jenseneca797ab2018-08-14 19:32:46100 return _RunToolsUnittests(input_api, output_api)