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

Side by Side Diff: presubmit_canned_checks.py

Issue 10199016: Add disabled_warnings arg to RunPylint() and use the default pylintrc file by default. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Add hashlib to the ignored symbols by pylint Created 8 years, 7 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') | pylintrc » ('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 """Generic presubmit checks that can be reused by other presubmit checks.""" 5 """Generic presubmit checks that can be reused by other presubmit checks."""
6 6
7 import os as _os
8 _HERE = _os.path.dirname(_os.path.abspath(__file__))
9
7 10
8 ### Description checks 11 ### Description checks
9 12
10 def CheckChangeHasTestField(input_api, output_api): 13 def CheckChangeHasTestField(input_api, output_api):
11 """Requires that the changelist have a TEST= field.""" 14 """Requires that the changelist have a TEST= field."""
12 if input_api.change.TEST: 15 if input_api.change.TEST:
13 return [] 16 return []
14 else: 17 else:
15 return [output_api.PresubmitNotifyResult( 18 return [output_api.PresubmitNotifyResult(
16 'If this change requires manual test instructions to QA team, add ' 19 'If this change requires manual test instructions to QA team, add '
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 filepath = input_api.os_path.join(dirpath, item)[path_len + 1:] 611 filepath = input_api.os_path.join(dirpath, item)[path_len + 1:]
609 if Find(filepath, black_list): 612 if Find(filepath, black_list):
610 dirnames.remove(item) 613 dirnames.remove(item)
611 for item in filenames: 614 for item in filenames:
612 filepath = input_api.os_path.join(dirpath, item)[path_len + 1:] 615 filepath = input_api.os_path.join(dirpath, item)[path_len + 1:]
613 if Find(filepath, white_list) and not Find(filepath, black_list): 616 if Find(filepath, white_list) and not Find(filepath, black_list):
614 files.append(filepath) 617 files.append(filepath)
615 return files 618 return files
616 619
617 620
618 def RunPylint(input_api, output_api, white_list=None, black_list=None): 621 def RunPylint(input_api, output_api, white_list=None, black_list=None,
622 disabled_warnings=None):
619 """Run pylint on python files. 623 """Run pylint on python files.
620 624
621 The default white_list enforces looking only a *.py files. 625 The default white_list enforces looking only a *.py files.
622 """ 626 """
623 white_list = tuple(white_list or ('.*\.py$',)) 627 white_list = tuple(white_list or ('.*\.py$',))
624 black_list = tuple(black_list or input_api.DEFAULT_BLACK_LIST) 628 black_list = tuple(black_list or input_api.DEFAULT_BLACK_LIST)
625 if input_api.is_committing: 629 if input_api.is_committing:
626 error_type = output_api.PresubmitError 630 error_type = output_api.PresubmitError
627 else: 631 else:
628 error_type = output_api.PresubmitPromptWarning 632 error_type = output_api.PresubmitPromptWarning
629 633
630 # Only trigger if there is at least one python file affected. 634 # Only trigger if there is at least one python file affected.
631 src_filter = lambda x: input_api.FilterSourceFile(x, white_list, black_list) 635 src_filter = lambda x: input_api.FilterSourceFile(x, white_list, black_list)
632 if not input_api.AffectedSourceFiles(src_filter): 636 if not input_api.AffectedSourceFiles(src_filter):
633 return [] 637 return []
634 638
639 extra_args = ['--rcfile=%s' % input_api.os_path.join(_HERE, 'pylintrc')]
640 if disabled_warnings:
641 extra_args.extend(['-d', ','.join(disabled_warnings)])
642
635 # On certain pylint/python version combination, running pylint throws a lot of 643 # On certain pylint/python version combination, running pylint throws a lot of
636 # warning messages. 644 # warning messages.
637 import warnings 645 import warnings
638 warnings.filterwarnings('ignore', category=DeprecationWarning) 646 warnings.filterwarnings('ignore', category=DeprecationWarning)
639 try: 647 try:
640 files = _FetchAllFiles(input_api, white_list, black_list) 648 files = _FetchAllFiles(input_api, white_list, black_list)
641 if not files: 649 if not files:
642 return [] 650 return []
643 # Now that at least one python file was modified and all the python files 651 # Now that at least one python file was modified and all the python files
644 # were listed, try to run pylint. 652 # were listed, try to run pylint.
645 try: 653 try:
646 from pylint import lint 654 from pylint import lint
647 from pylint.utils import UnknownMessage 655 from pylint.utils import UnknownMessage
648 input_api.logging.debug( 656 input_api.logging.debug(
649 'Using pylint v%s from %s' % (lint.version, lint.__file__)) 657 'Using pylint v%s from %s' % (lint.version, lint.__file__))
650 except ImportError: 658 except ImportError:
651 if input_api.platform == 'win32': 659 if input_api.platform == 'win32':
652 return [output_api.PresubmitNotifyResult( 660 return [output_api.PresubmitNotifyResult(
653 'Warning: Can\'t run pylint because it is not installed. Please ' 661 'Warning: Can\'t run pylint because it is not installed. Please '
654 'install manually\n' 662 'install manually\n'
655 'Cannot do static analysis of python files.')] 663 'Cannot do static analysis of python files.')]
656 return [output_api.PresubmitError( 664 return [output_api.PresubmitError(
657 'Please install pylint with "sudo apt-get install python-setuptools; ' 665 'Please install pylint with "sudo apt-get install python-setuptools; '
658 'sudo easy_install pylint"\n' 666 'sudo easy_install pylint"\n'
659 'or visit http://pypi.python.org/pypi/setuptools.\n' 667 'or visit http://pypi.python.org/pypi/setuptools.\n'
660 'Cannot do static analysis of python files.')] 668 'Cannot do static analysis of python files.')]
661 669
662 def run_lint(files): 670 def run_lint(files):
663 try: 671 try:
664 lint.Run(files) 672 lint.Run(files + extra_args)
665 assert False 673 assert False
666 except SystemExit, e: 674 except SystemExit, e:
667 # pylint has the bad habit of calling sys.exit(), trap it here. 675 # pylint has the bad habit of calling sys.exit(), trap it here.
668 return e.code 676 return e.code
669 except UnknownMessage, e: 677 except UnknownMessage, e:
670 return 'Please upgrade pylint: %s' % e 678 return 'Please upgrade pylint: %s' % e
671 679
672 result = None 680 result = None
673 if not input_api.verbose: 681 if not input_api.verbose:
674 result = run_lint(sorted(files)) 682 result = run_lint(sorted(files))
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 results.extend(input_api.canned_checks.CheckSvnForCommonMimeTypes( 943 results.extend(input_api.canned_checks.CheckSvnForCommonMimeTypes(
936 input_api, output_api)) 944 input_api, output_api))
937 snapshot("checking license") 945 snapshot("checking license")
938 results.extend(input_api.canned_checks.CheckLicense( 946 results.extend(input_api.canned_checks.CheckLicense(
939 input_api, output_api, license_header, source_file_filter=sources)) 947 input_api, output_api, license_header, source_file_filter=sources))
940 snapshot("checking was uploaded") 948 snapshot("checking was uploaded")
941 results.extend(input_api.canned_checks.CheckChangeWasUploaded( 949 results.extend(input_api.canned_checks.CheckChangeWasUploaded(
942 input_api, output_api)) 950 input_api, output_api))
943 snapshot("done") 951 snapshot("done")
944 return results 952 return results
OLDNEW
« no previous file with comments | « PRESUBMIT.py ('k') | pylintrc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698