blob: 325e0587732b4deaba1a4e0f3529b3c5d6ca6a7e [file] [log] [blame]
# Copyright 2020 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Presubmit script for ios/web_view.
for more details about the presubmit API built into depot_tools.
import os
INCLUSION_PREFIXES = ('#import "', '#include "')
def _CheckAbsolutePathInclusionInPublicHeaders(input_api, output_api):
"""Checks if all affected headers under //ios/web_view/public only include
the headers in the same directory by using relative path inclusions.
Because only these headers will be exported to the client side code,
and path above public/ will be changed, the clients will not find the
headers that are not in that public directory, and relative path
inclusions should be used.
error_items = [] # [(file_path, lineno, corrected_inclusion_path)]
normpath = os.path.normpath
public_dir = normpath('%s/public/' % input_api.PresubmitLocalPath())
files_under_public_dir = list(filter(
lambda f: normpath(f.AbsoluteLocalPath()).startswith(public_dir),
for f in files_under_public_dir:
_, ext = os.path.splitext(f.LocalPath())
if ext != '.h':
for idx, line in enumerate(f.NewContents()):
lineno = idx + 1
if line.startswith(INCLUSION_PREFIXES) and '/' in line:
line[line.rfind('/')+1:-1])) # :-1 to exclude "
if len(error_items) == 0:
return []
plural_suffix = '' if len(error_items) == 1 else 's'
error_message = '\n'.join([
'Found header file%(plural)s with absolute path inclusion%(plural)s '
'in //ios/web_view/public.\n'
'You can only include header files in //ios/web_view/public (no '
'subdirectory) using relative path inclusions in the following '
'file%(plural)s:\n' % {'plural': plural_suffix}
error_message += '\n'.join([
' %(file_path)s [line %(lineno)d]:\n'
' Do you mean "%(corrected)s"?' % {
'file_path': i[0], 'lineno': i[1], 'corrected': i[2]
} for i in error_items
]) + '\n'
return [output_api.PresubmitError(error_message)]
def CheckChangeOnCommit(input_api, output_api):
results = []
_CheckAbsolutePathInclusionInPublicHeaders(input_api, output_api))
return results