Index: PRESUBMIT.py |
diff --git a/PRESUBMIT.py b/PRESUBMIT.py |
index 6ded7c2c767eaa2a20e11ae58956cd7692d957d1..699a62b5a807a0b10882fec52c3322b01e408e61 100644 |
--- a/PRESUBMIT.py |
+++ b/PRESUBMIT.py |
@@ -1049,26 +1049,7 @@ |
return results |
-def _ExtractAddRulesFromParsedDeps(parsed_deps): |
- """Extract the rules that add dependencies from a parsed DEPS file. |
- |
- Args: |
- parsed_deps: the locals dictionary from evaluating the DEPS file.""" |
- add_rules = set() |
- add_rules.update([ |
- rule[1:] for rule in parsed_deps.get('include_rules', []) |
- if rule.startswith('+') or rule.startswith('!') |
- ]) |
- for specific_file, rules in parsed_deps.get('specific_include_rules', |
- {}).iteritems(): |
- add_rules.update([ |
- rule[1:] for rule in rules |
- if rule.startswith('+') or rule.startswith('!') |
- ]) |
- return add_rules |
- |
- |
-def _CalculateAddedDeps(os_path, old_contents, new_contents): |
+def _FilesToCheckForIncomingDeps(re, changed_lines): |
"""Helper method for _CheckAddedDepsHaveTargetApprovals. Returns |
a set of DEPS entries that we should look up. |
@@ -1079,27 +1060,22 @@ |
# We ignore deps entries on auto-generated directories. |
AUTO_GENERATED_DIRS = ['grit', 'jni'] |
- global_scope = {} |
- local_scope = {} |
- exec old_contents in global_scope, local_scope |
- old_deps = _ExtractAddRulesFromParsedDeps(local_scope) |
- |
- global_scope = {} |
- local_scope = {} |
- exec new_contents in global_scope, local_scope |
- new_deps = _ExtractAddRulesFromParsedDeps(local_scope) |
- |
- added_deps = new_deps.difference(old_deps) |
- |
+ # This pattern grabs the path without basename in the first |
+ # parentheses, and the basename (if present) in the second. It |
+ # relies on the simple heuristic that if there is a basename it will |
+ # be a header file ending in ".h". |
+ pattern = re.compile( |
+ r"""['"]\+([^'"]+?)(/[a-zA-Z0-9_]+\.h)?['"].*""") |
results = set() |
- for added_dep in added_deps: |
- if added_dep.split('/')[0] in AUTO_GENERATED_DIRS: |
- continue |
- # Assume that a rule that ends in .h is a rule for a specific file. |
- if added_dep.endswith('.h'): |
- results.add(added_dep) |
- else: |
- results.add(os_path.join(added_dep, 'DEPS')) |
+ for changed_line in changed_lines: |
+ m = pattern.match(changed_line) |
+ if m: |
+ path = m.group(1) |
+ if path.split('/')[0] not in AUTO_GENERATED_DIRS: |
+ if m.group(2): |
+ results.add('%s%s' % (path, m.group(2))) |
+ else: |
+ results.add('%s/DEPS' % path) |
return results |
@@ -1109,7 +1085,7 @@ |
target file or directory, to avoid layering violations from being |
introduced. This check verifies that this happens. |
""" |
- virtual_depended_on_files = set() |
+ changed_lines = set() |
file_filter = lambda f: not input_api.re.match( |
r"^third_party[\\\/]WebKit[\\\/].*", f.LocalPath()) |
@@ -1117,11 +1093,14 @@ |
file_filter=file_filter): |
filename = input_api.os_path.basename(f.LocalPath()) |
if filename == 'DEPS': |
- virtual_depended_on_files.update(_CalculateAddedDeps( |
- input_api.os_path, |
- '\n'.join(f.OldContents()), |
- '\n'.join(f.NewContents()))) |
- |
+ changed_lines |= set(line.strip() |
+ for line_num, line |
+ in f.ChangedContents()) |
+ if not changed_lines: |
+ return [] |
+ |
+ virtual_depended_on_files = _FilesToCheckForIncomingDeps(input_api.re, |
+ changed_lines) |
if not virtual_depended_on_files: |
return [] |