[presubmit_support] Fix CheckForRecursedeps to work for submodule based gclient DEPS.

R=sokcevic

Bug: 401077549
Change-Id: I51fcabad5e563a65614d4b35e6600e7e511f7ba4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/6330092
Reviewed-by: Josip Sokcevic <sokcevic@chromium.org>
Auto-Submit: Robbie Iannucci <iannucci@google.com>
Commit-Queue: Josip Sokcevic <sokcevic@chromium.org>
changes/92/6330092/4
Robert Iannucci 2 months ago committed by LUCI CQ
parent f40ddcd8d5
commit bb2a896987

@ -2081,13 +2081,12 @@ def CheckForCommitObjects(input_api, output_api):
url = dep if isinstance(dep, str) else dep['url'] url = dep if isinstance(dep, str) else dep['url']
commit_hash = url.split('@')[-1] commit_hash = url.split('@')[-1]
# Two exceptions were in made in two projects prior to this check
# enforcement. We need to address those exceptions, but in the meantime
# we can't fail this global presubmit check
# https://chromium.googlesource.com/infra/infra/+/refs/heads/main/DEPS#45
if dep_path == 'recipes-py' and commit_hash == 'refs/heads/main':
continue
# One exception is made prior to this check enforcement.
#
# We need to address this exception, but in the meantime we can't fail
# this global presubmit check.
#
# https://chromium.googlesource.com/angle/angle/+/refs/heads/main/DEPS#412 # https://chromium.googlesource.com/angle/angle/+/refs/heads/main/DEPS#412
if dep_path == 'third_party/dummy_chromium': if dep_path == 'third_party/dummy_chromium':
continue continue
@ -2168,7 +2167,32 @@ def CheckForRecursedeps(input_api, output_api):
# No recursedeps entry, carry on! # No recursedeps entry, carry on!
return [] return []
existing_deps = deps.get('deps', {}) existing_deps: set[str] = set()
# If git_dependencies is SYNC or SUBMODULES, prefer the submodule data.
if deps.get('git_dependencies', 'DEPS') == 'DEPS':
existing_deps = set(deps.get('deps', {}))
else:
existing_deps = input_api.change.AllLocalSubmodules()
# existing_deps is 'local paths' i.e. repo-relative. However, if deps is
# NOT use_relative_paths, then we need to adjust these to be
# client-root-relative.
#
# Sadly, as of 25Q1, the default is still False.
if deps.get('use_relative_paths', False):
# Find the relative path between the gclient root and the repo root.
relpath = input_api.os_path.relpath(
input_api.change.RepositoryRoot(),
start = input_api.gclient_paths.FindGclientRoot(
input_api.change.RepositoryRoot()))
# All submodules are relative to the repo root, so join
#
# gclient-to-repo ++ repo-to-submodule
#
# To get path strings which should appear in recursedeps.
existing_deps = set(
input_api.os_path.join(relpath, p)
for p in existing_deps
)
errors = [] errors = []
for check_dep in deps['recursedeps']: for check_dep in deps['recursedeps']:
@ -2178,6 +2202,7 @@ def CheckForRecursedeps(input_api, output_api):
f'Found recuredep entry {check_dep} but it is not found ' f'Found recuredep entry {check_dep} but it is not found '
'in\n deps itself. Remove it from recurcedeps or add ' 'in\n deps itself. Remove it from recurcedeps or add '
'deps entry.')) 'deps entry.'))
return errors return errors

@ -1435,6 +1435,10 @@ class Change(object):
"""Returns local paths for affected submodules.""" """Returns local paths for affected submodules."""
return [af.LocalPath() for af in self.AffectedSubmodules()] return [af.LocalPath() for af in self.AffectedSubmodules()]
def AllLocalSubmodules(self) -> set[str]:
"""Returns local paths for all submodules."""
return set(self._repo_submodules())
def AbsoluteLocalPaths(self): def AbsoluteLocalPaths(self):
"""Convenience function.""" """Convenience function."""
return [af.AbsoluteLocalPath() for af in self.AffectedFiles()] return [af.AbsoluteLocalPath() for af in self.AffectedFiles()]

Loading…
Cancel
Save