[Presubmit] Standardize paths in PRESUBMIT.py on Windows
Windows uses back slash \ as a path separator while other OSes use forward slash. CL 6236404 introduced depot_tools AffectedFile.UnixLocalPath() which provides a UNIX-style platform-independent path on all systems. This CL updates PRESUBMIT.py to take advantage of this new method. Bug: None Change-Id: Iccd71ccb5192ff56efbc822dc2ae52304b61f778 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6218309 Commit-Queue: Anton Bershanskyi <bershanskyi@gmail.com> Reviewed-by: Daniel Cheng <dcheng@chromium.org> Reviewed-by: Dirk Pranke <dpranke@google.com> Cr-Commit-Position: refs/heads/main@{#1418864}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
6f7a140cff
commit
425334948d
56
PRESUBMIT.py
56
PRESUBMIT.py
@@ -2802,7 +2802,7 @@ def CheckCrosApiNeedBrowserTest(input_api, output_api):
|
|||||||
has_new_crosapi = False
|
has_new_crosapi = False
|
||||||
has_browser_test = False
|
has_browser_test = False
|
||||||
for f in input_api.AffectedFiles():
|
for f in input_api.AffectedFiles():
|
||||||
path = f.LocalPath()
|
path = f.UnixLocalPath()
|
||||||
if (path.startswith('chromeos/crosapi/mojom') and
|
if (path.startswith('chromeos/crosapi/mojom') and
|
||||||
_IsMojomFile(input_api, path) and f.Action() == 'A'):
|
_IsMojomFile(input_api, path) and f.Action() == 'A'):
|
||||||
has_new_crosapi = True
|
has_new_crosapi = True
|
||||||
@@ -2885,10 +2885,7 @@ def CheckNoBannedFunctions(input_api, output_api):
|
|||||||
if not excluded_paths:
|
if not excluded_paths:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
local_path = affected_file.LocalPath()
|
local_path = affected_file.UnixLocalPath()
|
||||||
# Consistently use / as path separator to simplify the writing of regex
|
|
||||||
# expressions.
|
|
||||||
local_path = local_path.replace(input_api.os_path.sep, '/')
|
|
||||||
for item in excluded_paths:
|
for item in excluded_paths:
|
||||||
if input_api.re.match(item, local_path):
|
if input_api.re.match(item, local_path):
|
||||||
return True
|
return True
|
||||||
@@ -3224,11 +3221,9 @@ def CheckNoInternalHeapIncludes(input_api, output_api):
|
|||||||
v8_wrapper_pattern = input_api.re.compile(
|
v8_wrapper_pattern = input_api.re.compile(
|
||||||
r'^\s*#include\s*"third_party/blink/renderer/platform/heap/v8_wrapper/.*"'
|
r'^\s*#include\s*"third_party/blink/renderer/platform/heap/v8_wrapper/.*"'
|
||||||
)
|
)
|
||||||
# Consistently use / as path separator to simplify the writing of regex
|
|
||||||
# expressions.
|
|
||||||
file_filter = lambda f: not input_api.re.match(
|
file_filter = lambda f: not input_api.re.match(
|
||||||
r"^third_party/blink/renderer/platform/heap/.*",
|
r"^third_party/blink/renderer/platform/heap/.*",
|
||||||
f.LocalPath().replace(input_api.os_path.sep, '/'))
|
f.UnixLocalPath())
|
||||||
errors = []
|
errors = []
|
||||||
|
|
||||||
for f in input_api.AffectedFiles(file_filter=file_filter):
|
for f in input_api.AffectedFiles(file_filter=file_filter):
|
||||||
@@ -3651,11 +3646,9 @@ def CheckAddedDepsHaveTargetApprovals(input_api, output_api):
|
|||||||
# (via lines like "+foo/bar/baz").
|
# (via lines like "+foo/bar/baz").
|
||||||
depended_on_paths = set()
|
depended_on_paths = set()
|
||||||
|
|
||||||
# Consistently use / as path separator to simplify the writing of regex
|
|
||||||
# expressions.
|
|
||||||
file_filter = lambda f: not input_api.re.match(
|
file_filter = lambda f: not input_api.re.match(
|
||||||
r"^third_party/blink/.*",
|
r"^third_party/blink/.*",
|
||||||
f.LocalPath().replace(input_api.os_path.sep, '/'))
|
f.UnixLocalPath())
|
||||||
for f in input_api.AffectedFiles(include_deletes=False,
|
for f in input_api.AffectedFiles(include_deletes=False,
|
||||||
file_filter=file_filter):
|
file_filter=file_filter):
|
||||||
filename = input_api.os_path.basename(f.LocalPath())
|
filename = input_api.os_path.basename(f.LocalPath())
|
||||||
@@ -4118,7 +4111,7 @@ def CheckParseErrors(input_api, output_api):
|
|||||||
action = get_action(affected_file)
|
action = get_action(affected_file)
|
||||||
if not action:
|
if not action:
|
||||||
return False
|
return False
|
||||||
path = affected_file.LocalPath()
|
path = affected_file.UnixLocalPath()
|
||||||
|
|
||||||
if _MatchesFile(input_api,
|
if _MatchesFile(input_api,
|
||||||
_KNOWN_TEST_DATA_AND_INVALID_JSON_FILE_PATTERNS, path):
|
_KNOWN_TEST_DATA_AND_INVALID_JSON_FILE_PATTERNS, path):
|
||||||
@@ -4136,7 +4129,7 @@ def CheckParseErrors(input_api, output_api):
|
|||||||
kwargs = {}
|
kwargs = {}
|
||||||
if (action == _GetJSONParseError
|
if (action == _GetJSONParseError
|
||||||
and _MatchesFile(input_api, json_no_comments_patterns,
|
and _MatchesFile(input_api, json_no_comments_patterns,
|
||||||
affected_file.LocalPath())):
|
affected_file.UnixLocalPath())):
|
||||||
kwargs['eat_comments'] = False
|
kwargs['eat_comments'] = False
|
||||||
parse_error = action(input_api, affected_file.AbsoluteLocalPath(),
|
parse_error = action(input_api, affected_file.AbsoluteLocalPath(),
|
||||||
**kwargs)
|
**kwargs)
|
||||||
@@ -4213,9 +4206,6 @@ def CheckPythonDevilInit(input_api, output_api):
|
|||||||
|
|
||||||
|
|
||||||
def _MatchesFile(input_api, patterns, path):
|
def _MatchesFile(input_api, patterns, path):
|
||||||
# Consistently use / as path separator to simplify the writing of regex
|
|
||||||
# expressions.
|
|
||||||
path = path.replace(input_api.os_path.sep, '/')
|
|
||||||
for pattern in patterns:
|
for pattern in patterns:
|
||||||
if input_api.re.search(pattern, path):
|
if input_api.re.search(pattern, path):
|
||||||
return True
|
return True
|
||||||
@@ -4662,7 +4652,7 @@ def CheckSetNoParent(input_api, output_api):
|
|||||||
# Check that every set noparent line has a corresponding file:// line
|
# Check that every set noparent line has a corresponding file:// line
|
||||||
# listed in build/OWNERS.setnoparent. An exception is made for top level
|
# listed in build/OWNERS.setnoparent. An exception is made for top level
|
||||||
# directories since src/OWNERS shouldn't review them.
|
# directories since src/OWNERS shouldn't review them.
|
||||||
linux_path = f.LocalPath().replace(input_api.os_path.sep, '/')
|
linux_path = f.UnixLocalPath()
|
||||||
if (linux_path.count('/') != 1
|
if (linux_path.count('/') != 1
|
||||||
and (not linux_path in _EXCLUDED_SET_NO_PARENT_PATHS)):
|
and (not linux_path in _EXCLUDED_SET_NO_PARENT_PATHS)):
|
||||||
for set_noparent_line in found_set_noparent_lines:
|
for set_noparent_line in found_set_noparent_lines:
|
||||||
@@ -4697,12 +4687,12 @@ def CheckUselessForwardDeclarations(input_api, output_api):
|
|||||||
struct_pattern = input_api.re.compile(r'^struct\s+(\w+);$',
|
struct_pattern = input_api.re.compile(r'^struct\s+(\w+);$',
|
||||||
input_api.re.MULTILINE)
|
input_api.re.MULTILINE)
|
||||||
for f in input_api.AffectedFiles(include_deletes=False):
|
for f in input_api.AffectedFiles(include_deletes=False):
|
||||||
if (f.LocalPath().startswith('third_party')
|
local_path = f.UnixLocalPath()
|
||||||
and not f.LocalPath().startswith('third_party/blink')
|
if (local_path.startswith('third_party')
|
||||||
and not f.LocalPath().startswith('third_party\\blink')):
|
and not local_path.startswith('third_party/blink')):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not f.LocalPath().endswith('.h'):
|
if not local_path.endswith('.h'):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
contents = input_api.ReadFile(f)
|
contents = input_api.ReadFile(f)
|
||||||
@@ -4951,10 +4941,9 @@ def _CheckAndroidTestAnnotationUsage(input_api, output_api):
|
|||||||
|
|
||||||
def _CheckAndroidNewMdpiAssetLocation(input_api, output_api):
|
def _CheckAndroidNewMdpiAssetLocation(input_api, output_api):
|
||||||
"""Checks if MDPI assets are placed in a correct directory."""
|
"""Checks if MDPI assets are placed in a correct directory."""
|
||||||
file_filter = lambda f: (f.LocalPath().endswith(
|
file_filter = lambda f: (f.UnixLocalPath().endswith(
|
||||||
'.png') and ('/res/drawable/'.replace('/', input_api.os_path.sep) in f.
|
'.png') and ('/res/drawable/' in f.
|
||||||
LocalPath() or '/res/drawable-ldrtl/'.replace(
|
UnixLocalPath() or '/res/drawable-ldrtl/' in f.UnixLocalPath()))
|
||||||
'/', input_api.os_path.sep) in f.LocalPath()))
|
|
||||||
errors = []
|
errors = []
|
||||||
for f in input_api.AffectedFiles(include_deletes=False,
|
for f in input_api.AffectedFiles(include_deletes=False,
|
||||||
file_filter=file_filter):
|
file_filter=file_filter):
|
||||||
@@ -5364,9 +5353,8 @@ def CheckNoDeprecatedCss(input_api, output_api):
|
|||||||
def CheckForRelativeIncludes(input_api, output_api):
|
def CheckForRelativeIncludes(input_api, output_api):
|
||||||
bad_files = {}
|
bad_files = {}
|
||||||
for f in input_api.AffectedFiles(include_deletes=False):
|
for f in input_api.AffectedFiles(include_deletes=False):
|
||||||
if (f.LocalPath().startswith('third_party')
|
if (f.UnixLocalPath().startswith('third_party')
|
||||||
and not f.LocalPath().startswith('third_party/blink')
|
and not f.LocalPath().startswith('third_party/blink')):
|
||||||
and not f.LocalPath().startswith('third_party\\blink')):
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not _IsCPlusPlusFile(input_api, f.LocalPath()):
|
if not _IsCPlusPlusFile(input_api, f.LocalPath()):
|
||||||
@@ -5409,9 +5397,8 @@ def CheckForCcIncludes(input_api, output_api):
|
|||||||
results = []
|
results = []
|
||||||
for f in input_api.AffectedFiles(include_deletes=False):
|
for f in input_api.AffectedFiles(include_deletes=False):
|
||||||
# We let third_party code do whatever it wants
|
# We let third_party code do whatever it wants
|
||||||
if (f.LocalPath().startswith('third_party')
|
if (f.UnixLocalPath().startswith('third_party')
|
||||||
and not f.LocalPath().startswith('third_party/blink')
|
and not f.LocalPath().startswith('third_party/blink')):
|
||||||
and not f.LocalPath().startswith('third_party\\blink')):
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if not _IsCPlusPlusFile(input_api, f.LocalPath()):
|
if not _IsCPlusPlusFile(input_api, f.LocalPath()):
|
||||||
@@ -6251,7 +6238,7 @@ def CheckForInvalidIfDefinedMacros(input_api, output_api):
|
|||||||
def affected_files_filter(f):
|
def affected_files_filter(f):
|
||||||
# Normalize the local path to Linux-style path separators so that the
|
# Normalize the local path to Linux-style path separators so that the
|
||||||
# path comparisons work on Windows as well.
|
# path comparisons work on Windows as well.
|
||||||
path = f.LocalPath().replace('\\', '/')
|
path = f.UnixLocalPath()
|
||||||
|
|
||||||
for skipped_path in SKIPPED_PATHS:
|
for skipped_path in SKIPPED_PATHS:
|
||||||
if path.startswith(skipped_path):
|
if path.startswith(skipped_path):
|
||||||
@@ -7288,7 +7275,7 @@ def CheckAssertAshOnlyCode(input_api, output_api):
|
|||||||
|
|
||||||
|
|
||||||
def _IsMiraclePtrDisallowed(input_api, affected_file):
|
def _IsMiraclePtrDisallowed(input_api, affected_file):
|
||||||
path = affected_file.LocalPath()
|
path = affected_file.UnixLocalPath()
|
||||||
if not _IsCPlusPlusFile(input_api, path):
|
if not _IsCPlusPlusFile(input_api, path):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@@ -7543,8 +7530,7 @@ def CheckLibcxxRevisionsMatch(input_api, output_api):
|
|||||||
|
|
||||||
DEPS_FILES = [ 'DEPS', 'buildtools/deps_revisions.gni' ]
|
DEPS_FILES = [ 'DEPS', 'buildtools/deps_revisions.gni' ]
|
||||||
|
|
||||||
file_filter = lambda f: f.LocalPath().replace(
|
file_filter = lambda f: f.UnixLocalPath() in DEPS_FILES
|
||||||
input_api.os_path.sep, '/') in DEPS_FILES
|
|
||||||
changed_deps_files = input_api.AffectedFiles(file_filter=file_filter)
|
changed_deps_files = input_api.AffectedFiles(file_filter=file_filter)
|
||||||
if not changed_deps_files:
|
if not changed_deps_files:
|
||||||
return []
|
return []
|
||||||
|
@@ -45,7 +45,7 @@ class MockCannedChecks(object):
|
|||||||
# Shelling out to the SCM to determine the changed region can be
|
# Shelling out to the SCM to determine the changed region can be
|
||||||
# quite expensive on Win32. Assuming that most files will be kept
|
# quite expensive on Win32. Assuming that most files will be kept
|
||||||
# problem-free, we can skip the SCM operations most of the time.
|
# problem-free, we can skip the SCM operations most of the time.
|
||||||
extension = str(f.LocalPath()).rsplit('.', 1)[-1]
|
extension = str(f.UnixLocalPath()).rsplit('.', 1)[-1]
|
||||||
if all(callable_rule(extension, line) for line in f.NewContents()):
|
if all(callable_rule(extension, line) for line in f.NewContents()):
|
||||||
# No violation found in full text: can skip considering diff.
|
# No violation found in full text: can skip considering diff.
|
||||||
continue
|
continue
|
||||||
@@ -162,7 +162,7 @@ class MockInputApi(object):
|
|||||||
include_deletes=False)
|
include_deletes=False)
|
||||||
|
|
||||||
def FilterSourceFile(self, file, files_to_check=(), files_to_skip=()):
|
def FilterSourceFile(self, file, files_to_check=(), files_to_skip=()):
|
||||||
local_path = file.LocalPath()
|
local_path = file.UnixLocalPath()
|
||||||
found_in_files_to_check = not files_to_check
|
found_in_files_to_check = not files_to_check
|
||||||
if files_to_check:
|
if files_to_check:
|
||||||
if type(files_to_check) is str:
|
if type(files_to_check) is str:
|
||||||
@@ -298,6 +298,12 @@ class MockFile(object):
|
|||||||
def AbsoluteLocalPath(self):
|
def AbsoluteLocalPath(self):
|
||||||
return os.path.join(_REPO_ROOT, self._local_path)
|
return os.path.join(_REPO_ROOT, self._local_path)
|
||||||
|
|
||||||
|
# This method must be functionally identical to
|
||||||
|
# AffectedFile.UnixLocalPath(), but must normalize Windows-style
|
||||||
|
# paths even on non-Windows platforms because tests contain them
|
||||||
|
def UnixLocalPath(self):
|
||||||
|
return self._local_path.replace('\\', '/')
|
||||||
|
|
||||||
def GenerateScmDiff(self):
|
def GenerateScmDiff(self):
|
||||||
return self._scm_diff
|
return self._scm_diff
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user