1*8975f5c5SAndroid Build Coastguard Worker# Copyright 2022 The Chromium Authors 2*8975f5c5SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*8975f5c5SAndroid Build Coastguard Worker# found in the LICENSE file. 4*8975f5c5SAndroid Build Coastguard Worker 5*8975f5c5SAndroid Build Coastguard WorkerPRESUBMIT_VERSION = '2.0.0' 6*8975f5c5SAndroid Build Coastguard Worker 7*8975f5c5SAndroid Build Coastguard Workerimport textwrap 8*8975f5c5SAndroid Build Coastguard Worker 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Workerdef CheckNoBadDeps(input_api, output_api): 11*8975f5c5SAndroid Build Coastguard Worker """Prevent additions of bad dependencies from the //build prefix.""" 12*8975f5c5SAndroid Build Coastguard Worker build_file_patterns = [ 13*8975f5c5SAndroid Build Coastguard Worker r'(.+/)?BUILD\.gn', 14*8975f5c5SAndroid Build Coastguard Worker r'.+\.gni', 15*8975f5c5SAndroid Build Coastguard Worker ] 16*8975f5c5SAndroid Build Coastguard Worker exclude_file_patterns = [ 17*8975f5c5SAndroid Build Coastguard Worker r'build/rust/tests', 18*8975f5c5SAndroid Build Coastguard Worker ] 19*8975f5c5SAndroid Build Coastguard Worker blocklist_pattern = input_api.re.compile(r'^[^#]*"//(?!build).+?/.*"') 20*8975f5c5SAndroid Build Coastguard Worker allowlist_pattern = input_api.re.compile(r'^[^#]*"//third_party/junit') 21*8975f5c5SAndroid Build Coastguard Worker 22*8975f5c5SAndroid Build Coastguard Worker warning_message = textwrap.dedent(""" 23*8975f5c5SAndroid Build Coastguard Worker The //build directory is meant to be as hermetic as possible so that 24*8975f5c5SAndroid Build Coastguard Worker other projects (webrtc, v8, angle) can make use of it. If you are adding 25*8975f5c5SAndroid Build Coastguard Worker a new dep from //build onto another directory, you should consider: 26*8975f5c5SAndroid Build Coastguard Worker 1) Can that dep live within //build? 27*8975f5c5SAndroid Build Coastguard Worker 2) Can the dep be guarded by "build_with_chromium"? 28*8975f5c5SAndroid Build Coastguard Worker 3) Have you made this new dep easy to pull in for other projects (ideally 29*8975f5c5SAndroid Build Coastguard Worker a matter of adding a DEPS entry).:""") 30*8975f5c5SAndroid Build Coastguard Worker 31*8975f5c5SAndroid Build Coastguard Worker def FilterFile(affected_file): 32*8975f5c5SAndroid Build Coastguard Worker return input_api.FilterSourceFile(affected_file, 33*8975f5c5SAndroid Build Coastguard Worker files_to_check=build_file_patterns, 34*8975f5c5SAndroid Build Coastguard Worker files_to_skip=exclude_file_patterns) 35*8975f5c5SAndroid Build Coastguard Worker 36*8975f5c5SAndroid Build Coastguard Worker problems = [] 37*8975f5c5SAndroid Build Coastguard Worker for f in input_api.AffectedSourceFiles(FilterFile): 38*8975f5c5SAndroid Build Coastguard Worker local_path = f.LocalPath() 39*8975f5c5SAndroid Build Coastguard Worker for line_number, line in f.ChangedContents(): 40*8975f5c5SAndroid Build Coastguard Worker if blocklist_pattern.search(line) and not allowlist_pattern.search(line): 41*8975f5c5SAndroid Build Coastguard Worker problems.append('%s:%d\n %s' % 42*8975f5c5SAndroid Build Coastguard Worker (local_path, line_number, line.strip())) 43*8975f5c5SAndroid Build Coastguard Worker if problems: 44*8975f5c5SAndroid Build Coastguard Worker return [output_api.PresubmitPromptOrNotify(warning_message, problems)] 45*8975f5c5SAndroid Build Coastguard Worker else: 46*8975f5c5SAndroid Build Coastguard Worker return [] 47*8975f5c5SAndroid Build Coastguard Worker 48*8975f5c5SAndroid Build Coastguard Worker 49*8975f5c5SAndroid Build Coastguard Workerdef CheckPythonTests(input_api, output_api): 50*8975f5c5SAndroid Build Coastguard Worker return input_api.RunTests( 51*8975f5c5SAndroid Build Coastguard Worker input_api.canned_checks.GetUnitTestsInDirectory( 52*8975f5c5SAndroid Build Coastguard Worker input_api, 53*8975f5c5SAndroid Build Coastguard Worker output_api, 54*8975f5c5SAndroid Build Coastguard Worker input_api.PresubmitLocalPath(), 55*8975f5c5SAndroid Build Coastguard Worker files_to_check=[r'.+_(?:unit)?test\.py$'])) 56