Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /chrome /PRESUBMIT.py
blob: 4c693d05f4cf162244b7bdd3847b8aea0ca596de [file] [log] [blame] [edit]
# Copyright 2011 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Presubmit script for changes affecting chrome/
See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
for more details about the presubmit API built into depot_tools.
"""
import re
INCLUDE_CPP_FILES_ONLY=(
r'.*\.(cc|h)$',
)
INCLUDE_SOURCE_FILES_ONLY=(
r'.*\.(c|cc|cpp|h|m|mm)$',
)
EXCLUDE=(
# Objective C confuses everything.
r'.*cocoa.*',
r'.*_mac\.(cc|h)$',
r'.*_mac_.*',
# All the messages files do weird multiple include trickery
r'.*_messages.*\.h$',
# Autogenerated window resources files are off limits
r'.*resource.h$',
# Header trickery
r'.*-inl\.h$',
# Has safe printf usage that cpplint complains about
r'safe_browsing_util\.cc$',
)
def_CheckChangeLintsClean(input_api, output_api):
"""Makes sure that the chrome/ code is cpplint clean."""
files_to_skip= input_api.DEFAULT_FILES_TO_SKIP+ EXCLUDE
sources=lambda x: input_api.FilterSourceFile(
x, files_to_check=INCLUDE_CPP_FILES_ONLY, files_to_skip=files_to_skip)
return input_api.canned_checks.CheckChangeLintsClean(
input_api, output_api, sources)
def_CheckNoContentUnitTestsInChrome(input_api, output_api):
"""Makes sure that no unit tests from content/ are included in unit_tests."""
problems=[]
for fin input_api.AffectedFiles():
ifnot f.LocalPath().endswith('BUILD.gn'):
continue
for line_num, linein f.ChangedContents():
m= re.search(r"'(.*\/content\/.*unittest.*)'", line)
if m:
problems.append(m.group(1))
ifnot problems:
return[]
return[output_api.PresubmitPromptWarning(
'Unit tests located in content/ should be added to the '+
'content_unittests target.',
items=problems)]
def_CheckNoIsAppleBuildFlagsInChromeFile(input_api, f):
"""Check for IS_APPLE in a given file in chrome/."""
preprocessor_statement= input_api.re.compile(r'^\s*#')
apple_buildflag= input_api.re.compile(r'BUILDFLAG\(IS_APPLE\)')
results=[]
for lnum, linein f.ChangedContents():
if preprocessor_statement.search(line)and apple_buildflag.search(line):
results.append(' %s:%d'%(f.LocalPath(), lnum))
return results
def_CheckNoIsAppleBuildFlagsInChrome(input_api, output_api):
"""Check for IS_APPLE which isn't used in chrome/."""
apple_buildflags=[]
defSourceFilter(affected_file):
return input_api.FilterSourceFile(affected_file, INCLUDE_SOURCE_FILES_ONLY,
input_api.DEFAULT_FILES_TO_SKIP)
for fin input_api.AffectedSourceFiles(SourceFilter):
apple_buildflags.extend(_CheckNoIsAppleBuildFlagsInChromeFile(input_api, f))
ifnot apple_buildflags:
return[]
return[output_api.PresubmitError(
'IS_APPLE is not used in chrome/ but found in:\n', apple_buildflags)]
def_CheckNoIsIOSBuildFlagsInChromeFile(input_api, f):
"""Check for IS_IOS in a given file in chrome/."""
preprocessor_statement= input_api.re.compile(r'^\s*#')
ios_buildflag= input_api.re.compile(r'BUILDFLAG\(IS_IOS\)')
results=[]
for lnum, linein f.ChangedContents():
if preprocessor_statement.search(line)and ios_buildflag.search(line):
results.append(' %s:%d'%(f.LocalPath(), lnum))
return results
def_CheckNoIsIOSBuildFlagsInChrome(input_api, output_api):
"""Check for IS_IOS which isn't used in chrome/."""
ios_buildflags=[]
defSourceFilter(affected_file):
return input_api.FilterSourceFile(affected_file, INCLUDE_SOURCE_FILES_ONLY,
input_api.DEFAULT_FILES_TO_SKIP)
for fin input_api.AffectedSourceFiles(SourceFilter):
ios_buildflags.extend(_CheckNoIsIOSBuildFlagsInChromeFile(input_api, f))
ifnot ios_buildflags:
return[]
return[output_api.PresubmitError(
'IS_IOS is not used in chrome/ but found in:\n', ios_buildflags)]
def_CheckBreakingInstallerVersionBumpNeeded(input_api, output_api):
files=[]
breaking_version_installer_updated=False
def_FilterFile(affected_file):
return input_api.FilterSourceFile(
affected_file,
files_to_check=input_api.DEFAULT_FILES_TO_CHECK+(r'.*\.release',))
for fin input_api.AffectedSourceFiles(_FilterFile):
# Normalize the local path to Linux-style path separators so that the path
# comparisons work on Windows as well.
local_path= f.LocalPath().replace('\\','/')
breaking_version_installer_updated|=(local_path==
'chrome/installer/setup/last_breaking_installer_version.cc')
if(local_path=='chrome/installer/mini_installer/chrome.release'or
local_path.startswith('chrome/test/mini_installer')):
files.append(local_path)
if filesandnot breaking_version_installer_updated:
return[output_api.PresubmitPromptWarning('''
Update chrome/installer/setup/last_breaking_installer_version.cc if the changes
found in the following files might break make downgrades not possible beyond
this browser's version.''', items=files)]
ifnot filesand breaking_version_installer_updated:
return[output_api.PresubmitPromptWarning('''
No installer breaking changes detected but
chrome/installer/setup/last_breaking_installer_version.cc was updated. Please
update chrome/installer/PRESUBMIT.py if more files need to be watched for
breaking installer changes.''')]
return[]
def_CommonChecks(input_api, output_api):
"""Checks common to both upload and commit."""
results=[]
results.extend(_CheckNoContentUnitTestsInChrome(input_api, output_api))
results.extend(_CheckNoIsAppleBuildFlagsInChrome(input_api, output_api))
results.extend(_CheckNoIsIOSBuildFlagsInChrome(input_api, output_api))
results.extend(_CheckBreakingInstallerVersionBumpNeeded(input_api,
output_api))
return results
defCheckChangeOnUpload(input_api, output_api):
results=[]
results.extend(_CommonChecks(input_api, output_api))
results.extend(_CheckChangeLintsClean(input_api, output_api))
return results
defCheckChangeOnCommit(input_api, output_api):
results=[]
results.extend(_CommonChecks(input_api, output_api))
return results

[8]ページ先頭

©2009-2025 Movatter.jp