mirror of
git://git.yoctoproject.org/poky.git
synced 2025-07-19 03:49:07 +02:00

The patchtest tests provide vague feedback to the user, and many of them also provide redundant 'fix' strings that could easily be incorporated into the issue messages themselves. Simplify them so that it is more clear what the errors are and how they can be addressed. No recommendation is given when the issue string adequately conveys the issue, e.g. with a missing "LICENSE" entry in a newly-created recipe. (From OE-Core rev: 0bfb3614244ec7aa79b6424bc63f9f2bccdabe98) Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
61 lines
2.6 KiB
Python
61 lines
2.6 KiB
Python
# Checks related to the python code done with pylint
|
|
#
|
|
# Copyright (C) 2016 Intel Corporation
|
|
#
|
|
# SPDX-License-Identifier: GPL-2.0
|
|
|
|
import base
|
|
from data import PatchTestInput
|
|
import pylint.epylint as lint
|
|
|
|
class PyLint(base.Base):
|
|
pythonpatches = []
|
|
pylint_pretest = {}
|
|
pylint_test = {}
|
|
pylint_options = " -E --disable='E0611, E1101, F0401, E0602' --msg-template='L:{line} F:{module} I:{msg}'"
|
|
|
|
@classmethod
|
|
def setUpClassLocal(cls):
|
|
# get just those patches touching python files
|
|
cls.pythonpatches = []
|
|
for patch in cls.patchset:
|
|
if patch.path.endswith('.py'):
|
|
if not patch.is_removed_file:
|
|
cls.pythonpatches.append(patch)
|
|
|
|
def setUp(self):
|
|
if self.unidiff_parse_error:
|
|
self.skip('Python-unidiff parse error')
|
|
if not PatchTestInput.repo.canbemerged:
|
|
self.skip('Patch cannot be merged, no reason to execute the test method')
|
|
if not PyLint.pythonpatches:
|
|
self.skip('No python related patches, skipping test')
|
|
|
|
def pretest_pylint(self):
|
|
for pythonpatch in self.pythonpatches:
|
|
if pythonpatch.is_modified_file:
|
|
(pylint_stdout, pylint_stderr) = lint.py_run(command_options = pythonpatch.path + self.pylint_options, return_std=True)
|
|
for line in pylint_stdout.readlines():
|
|
if not '*' in line:
|
|
if line.strip():
|
|
self.pylint_pretest[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
|
|
|
|
def test_pylint(self):
|
|
for pythonpatch in self.pythonpatches:
|
|
# a condition checking whether a file is renamed or not
|
|
# unidiff doesn't support this yet
|
|
if pythonpatch.target_file is not pythonpatch.path:
|
|
path = pythonpatch.target_file[2:]
|
|
else:
|
|
path = pythonpatch.path
|
|
(pylint_stdout, pylint_stderr) = lint.py_run(command_options = path + self.pylint_options, return_std=True)
|
|
for line in pylint_stdout.readlines():
|
|
if not '*' in line:
|
|
if line.strip():
|
|
self.pylint_test[line.strip().split(' ',1)[0]] = line.strip().split(' ',1)[1]
|
|
|
|
for issue in self.pylint_test:
|
|
if self.pylint_test[issue] not in self.pylint_pretest.values():
|
|
self.fail('Errors in your Python code were encountered. Please check your code with a linter and resubmit',
|
|
data=[('Output', 'Please, fix the listed issues:'), ('', issue + ' ' + self.pylint_test[issue])])
|