blob: bbd0918069f99be68a61fd4477eabd390d92a66a [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'),
36 ]
37
pauljensen6c178be2016-11-18 23:06:5638
pauljensen17ebec652016-09-14 18:53:2239def _PackageChecks(input_api, output_api):
40 """Verify API classes are in org.chromium.net package, and implementation
41 classes are not in org.chromium.net package."""
42 api_file_pattern = input_api.re.compile(
43 r'^components/cronet/android/api/.*\.(java|template)$')
44 impl_file_pattern = input_api.re.compile(
45 r'^components/cronet/android/java/.*\.(java|template)$')
46 api_package_pattern = input_api.re.compile(r'^package (?!org.chromium.net;)')
47 impl_package_pattern = input_api.re.compile(r'^package org.chromium.net;')
48
49 source_filter = lambda path: input_api.FilterSourceFile(path,
50 white_list=[r'^components/cronet/android/.*\.(java|template)$'])
51
52 problems = []
53 for f in input_api.AffectedSourceFiles(source_filter):
54 local_path = f.LocalPath()
55 for line_number, line in f.ChangedContents():
56 if (api_file_pattern.search(local_path)):
57 if (api_package_pattern.search(line)):
58 problems.append(
59 '%s:%d\n %s' % (local_path, line_number, line.strip()))
60 elif (impl_file_pattern.search(local_path)):
61 if (impl_package_pattern.search(line)):
62 problems.append(
63 '%s:%d\n %s' % (local_path, line_number, line.strip()))
64
65 if problems:
66 return [output_api.PresubmitError(
67 'API classes must be in org.chromium.net package, and implementation\n'
68 'classes must not be in org.chromium.net package.',
69 problems)]
70 else:
71 return []
72
pauljensen6c178be2016-11-18 23:06:5673
Paul Jenseneca797ab2018-08-14 19:32:4674def _RunToolsUnittests(input_api, output_api):
pauljensen8c990542017-01-03 19:44:3175 return input_api.canned_checks.RunUnitTestsInDirectory(
Paul Jenseneca797ab2018-08-14 19:32:4676 input_api, output_api, '.', [ r'^tools_unittest\.py$'])
pauljensen8c990542017-01-03 19:44:3177
78
Paul Jenseneca797ab2018-08-14 19:32:4679def _ChangeAffectsCronetTools(change):
80 """ Returns |true| if the change may affect Cronet tools. """
81
82 for path in change.LocalPaths():
83 if path.startswith(os.path.join('components', 'cronet', 'tools')):
84 return True
85 return False
86
87
pauljensenc3a04232015-08-14 17:21:0188def CheckChangeOnUpload(input_api, output_api):
pauljensen6a6e7832016-05-05 15:43:0389 results = []
90 results.extend(_PyLintChecks(input_api, output_api))
pauljensen17ebec652016-09-14 18:53:2291 results.extend(_PackageChecks(input_api, output_api))
Paul Jenseneca797ab2018-08-14 19:32:4692 if _ChangeAffectsCronetTools(input_api.change):
93 results.extend(_RunToolsUnittests(input_api, output_api))
pauljensen6a6e7832016-05-05 15:43:0394 return results
pauljensen6c178be2016-11-18 23:06:5695
96
pauljensen8c990542017-01-03 19:44:3197def CheckChangeOnCommit(input_api, output_api):
Paul Jenseneca797ab2018-08-14 19:32:4698 return _RunToolsUnittests(input_api, output_api)