summaryrefslogtreecommitdiffstats
path: root/PRESUBMIT.py
diff options
context:
space:
mode:
authorjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-08 01:15:41 +0000
committerjoi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-08 01:15:41 +0000
commit14a6131ccc19f95f058d39e038b7bbed21431688 (patch)
tree3b6779a8c2fc62393a504b4e8a427dd51ef5483e /PRESUBMIT.py
parent566755f8730890267205b6f6e290f72356e79fee (diff)
downloadchromium_src-14a6131ccc19f95f058d39e038b7bbed21431688.zip
chromium_src-14a6131ccc19f95f058d39e038b7bbed21431688.tar.gz
chromium_src-14a6131ccc19f95f058d39e038b7bbed21431688.tar.bz2
Do per-file OWNERS check for per-file DEPS changes.
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
Diffstat (limited to 'PRESUBMIT.py')
-rw-r--r--PRESUBMIT.py31
1 files changed, 25 insertions, 6 deletions
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index aa8d97f..0cd69c9 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -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']
@@ -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
@@ -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 []
@@ -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)