Skip to content

Commit

Permalink
Do per-file OWNERS check for per-file DEPS changes.
Browse files Browse the repository at this point in the history
Before this, an OWNER of the entire directory that a new DEPS rule was pointing to would be required, even when the DEPS rule specified an individual file for which there are per-file OWNERS in the OWNERS file.

BUG=290401

Review URL: https://codereview.chromium.org/116443011

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@243459 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
joi@chromium.org committed Jan 8, 2014
1 parent 566755f commit 14a6131
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 13 deletions.
31 changes: 25 additions & 6 deletions PRESUBMIT.py
Original file line number Diff line number Diff line change
Expand Up @@ -781,9 +781,14 @@ def _CheckNoAbbreviationInPngFileName(input_api, output_api):
return results


def _DepsFilesToCheck(re, changed_lines):
def _FilesToCheckForIncomingDeps(re, changed_lines):
"""Helper method for _CheckAddedDepsHaveTargetApprovals. Returns
a set of DEPS entries that we should look up."""
a set of DEPS entries that we should look up.
For a directory (rather than a specific filename) we fake a path to
a specific filename by adding /DEPS. This is chosen as a file that
will seldom or never be subject to per-file include_rules.
"""
# We ignore deps entries on auto-generated directories.
AUTO_GENERATED_DIRS = ['grit', 'jni']

Expand All @@ -799,7 +804,10 @@ def _DepsFilesToCheck(re, changed_lines):
if m:
path = m.group(1)
if path.split('/')[0] not in AUTO_GENERATED_DIRS:
results.add('%s/DEPS' % m.group(1))
if m.group(2):
results.add('%s%s' % (path, m.group(2)))
else:
results.add('%s/DEPS' % path)
return results


Expand All @@ -819,7 +827,8 @@ def _CheckAddedDepsHaveTargetApprovals(input_api, output_api):
if not changed_lines:
return []

virtual_depended_on_files = _DepsFilesToCheck(input_api.re, changed_lines)
virtual_depended_on_files = _FilesToCheckForIncomingDeps(input_api.re,
changed_lines)
if not virtual_depended_on_files:
return []

Expand Down Expand Up @@ -848,12 +857,22 @@ def _CheckAddedDepsHaveTargetApprovals(input_api, output_api):
reviewers_plus_owner.add(owner_email)
missing_files = owners_db.files_not_covered_by(virtual_depended_on_files,
reviewers_plus_owner)
unapproved_dependencies = ["'+%s'," % path[:-len('/DEPS')]

# We strip the /DEPS part that was added by
# _FilesToCheckForIncomingDeps to fake a path to a file in a
# directory.
def StripDeps(path):
start_deps = path.rfind('/DEPS')
if start_deps != -1:
return path[:start_deps]
else:
return path
unapproved_dependencies = ["'+%s'," % StripDeps(path)
for path in missing_files]

if unapproved_dependencies:
output_list = [
output('Missing LGTM from OWNERS of directories added to DEPS:\n %s' %
output('Missing LGTM from OWNERS of dependencies added to DEPS:\n %s' %
'\n '.join(sorted(unapproved_dependencies)))]
if not input_api.is_committing:
suggested_owners = owners_db.reviewers_for(missing_files, owner_email)
Expand Down
15 changes: 8 additions & 7 deletions PRESUBMIT_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -394,7 +394,7 @@ def testValidOSMacroNames(self):


class CheckAddedDepsHaveTetsApprovalsTest(unittest.TestCase):
def testDepsFilesToCheck(self):
def testFilesToCheckForIncomingDeps(self):
changed_lines = [
'"+breakpad",',
'"+chrome/installer",',
Expand All @@ -404,6 +404,7 @@ def testDepsFilesToCheck(self):
'"+components/breakpad",',
'"+components/nacl/common",',
'"+content/public/browser/render_process_host.h",',
'"+jni/fooblat.h",',
'"+grit", # For generated headers',
'"+grit/generated_resources.h",',
'"+grit/",',
Expand All @@ -412,20 +413,20 @@ def testDepsFilesToCheck(self):
'"+tools/memory_watcher",',
'"+third_party/lss/linux_syscall_support.h",',
]
files_to_check = PRESUBMIT._DepsFilesToCheck(re, changed_lines)
files_to_check = PRESUBMIT._FilesToCheckForIncomingDeps(re, changed_lines)
expected = set([
'breakpad/DEPS',
'chrome/installer/DEPS',
'chrome/plugin/DEPS',
'chrome/utility/DEPS',
'chromeos/DEPS',
'chrome/plugin/chrome_content_plugin_client.h',
'chrome/utility/chrome_content_utility_client.h',
'chromeos/chromeos_paths.h',
'components/breakpad/DEPS',
'components/nacl/common/DEPS',
'content/public/browser/DEPS',
'content/public/browser/render_process_host.h',
'policy/DEPS',
'sandbox/DEPS',
'tools/memory_watcher/DEPS',
'third_party/lss/DEPS',
'third_party/lss/linux_syscall_support.h',
])
self.assertEqual(expected, files_to_check);

Expand Down

0 comments on commit 14a6131

Please sign in to comment.