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

Side by Side Diff: PRESUBMIT.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, 5 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 | « no previous file | tools/checkdeps/checkdeps.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Top-level presubmit script for Chromium. 5 """Top-level presubmit script for Chromium.
6 6
7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts 7 See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
8 for more details about the presubmit API built into gcl. 8 for more details about the presubmit API built into gcl.
9 """ 9 """
10 10
11 11
12 import os
M-A Ruel 2012/07/26 13:09:38 Remove
Jói 2012/07/26 13:37:21 Done.
12 import re 13 import re
14 import sys
13 15
14 16
15 _EXCLUDED_PATHS = ( 17 _EXCLUDED_PATHS = (
16 r"^breakpad[\\\/].*", 18 r"^breakpad[\\\/].*",
17 r"^native_client_sdk[\\\/].*", 19 r"^native_client_sdk[\\\/].*",
18 r"^net[\\\/]tools[\\\/]spdyshark[\\\/].*", 20 r"^net[\\\/]tools[\\\/]spdyshark[\\\/].*",
19 r"^skia[\\\/].*", 21 r"^skia[\\\/].*",
20 r"^v8[\\\/].*", 22 r"^v8[\\\/].*",
21 r".*MakeFile$", 23 r".*MakeFile$",
22 r".+_autogen\.h$", 24 r".+_autogen\.h$",
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 files.append(f) 369 files.append(f)
368 370
369 if files: 371 if files:
370 return [output_api.PresubmitError( 372 return [output_api.PresubmitError(
371 'Do not use #pragma once in header files.\n' 373 'Do not use #pragma once in header files.\n'
372 'See http://www.chromium.org/developers/coding-style#TOC-File-headers', 374 'See http://www.chromium.org/developers/coding-style#TOC-File-headers',
373 files)] 375 files)]
374 return [] 376 return []
375 377
376 378
379 def _CheckUnwantedDependencies(input_api, output_api):
380 """Runs checkdeps on #include statements added in this
381 change. Breaking - rules is an error, breaking ! rules is a
382 warning.
383 """
384 # We need to wait until we have an input_api object and use this
385 # roundabout construct to import checkdeps because this file is
386 # eval-ed and thus doesn't have __file__.
387 original_sys_path = sys.path
388 try:
389 sys.path = sys.path + [os.path.join(
M-A Ruel 2012/07/26 13:09:38 input_api.os_path.join(
Jói 2012/07/26 13:37:21 Done.
390 input_api.change.RepositoryRoot(), 'tools', 'checkdeps')]
M-A Ruel 2012/07/26 13:09:38 It is relatively unsafe to use RepositoryRoot(). W
Jói 2012/07/26 13:37:21 Ah, sorry I missed that. Thanks for catching.
391 import checkdeps
392 finally:
393 # Restore sys.path to what it was before.
394 sys.path = original_sys_path
395
396 added_includes = []
397 for f in input_api.AffectedFiles():
398 if not checkdeps.ShouldCheckAddedIncludesInFile(f.LocalPath()):
399 continue
400
401 changed_lines = [line for line_num, line in f.ChangedContents()]
402 added_includes.append([f.LocalPath(), changed_lines])
403
404 error_descriptions = []
405 warning_descriptions = []
406 for path, rule_type, rule_description in checkdeps.CheckAddedIncludes(
407 added_includes):
408 description_with_path = '%s\n %s' % (path, rule_description)
409 if rule_type == checkdeps.Rule.DISALLOW:
410 error_descriptions.append(description_with_path)
411 else:
412 warning_descriptions.append(description_with_path)
413
414 results = []
415 if error_descriptions:
416 results.append(output_api.PresubmitError(
417 'You added one or more #includes that violate checkdeps rules.',
418 error_descriptions))
419 if warning_descriptions:
420 results.append(output_api.PresubmitPromptWarning(
M-A Ruel 2012/07/26 13:09:38 On commit, it would need to be a notification othe
Jói 2012/07/26 13:37:21 I would prefer if people need to jump through hoop
421 'You added one or more #includes of files that are temporarily\n'
422 'allowed but being removed. Can you avoid introducing the\n'
423 '#include? See relevant DEPS file(s) for details and contacts.',
424 warning_descriptions))
425 return results
426
427
377 def _CommonChecks(input_api, output_api): 428 def _CommonChecks(input_api, output_api):
378 """Checks common to both upload and commit.""" 429 """Checks common to both upload and commit."""
379 results = [] 430 results = []
380 results.extend(input_api.canned_checks.PanProjectChecks( 431 results.extend(input_api.canned_checks.PanProjectChecks(
381 input_api, output_api, excluded_paths=_EXCLUDED_PATHS)) 432 input_api, output_api, excluded_paths=_EXCLUDED_PATHS))
382 results.extend(_CheckAuthorizedAuthor(input_api, output_api)) 433 results.extend(_CheckAuthorizedAuthor(input_api, output_api))
383 results.extend( 434 results.extend(
384 _CheckNoProductionCodeUsingTestOnlyFunctions(input_api, output_api)) 435 _CheckNoProductionCodeUsingTestOnlyFunctions(input_api, output_api))
385 results.extend(_CheckNoIOStreamInHeaders(input_api, output_api)) 436 results.extend(_CheckNoIOStreamInHeaders(input_api, output_api))
386 results.extend(_CheckNoUNIT_TESTInSourceFiles(input_api, output_api)) 437 results.extend(_CheckNoUNIT_TESTInSourceFiles(input_api, output_api))
387 results.extend(_CheckNoNewWStrings(input_api, output_api)) 438 results.extend(_CheckNoNewWStrings(input_api, output_api))
388 results.extend(_CheckNoDEPSGIT(input_api, output_api)) 439 results.extend(_CheckNoDEPSGIT(input_api, output_api))
389 results.extend(_CheckNoBannedFunctions(input_api, output_api)) 440 results.extend(_CheckNoBannedFunctions(input_api, output_api))
390 results.extend(_CheckNoPragmaOnce(input_api, output_api)) 441 results.extend(_CheckNoPragmaOnce(input_api, output_api))
442 results.extend(_CheckUnwantedDependencies(input_api, output_api))
391 return results 443 return results
392 444
393 445
394 def _CheckSubversionConfig(input_api, output_api): 446 def _CheckSubversionConfig(input_api, output_api):
395 """Verifies the subversion config file is correctly setup. 447 """Verifies the subversion config file is correctly setup.
396 448
397 Checks that autoprops are enabled, returns an error otherwise. 449 Checks that autoprops are enabled, returns an error otherwise.
398 """ 450 """
399 join = input_api.os_path.join 451 join = input_api.os_path.join
400 if input_api.platform == 'win32': 452 if input_api.platform == 'win32':
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 if all(re.search('[/_]android[/_.]', f) for f in files): 562 if all(re.search('[/_]android[/_.]', f) for f in files):
511 return ['android'] 563 return ['android']
512 564
513 trybots = ['win_rel', 'linux_rel', 'mac_rel', 'linux_clang:compile', 565 trybots = ['win_rel', 'linux_rel', 'mac_rel', 'linux_clang:compile',
514 'android'] 566 'android']
515 # match things like aurax11.cc or aura_oak.cc 567 # match things like aurax11.cc or aura_oak.cc
516 if any(re.search('[/_]aura', f) for f in files): 568 if any(re.search('[/_]aura', f) for f in files):
517 trybots.append('linux_chromeos') 569 trybots.append('linux_chromeos')
518 570
519 return trybots 571 return trybots
OLDNEW
« no previous file with comments | « no previous file | tools/checkdeps/checkdeps.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698