Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: tools/checkdeps/checkdeps.py

Issue 10806049: Add checkdeps presubmit check. Warns on new #includes of dependencies (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Respond to review comments. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « PRESUBMIT.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Makes sure that files include headers from allowed directories. 6 """Makes sure that files include headers from allowed directories.
7 7
8 Checks DEPS files in the source tree for rules, and applies those rules to 8 Checks DEPS files in the source tree for rules, and applies those rules to
9 "#include" commands in source files. Any source file including something not 9 "#include" commands in source files. Any source file including something not
10 permitted by the DEPS files will fail. 10 permitted by the DEPS files will fail.
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 success = False 224 success = False
225 225
226 # Next recurse into the subdirectories. 226 # Next recurse into the subdirectories.
227 for cur in dirs_to_check: 227 for cur in dirs_to_check:
228 if not CheckDirectory(rules, checkers, cur): 228 if not CheckDirectory(rules, checkers, cur):
229 success = False 229 success = False
230 230
231 return success 231 return success
232 232
233 233
234 def ShouldCheckAddedIncludesInFile(file_path):
M-A Ruel 2012/07/26 14:03:28 ShouldcheckIncludesInCppFile ? Just to be clearer
235 """Whether to check added includes in the given file."""
236 return os.path.splitext(file_path)[1] in cpp_checker.CppChecker.EXTENSIONS
237
238
234 def CheckAddedIncludes(added_includes): 239 def CheckAddedIncludes(added_includes):
M-A Ruel 2012/07/26 14:03:28 I'd like to have Cpp here too but this is outside
235 """This is used from PRESUBMIT.py to check new #include statements added in 240 """This is used from PRESUBMIT.py to check new #include statements added in
236 the change being presubmit checked. 241 the change being presubmit checked.
237 242
238 Args: 243 Args:
239 added_includes: ((file_path, (include_line, include_line, ...), ...) 244 added_includes: ((file_path, (include_line, include_line, ...), ...)
240 245
241 Return: 246 Return:
242 A list of tuples, (bad_file_path, rule_type, rule_description) 247 A list of tuples, (bad_file_path, rule_type, rule_description)
243 where rule_type is one of Rule.DISALLOW or Rule.TEMP_ALLOW and 248 where rule_type is one of Rule.DISALLOW or Rule.TEMP_ALLOW and
244 rule_description is human-readable. Empty if no problems. 249 rule_description is human-readable. Empty if no problems.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
281 directory_rules[dir_path] = None 286 directory_rules[dir_path] = None
282 else: 287 else:
283 ApplyDirectoryRulesAndSkipSubdirs(parent_rules, dir_path) 288 ApplyDirectoryRulesAndSkipSubdirs(parent_rules, dir_path)
284 return directory_rules[dir_path] 289 return directory_rules[dir_path]
285 290
286 cpp = cpp_checker.CppChecker(VERBOSE) 291 cpp = cpp_checker.CppChecker(VERBOSE)
287 292
288 problems = [] 293 problems = []
289 for file_path, include_lines in added_includes: 294 for file_path, include_lines in added_includes:
290 # TODO(joi): Make this cover Java as well. 295 # TODO(joi): Make this cover Java as well.
291 if not os.path.splitext(file_path)[1] in cpp.EXTENSIONS: 296 if not ShouldCheckAddedIncludesInFile(file_path):
292 pass 297 pass
293 rules_for_file = GetDirectoryRules(os.path.dirname(file_path)) 298 rules_for_file = GetDirectoryRules(os.path.dirname(file_path))
294 if rules_for_file: 299 if rules_for_file:
295 for line in include_lines: 300 for line in include_lines:
296 is_include, line_status, rule_type = cpp.CheckLine( 301 is_include, line_status, rule_type = cpp.CheckLine(
297 rules_for_file, line, True) 302 rules_for_file, line, True)
298 if rule_type != Rule.ALLOW: 303 if rule_type != Rule.ALLOW:
299 problems.append((file_path, rule_type, line_status)) 304 problems.append((file_path, rule_type, line_status))
300 return problems 305 return problems
301 306
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 'to "../../.." relative to the script file, which ' 408 'to "../../.." relative to the script file, which '
404 'will normally be the repository root.') 409 'will normally be the repository root.')
405 option_parser.add_option("-v", "--verbose", action="store_true", 410 option_parser.add_option("-v", "--verbose", action="store_true",
406 default=False, help="Print debug logging") 411 default=False, help="Print debug logging")
407 options, args = option_parser.parse_args() 412 options, args = option_parser.parse_args()
408 return checkdeps(options, args) 413 return checkdeps(options, args)
409 414
410 415
411 if '__main__' == __name__: 416 if '__main__' == __name__:
412 sys.exit(main()) 417 sys.exit(main())
OLDNEW
« no previous file with comments | « PRESUBMIT.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698