blob: 3265877cfc4ddbf64625b6ba02c66cec9c2294b2 [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 [
23 input_api.os_path.join(current_dir, 'tools'),
24 input_api.os_path.join(current_dir, 'android', 'test', 'javaperftests'),
25 input_api.os_path.join(chromium_src_dir, 'tools', 'perf'),
26 input_api.os_path.join(chromium_src_dir, 'build', 'android'),
27 input_api.os_path.join(chromium_src_dir, 'build', 'android', 'gyp', 'util'),
28 input_api.os_path.join(chromium_src_dir, 'net', 'tools', 'net_docs'),
29 input_api.os_path.join(chromium_src_dir, 'tools'),
30 input_api.os_path.join(chromium_src_dir, 'third_party'),
31 input_api.os_path.join(chromium_src_dir,
32 'third_party', 'catapult', 'telemetry'),
33 input_api.os_path.join(chromium_src_dir,
34 'third_party', 'catapult', 'devil'),
35 ]
36
pauljensen6c178be2016-11-18 23:06:5637
pauljensen17ebec652016-09-14 18:53:2238def _PackageChecks(input_api, output_api):
39 """Verify API classes are in org.chromium.net package, and implementation
40 classes are not in org.chromium.net package."""
41 api_file_pattern = input_api.re.compile(
42 r'^components/cronet/android/api/.*\.(java|template)$')
43 impl_file_pattern = input_api.re.compile(
44 r'^components/cronet/android/java/.*\.(java|template)$')
45 api_package_pattern = input_api.re.compile(r'^package (?!org.chromium.net;)')
46 impl_package_pattern = input_api.re.compile(r'^package org.chromium.net;')
47
48 source_filter = lambda path: input_api.FilterSourceFile(path,
49 white_list=[r'^components/cronet/android/.*\.(java|template)$'])
50
51 problems = []
52 for f in input_api.AffectedSourceFiles(source_filter):
53 local_path = f.LocalPath()
54 for line_number, line in f.ChangedContents():
55 if (api_file_pattern.search(local_path)):
56 if (api_package_pattern.search(line)):
57 problems.append(
58 '%s:%d\n %s' % (local_path, line_number, line.strip()))
59 elif (impl_file_pattern.search(local_path)):
60 if (impl_package_pattern.search(line)):
61 problems.append(
62 '%s:%d\n %s' % (local_path, line_number, line.strip()))
63
64 if problems:
65 return [output_api.PresubmitError(
66 'API classes must be in org.chromium.net package, and implementation\n'
67 'classes must not be in org.chromium.net package.',
68 problems)]
69 else:
70 return []
71
pauljensen6c178be2016-11-18 23:06:5672
pauljensen8c990542017-01-03 19:44:3173def _RunUnittests(input_api, output_api):
74 return input_api.canned_checks.RunUnitTestsInDirectory(
75 input_api, output_api, '.', [ r'^.+_unittest\.py$'])
76
77
kapishnikov0f15b892017-09-29 13:55:2978def _ChangeAffectsCronetForAndroid(change):
79 """ Returns |true| if the change may affect Cronet for Android. """
80
81 for affected_file in change.AffectedFiles():
82 path = affected_file.LocalPath()
83 if not path.startswith(os.path.join('components', 'cronet', 'ios')):
84 return True
85 return False
86
87
88def _ChangeAffectsCronetForIos(change):
89 """ Returns |true| if the change may affect Cronet for iOS. """
90
91 for affected_file in change.AffectedFiles():
92 path = affected_file.LocalPath()
93 if not path.startswith(os.path.join('components', 'cronet', 'android')):
94 return True
95 return False
96
97
pauljensenc3a04232015-08-14 17:21:0198def CheckChangeOnUpload(input_api, output_api):
pauljensen6a6e7832016-05-05 15:43:0399 results = []
100 results.extend(_PyLintChecks(input_api, output_api))
pauljensen17ebec652016-09-14 18:53:22101 results.extend(_PackageChecks(input_api, output_api))
pauljensen8c990542017-01-03 19:44:31102 results.extend(_RunUnittests(input_api, output_api))
pauljensen6a6e7832016-05-05 15:43:03103 return results
pauljensen6c178be2016-11-18 23:06:56104
105
pauljensen8c990542017-01-03 19:44:31106def CheckChangeOnCommit(input_api, output_api):
107 return _RunUnittests(input_api, output_api)
108
109
pauljensen6c178be2016-11-18 23:06:56110def PostUploadHook(cl, change, output_api):
111 """git cl upload will call this hook after the issue is created/modified.
112
113 This hook adds an extra try bot to the CL description in order to run Cronet
114 tests in addition to CQ try bots.
115 """
kapishnikov0f15b892017-09-29 13:55:29116
117 try_bots = []
118 if _ChangeAffectsCronetForAndroid(change):
119 try_bots.append('master.tryserver.chromium.android:android_cronet_tester')
120 if _ChangeAffectsCronetForIos(change):
121 try_bots.append('master.tryserver.chromium.mac:ios-simulator-cronet')
122
kbr43842632017-02-16 19:06:56123 return output_api.EnsureCQIncludeTrybotsAreAdded(
kapishnikov0f15b892017-09-29 13:55:29124 cl, try_bots, 'Automatically added Cronet trybots to run tests on CQ.')