diff options
author | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-08 01:15:41 +0000 |
---|---|---|
committer | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-08 01:15:41 +0000 |
commit | 14a6131ccc19f95f058d39e038b7bbed21431688 (patch) | |
tree | 3b6779a8c2fc62393a504b4e8a427dd51ef5483e /PRESUBMIT.py | |
parent | 566755f8730890267205b6f6e290f72356e79fee (diff) | |
download | chromium_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.py | 31 |
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) |