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