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

Unified Diff: presubmit_canned_checks.py

Issue 10447014: Add pylint to depot_tools. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Fix unittests. Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « package_management.py ('k') | pylint » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: presubmit_canned_checks.py
diff --git a/presubmit_canned_checks.py b/presubmit_canned_checks.py
index 013effdc5deb97dccd5b63a8fdddc5cd2f46b8c2..a5f17dad564db038fa21ac99a8153b65b135fbe5 100644
--- a/presubmit_canned_checks.py
+++ b/presubmit_canned_checks.py
@@ -227,7 +227,7 @@ def CheckChangeHasNoCrAndHasOnlyOneEol(input_api, output_api,
return outputs
-def _ReportErrorFileAndLine(filename, line_num, line):
+def _ReportErrorFileAndLine(filename, line_num, dummy_line):
"""Default error formatter for _FindNewViolationsOfRule."""
return '%s, line %s' % (filename, line_num)
@@ -622,7 +622,7 @@ def RunPylint(input_api, output_api, white_list=None, black_list=None,
disabled_warnings=None):
"""Run pylint on python files.
- The default white_list enforces looking only a *.py files.
+ The default white_list enforces looking only at *.py files.
"""
white_list = tuple(white_list or ('.*\.py$',))
black_list = tuple(black_list or input_api.DEFAULT_BLACK_LIST)
@@ -640,62 +640,45 @@ def RunPylint(input_api, output_api, white_list=None, black_list=None,
if disabled_warnings:
extra_args.extend(['-d', ','.join(disabled_warnings)])
- # On certain pylint/python version combination, running pylint throws a lot of
- # warning messages.
- import warnings
- warnings.filterwarnings('ignore', category=DeprecationWarning)
- try:
- files = _FetchAllFiles(input_api, white_list, black_list)
- if not files:
- return []
- # Now that at least one python file was modified and all the python files
- # were listed, try to run pylint.
- try:
- from pylint import lint
- from pylint.utils import UnknownMessage
- input_api.logging.debug(
- 'Using pylint v%s from %s' % (lint.version, lint.__file__))
- except ImportError:
- if input_api.platform == 'win32':
- return [output_api.PresubmitNotifyResult(
- 'Warning: Can\'t run pylint because it is not installed. Please '
- 'install manually\n'
- 'Cannot do static analysis of python files.')]
- return [output_api.PresubmitError(
- 'Please install pylint with "sudo apt-get install python-setuptools; '
- 'sudo easy_install pylint"\n'
- 'or visit http://pypi.python.org/pypi/setuptools.\n'
- 'Cannot do static analysis of python files.')]
-
- def run_lint(files):
- try:
- lint.Run(files + extra_args)
- assert False
- except SystemExit, e:
- # pylint has the bad habit of calling sys.exit(), trap it here.
- return e.code
- except UnknownMessage, e:
- return 'Please upgrade pylint: %s' % e
-
- result = None
- if not input_api.verbose:
- result = run_lint(sorted(files))
- else:
- for filename in sorted(files):
- print('Running pylint on %s' % filename)
- result = run_lint([filename]) or result
- if isinstance(result, basestring):
- return [error_type(result)]
- elif result:
- return [error_type('Fix pylint errors first.')]
+ files = _FetchAllFiles(input_api, white_list, black_list)
+ if not files:
return []
- finally:
- warnings.filterwarnings('default', category=DeprecationWarning)
+
+ # Copy the system path to the environment so pylint can find the right
+ # imports.
+ env = input_api.environ.copy()
+ import sys
+ env['PYTHONPATH'] = input_api.os_path.pathsep.join(sys.path)
+
+ def run_lint(files):
+ # We can't import pylint directly due to licensing issues, so we run
+ # it in another process. Windows needs help running python files so we
+ # explicitly specify the interpreter to use.
+ command = [input_api.python_executable,
+ input_api.os_path.join(_HERE, 'third_party', 'pylint.py')]
+ try:
+ return input_api.subprocess.call(command + files + extra_args)
+ except OSError:
+ return 'Pylint failed!'
+
+ result = None
+ if not input_api.verbose:
+ result = run_lint(sorted(files))
+ else:
+ for filename in sorted(files):
+ print('Running pylint on %s' % filename)
+ result = run_lint([filename]) or result
+ if isinstance(result, basestring):
+ return [error_type(result)]
+ elif result:
+ return [error_type('Fix pylint errors first.')]
+ return []
# TODO(dpranke): Get the host_url from the input_api instead
-def CheckRietveldTryJobExecution(input_api, output_api, host_url, platforms,
- owner):
+def CheckRietveldTryJobExecution(dummy_input_api, dummy_output_api,
+ dummy_host_url, dummy_platforms,
+ dummy_owner):
# Temporarily 'fix' the check while the Rietveld API is being upgraded to
# something sensible.
return []
« no previous file with comments | « package_management.py ('k') | pylint » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698