Merge branch '2022-03-02-enable-pylint-in-CI' into next
To quote the author: This series adds a new errors-only pylint check and adds it to the CI systems. It also fixes the current errors in the U-Boot Python code, disabling errors where it seems necessary. A small patch to buildman allows it to build sandbox without any changes to the default config file
This commit is contained in:
commit
f861ffa660
@ -202,6 +202,28 @@ stages:
|
||||
export PATH=/opt/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin:$PATH
|
||||
test/nokia_rx51_test.sh
|
||||
|
||||
- job: pylint
|
||||
displayName: Check for any pylint regressions
|
||||
pool:
|
||||
vmImage: $(ubuntu_vm)
|
||||
container:
|
||||
image: $(ci_runner_image)
|
||||
options: $(container_option)
|
||||
steps:
|
||||
- script: |
|
||||
cd ${WORK_DIR}
|
||||
export USER=azure
|
||||
pip install -r test/py/requirements.txt
|
||||
pip install asteval pylint pyopenssl
|
||||
export PATH=${PATH}:~/.local/bin
|
||||
echo "[MASTER]" >> .pylintrc
|
||||
echo "load-plugins=pylint.extensions.docparams" >> .pylintrc
|
||||
export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl
|
||||
./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w --board sandbox_spl
|
||||
pylint --version
|
||||
export PYTHONPATH=${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt
|
||||
make pylint_err
|
||||
|
||||
- stage: test_py
|
||||
jobs:
|
||||
- job: test_py
|
||||
|
@ -215,6 +215,22 @@ Run tests for Nokia RX-51 (aka N900):
|
||||
- export PATH=/opt/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin:$PATH;
|
||||
test/nokia_rx51_test.sh
|
||||
|
||||
# Check for any pylint regressions
|
||||
Run pylint:
|
||||
stage: testsuites
|
||||
script:
|
||||
- pip install -r test/py/requirements.txt
|
||||
- pip install asteval pylint pyopenssl
|
||||
- export PATH=${PATH}:~/.local/bin
|
||||
- echo "[MASTER]" >> .pylintrc
|
||||
- echo "load-plugins=pylint.extensions.docparams" >> .pylintrc
|
||||
- export UBOOT_TRAVIS_BUILD_DIR=/tmp/sandbox_spl
|
||||
- ./tools/buildman/buildman -T0 -o ${UBOOT_TRAVIS_BUILD_DIR} -w
|
||||
--board sandbox_spl
|
||||
- pylint --version
|
||||
- export PYTHONPATH="${UBOOT_TRAVIS_BUILD_DIR}/scripts/dtc/pylibfdt"
|
||||
- make pylint_err
|
||||
|
||||
# Test sandbox with test.py
|
||||
sandbox test.py:
|
||||
variables:
|
||||
|
10
Makefile
10
Makefile
@ -521,7 +521,8 @@ env_h := include/generated/environment.h
|
||||
|
||||
no-dot-config-targets := clean clobber mrproper distclean \
|
||||
help %docs check% coccicheck \
|
||||
ubootversion backup tests check qcheck tcheck pylint
|
||||
ubootversion backup tests check qcheck tcheck pylint \
|
||||
pylint_err
|
||||
|
||||
config-targets := 0
|
||||
mixed-targets := 0
|
||||
@ -2261,7 +2262,7 @@ distclean: mrproper
|
||||
@rm -f boards.cfg CHANGELOG
|
||||
|
||||
# See doc/develop/python_cq.rst
|
||||
PHONY += pylint
|
||||
PHONY += pylint pylint_err
|
||||
PYLINT_BASE := scripts/pylint.base
|
||||
PYLINT_CUR := pylint.cur
|
||||
PYLINT_DIFF := pylint.diff
|
||||
@ -2303,6 +2304,11 @@ pylint:
|
||||
echo "No pylint regressions"; \
|
||||
fi
|
||||
|
||||
# Check for errors only
|
||||
pylint_err:
|
||||
$(Q)pylint -E -j 0 --ignore-imports=yes \
|
||||
$(shell find tools test -name "*.py")
|
||||
|
||||
backup:
|
||||
F=`basename $(srctree)` ; cd .. ; \
|
||||
gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
|
||||
|
@ -77,4 +77,15 @@ If the pylint version is updated in CI, this may result in needing to regenerate
|
||||
`scripts/pylint.base`.
|
||||
|
||||
|
||||
Checking for errors
|
||||
-------------------
|
||||
|
||||
If you only want to check for pylint errors, use::
|
||||
|
||||
PYTHONPATH=/path/to/scripts/dtc/pylibfdt/ make pylint_err
|
||||
|
||||
This will show only pylint errors. Note that you must set PYTHONPATH to point
|
||||
to the pylibfdt directory build by U-Boot (typically the sandbox_spl board). If
|
||||
you have used `make qcheck` then it sill be in `board-sandbox_spl`.
|
||||
|
||||
.. _`PEP 8`: https://www.python.org/dev/peps/pep-0008/
|
||||
|
@ -66,7 +66,7 @@ def test_avb_mmc_uuid(u_boot_console):
|
||||
part_list[cur_partname] = guid_to_check[1]
|
||||
|
||||
# lets check all guids with avb get_guid
|
||||
for part, guid in part_list.iteritems():
|
||||
for part, guid in part_list.items():
|
||||
avb_guid_resp = u_boot_console.run_command('avb get_uuid %s' % part)
|
||||
assert guid == avb_guid_resp.split('UUID: ')[1]
|
||||
|
||||
|
@ -131,7 +131,7 @@ def test_bind_unbind_with_uclass(u_boot_console):
|
||||
child2_index = int(child2_line[0].split()[1])
|
||||
|
||||
#bind simple_bus as a child of bind-test-child2
|
||||
response = u_boot_console.run_command('bind {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
|
||||
response = u_boot_console.run_command('bind {} {} simple_bus'.format(child2_uclass, child2_index))
|
||||
|
||||
#check that the child is there and its uclass/index pair is right
|
||||
tree = u_boot_console.run_command('dm tree')
|
||||
@ -152,7 +152,7 @@ def test_bind_unbind_with_uclass(u_boot_console):
|
||||
assert child_of_child2_line == ''
|
||||
|
||||
#bind simple_bus as a child of bind-test-child2
|
||||
response = u_boot_console.run_command('bind {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
|
||||
response = u_boot_console.run_command('bind {} {} simple_bus'.format(child2_uclass, child2_index))
|
||||
|
||||
#check that the child is there and its uclass/index pair is right
|
||||
tree = u_boot_console.run_command('dm tree')
|
||||
@ -165,7 +165,7 @@ def test_bind_unbind_with_uclass(u_boot_console):
|
||||
assert child_of_child2_index == child2_index + 1
|
||||
|
||||
#unbind the child and check it has been removed
|
||||
response = u_boot_console.run_command('unbind {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
|
||||
response = u_boot_console.run_command('unbind {} {} simple_bus'.format(child2_uclass, child2_index))
|
||||
assert response == ''
|
||||
|
||||
tree = u_boot_console.run_command('dm tree')
|
||||
@ -176,7 +176,7 @@ def test_bind_unbind_with_uclass(u_boot_console):
|
||||
|
||||
#unbind the child again and check it doesn't change the tree
|
||||
tree_old = u_boot_console.run_command('dm tree')
|
||||
response = u_boot_console.run_command('unbind {} {} simple_bus'.format(child2_uclass, child2_index, 'simple_bus'))
|
||||
response = u_boot_console.run_command('unbind {} {} simple_bus'.format(child2_uclass, child2_index))
|
||||
tree_new = u_boot_console.run_command('dm tree')
|
||||
|
||||
assert response == ''
|
||||
|
@ -482,4 +482,5 @@ if __name__ == '__main__':
|
||||
print('valid attack names: [fakeroot, kernel@]')
|
||||
sys.exit(1)
|
||||
|
||||
add_evil_node(sys.argv[1:])
|
||||
in_fname, out_fname, kernel_fname, attack = sys.argv[1:]
|
||||
add_evil_node(in_fname, out_fname, kernel_fname, attack)
|
||||
|
@ -115,6 +115,14 @@ class ConsoleBase(object):
|
||||
self.at_prompt = False
|
||||
self.at_prompt_logevt = None
|
||||
|
||||
def get_spawn(self):
|
||||
# This is not called, ssubclass must define this.
|
||||
# Return a value to avoid:
|
||||
# u_boot_console_base.py:348:12: E1128: Assigning result of a function
|
||||
# call, where the function returns None (assignment-from-none)
|
||||
return u_boot_spawn.Spawn([])
|
||||
|
||||
|
||||
def eval_bad_patterns(self):
|
||||
self.bad_patterns = [pat[PAT_RE] for pat in bad_pattern_defs \
|
||||
if self.disable_check_count[pat[PAT_ID]] == 0]
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
import argparse
|
||||
from argparse import ArgumentParser
|
||||
import state
|
||||
from binman import state
|
||||
|
||||
def make_extract_parser(subparsers):
|
||||
"""make_extract_parser: Make a subparser for the 'extract' command
|
||||
|
@ -20,6 +20,10 @@ from binman import elf
|
||||
from patman import command
|
||||
from patman import tout
|
||||
|
||||
# These are imported if needed since they import libfdt
|
||||
state = None
|
||||
Image = None
|
||||
|
||||
# List of images we plan to create
|
||||
# Make this global so that it can be referenced from tests
|
||||
images = OrderedDict()
|
||||
@ -41,6 +45,8 @@ def _ReadImageDesc(binman_node, use_expanded):
|
||||
Returns:
|
||||
OrderedDict of Image objects, each of which describes an image
|
||||
"""
|
||||
# For Image()
|
||||
# pylint: disable=E1102
|
||||
images = OrderedDict()
|
||||
if 'multiple-images' in binman_node.props:
|
||||
for node in binman_node.subnodes:
|
||||
|
@ -116,7 +116,7 @@ class TestElf(unittest.TestCase):
|
||||
entry = FakeEntry(10)
|
||||
section = FakeSection()
|
||||
with self.assertRaises(ValueError) as e:
|
||||
syms = elf.LookupAndWriteSymbols('missing-file', entry, section)
|
||||
elf.LookupAndWriteSymbols('missing-file', entry, section)
|
||||
self.assertIn("Filename 'missing-file' not found in input path",
|
||||
str(e.exception))
|
||||
|
||||
@ -126,7 +126,7 @@ class TestElf(unittest.TestCase):
|
||||
section = FakeSection()
|
||||
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||
with self.assertRaises(ValueError) as e:
|
||||
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
self.assertIn('entry_path has offset 4 (size 8) but the contents size '
|
||||
'is a', str(e.exception))
|
||||
|
||||
@ -139,8 +139,7 @@ class TestElf(unittest.TestCase):
|
||||
entry = FakeEntry(10)
|
||||
section = FakeSection()
|
||||
elf_fname = self.ElfTestFile('u_boot_binman_syms_bad')
|
||||
self.assertEqual(elf.LookupAndWriteSymbols(elf_fname, entry, section),
|
||||
None)
|
||||
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
|
||||
def testBadSymbolSize(self):
|
||||
"""Test that an attempt to use an 8-bit symbol are detected
|
||||
@ -152,7 +151,7 @@ class TestElf(unittest.TestCase):
|
||||
section = FakeSection()
|
||||
elf_fname =self.ElfTestFile('u_boot_binman_syms_size')
|
||||
with self.assertRaises(ValueError) as e:
|
||||
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
self.assertIn('has size 1: only 4 and 8 are supported',
|
||||
str(e.exception))
|
||||
|
||||
@ -165,7 +164,7 @@ class TestElf(unittest.TestCase):
|
||||
entry = FakeEntry(24)
|
||||
section = FakeSection(sym_value=None)
|
||||
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
self.assertEqual(tools.get_bytes(255, 20) + tools.get_bytes(ord('a'), 4),
|
||||
entry.data)
|
||||
|
||||
@ -177,7 +176,7 @@ class TestElf(unittest.TestCase):
|
||||
section = FakeSection()
|
||||
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||
with test_util.capture_sys_output() as (stdout, stderr):
|
||||
syms = elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||
self.assertTrue(len(stdout.getvalue()) > 0)
|
||||
finally:
|
||||
tout.init(tout.WARNING)
|
||||
|
@ -19,6 +19,8 @@ from patman import tout
|
||||
|
||||
modules = {}
|
||||
|
||||
# This is imported if needed
|
||||
state = None
|
||||
|
||||
# An argument which can be passed to entries on the command line, in lieu of
|
||||
# device-tree properties.
|
||||
|
@ -5,6 +5,7 @@
|
||||
# Test for the Entry class
|
||||
|
||||
import collections
|
||||
import importlib
|
||||
import os
|
||||
import sys
|
||||
import unittest
|
||||
@ -32,11 +33,7 @@ class TestEntry(unittest.TestCase):
|
||||
def _ReloadEntry(self):
|
||||
global entry
|
||||
if entry:
|
||||
if sys.version_info[0] >= 3:
|
||||
import importlib
|
||||
importlib.reload(entry)
|
||||
else:
|
||||
reload(entry)
|
||||
importlib.reload(entry)
|
||||
else:
|
||||
from binman import entry
|
||||
|
||||
|
@ -8,6 +8,9 @@
|
||||
from binman.entry import Entry
|
||||
from binman.etype.blob import Entry_blob
|
||||
|
||||
# This is imported if needed
|
||||
state = None
|
||||
|
||||
class Entry_blob_dtb(Entry_blob):
|
||||
"""A blob that holds a device tree
|
||||
|
||||
|
@ -7,6 +7,9 @@
|
||||
|
||||
from binman.etype.section import Entry_section
|
||||
|
||||
# This is imported if needed
|
||||
state = None
|
||||
|
||||
class Entry_blob_phase(Entry_section):
|
||||
"""Section that holds a phase binary
|
||||
|
||||
|
@ -12,6 +12,9 @@ from binman.cbfs_util import CbfsWriter
|
||||
from binman.entry import Entry
|
||||
from dtoc import fdt_util
|
||||
|
||||
# This is imported if needed
|
||||
state = None
|
||||
|
||||
class Entry_cbfs(Entry):
|
||||
"""Coreboot Filesystem (CBFS)
|
||||
|
||||
|
@ -15,6 +15,11 @@ from patman import tout
|
||||
FDTMAP_MAGIC = b'_FDTMAP_'
|
||||
FDTMAP_HDR_LEN = 16
|
||||
|
||||
# These is imported if needed
|
||||
Fdt = None
|
||||
libfdt = None
|
||||
state = None
|
||||
|
||||
def LocateFdtmap(data):
|
||||
"""Search an image for an fdt map
|
||||
|
||||
|
@ -13,6 +13,8 @@ from binman.etype.section import Entry_section
|
||||
from dtoc import fdt_util
|
||||
from patman import tools
|
||||
|
||||
# This is imported if needed
|
||||
state = None
|
||||
|
||||
class Entry_files(Entry_section):
|
||||
"""A set of files arranged in a section
|
||||
|
@ -163,6 +163,7 @@ class Entry_section(Entry):
|
||||
self._sort = False
|
||||
self._skip_at_start = None
|
||||
self._end_4gb = False
|
||||
self._ignore_missing = False
|
||||
|
||||
def ReadNode(self):
|
||||
"""Read properties from the section node"""
|
||||
|
@ -9,6 +9,9 @@ from binman.entry import Entry
|
||||
from binman.etype.blob_dtb import Entry_blob_dtb
|
||||
from patman import tools
|
||||
|
||||
# This is imported if needed
|
||||
state = None
|
||||
|
||||
class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
|
||||
"""A U-Boot device tree file, with the microcode removed
|
||||
|
||||
|
@ -991,7 +991,7 @@ class TestFunctional(unittest.TestCase):
|
||||
self.assertIn("Section '/binman': Size 0x7 (7) does not match "
|
||||
"align-size 0x8 (8)", str(e.exception))
|
||||
|
||||
def testPackAlignPowerOf2(self):
|
||||
def testPackAlignPowerOf2Inv(self):
|
||||
"""Test that invalid image alignment is detected"""
|
||||
with self.assertRaises(ValueError) as e:
|
||||
self._DoTestFile('020_pack_inv_image_align_power2.dts')
|
||||
@ -3714,7 +3714,7 @@ class TestFunctional(unittest.TestCase):
|
||||
err = stderr.getvalue()
|
||||
self.assertRegex(err, "Image 'main-section'.*missing.*: intel-ifwi")
|
||||
|
||||
def testPackOverlap(self):
|
||||
def testPackOverlapZero(self):
|
||||
"""Test that zero-size overlapping regions are ignored"""
|
||||
self._DoTestFile('160_pack_overlap_zero.dts')
|
||||
|
||||
@ -4095,13 +4095,6 @@ class TestFunctional(unittest.TestCase):
|
||||
self.assertIn("Generator node requires 'fit,fdt-list' property",
|
||||
str(e.exception))
|
||||
|
||||
def testFitFdtEmptyList(self):
|
||||
"""Test handling of an empty 'of-list' entry arg"""
|
||||
entry_args = {
|
||||
'of-list': '',
|
||||
}
|
||||
data = self._DoReadFileDtb('170_fit_fdt.dts', entry_args=entry_args)[0]
|
||||
|
||||
def testFitFdtMissing(self):
|
||||
"""Test handling of a missing 'default-dt' entry arg"""
|
||||
entry_args = {
|
||||
@ -4986,16 +4979,6 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
|
||||
self.assertEqual('rot-cert', fent.fip_type)
|
||||
self.assertEqual(b'aa', fent.data)
|
||||
|
||||
def testFipOther(self):
|
||||
"""Basic FIP with something that isn't a external blob"""
|
||||
data = self._DoReadFile('204_fip_other.dts')
|
||||
hdr, fents = fip_util.decode_fip(data)
|
||||
|
||||
self.assertEqual(2, len(fents))
|
||||
fent = fents[1]
|
||||
self.assertEqual('rot-cert', fent.fip_type)
|
||||
self.assertEqual(b'aa', fent.data)
|
||||
|
||||
def testFipNoType(self):
|
||||
"""FIP with an entry of an unknown type"""
|
||||
with self.assertRaises(ValueError) as e:
|
||||
|
@ -74,6 +74,7 @@ def CreateBuildmanConfigFile(config_fname):
|
||||
print('''[toolchain]
|
||||
# name = path
|
||||
# e.g. x86 = /opt/gcc-4.6.3-nolibc/x86_64-linux
|
||||
other = /
|
||||
|
||||
[toolchain-prefix]
|
||||
# name = path to prefix
|
||||
|
@ -1763,7 +1763,7 @@ class Builder:
|
||||
if self.num_threads:
|
||||
self.queue.put(job)
|
||||
else:
|
||||
results = self._single_builder.RunJob(job)
|
||||
self._single_builder.RunJob(job)
|
||||
|
||||
if self.num_threads:
|
||||
term = threading.Thread(target=self.queue.join)
|
||||
|
@ -123,10 +123,10 @@ def adjust_cfg_file(fname, adjust_cfg):
|
||||
C=val to set the value of C (val must have quotes if C is
|
||||
a string Kconfig)
|
||||
"""
|
||||
lines = tools.ReadFile(fname, binary=False).splitlines()
|
||||
lines = tools.read_file(fname, binary=False).splitlines()
|
||||
out_lines = adjust_cfg_lines(lines, adjust_cfg)
|
||||
out = '\n'.join(out_lines) + '\n'
|
||||
tools.WriteFile(fname, out, binary=False)
|
||||
tools.write_file(fname, out, binary=False)
|
||||
|
||||
def convert_list_to_dict(adjust_cfg_list):
|
||||
"""Convert a list of config changes into the dict used by adjust_cfg_file()
|
||||
@ -219,7 +219,7 @@ def check_cfg_file(fname, adjust_cfg):
|
||||
Returns:
|
||||
str: None if OK, else an error string listing the problems
|
||||
"""
|
||||
lines = tools.ReadFile(fname, binary=False).splitlines()
|
||||
lines = tools.read_file(fname, binary=False).splitlines()
|
||||
bad_cfgs = check_cfg_lines(lines, adjust_cfg)
|
||||
if bad_cfgs:
|
||||
out = [f'{cfg:20} {line}' for cfg, line in bad_cfgs]
|
||||
|
@ -524,12 +524,6 @@ class TestFunctional(unittest.TestCase):
|
||||
# Each commit has a config and make
|
||||
self.assertEqual(self._make_calls, len(boards) * self._commits * 2)
|
||||
|
||||
def testForceReconfigure(self):
|
||||
"""The -f flag should force a rebuild"""
|
||||
self._RunControl('-b', TEST_BRANCH, '-C', '-o', self._output_dir)
|
||||
# Each commit has a config and make
|
||||
self.assertEqual(self._make_calls, len(boards) * self._commits * 2)
|
||||
|
||||
def testMrproper(self):
|
||||
"""The -f flag should force a rebuild"""
|
||||
self._RunControl('-b', TEST_BRANCH, '-m', '-o', self._output_dir)
|
||||
|
@ -556,6 +556,7 @@ from os.path import dirname, exists, expandvars, islink, join, realpath
|
||||
|
||||
VERSION = (14, 1, 0)
|
||||
|
||||
# pylint: disable=E1101
|
||||
|
||||
# File layout:
|
||||
#
|
||||
|
@ -30,8 +30,8 @@ from patman import terminal
|
||||
from patman import test_util
|
||||
|
||||
def RunTests(skip_net_tests, verboose, args):
|
||||
import func_test
|
||||
import test
|
||||
from buildman import func_test
|
||||
from buildman import test
|
||||
import doctest
|
||||
|
||||
result = unittest.TestResult()
|
||||
|
0
tools/concurrencytest/__init__.py
Normal file
0
tools/concurrencytest/__init__.py
Normal file
@ -16,13 +16,13 @@ import os
|
||||
import struct
|
||||
import unittest
|
||||
|
||||
from dtb_platdata import Ftype
|
||||
from dtb_platdata import get_value
|
||||
from dtb_platdata import tab_to
|
||||
from dtoc import dtb_platdata
|
||||
from dtoc import fdt
|
||||
from dtoc import fdt_util
|
||||
from dtoc import src_scan
|
||||
from dtoc.dtb_platdata import Ftype
|
||||
from dtoc.dtb_platdata import get_value
|
||||
from dtoc.dtb_platdata import tab_to
|
||||
from dtoc.src_scan import conv_name_to_c
|
||||
from dtoc.src_scan import get_compat_name
|
||||
from patman import test_util
|
||||
|
@ -25,7 +25,7 @@ sys.path.insert(2, os.path.join(our_path,
|
||||
from dtoc import fdt
|
||||
from dtoc import fdt_util
|
||||
from dtoc.fdt_util import fdt32_to_cpu, fdt64_to_cpu
|
||||
from fdt import Type, BytesToValue
|
||||
from dtoc.fdt import Type, BytesToValue
|
||||
import libfdt
|
||||
from patman import command
|
||||
from patman import test_util
|
||||
@ -119,9 +119,9 @@ class TestFdt(unittest.TestCase):
|
||||
"""Test that packing a device tree works"""
|
||||
self.dtb.Pack()
|
||||
|
||||
def testGetFdt(self):
|
||||
def testGetFdtRaw(self):
|
||||
"""Tetst that we can access the raw device-tree data"""
|
||||
self.assertTrue(isinstance(self.dtb.GetContents(), bytearray))
|
||||
self.assertTrue(isinstance(self.dtb.GetContents(), bytes))
|
||||
|
||||
def testGetProps(self):
|
||||
"""Tests obtaining a list of properties"""
|
||||
|
@ -339,7 +339,7 @@ def read_file(fname, as_lines=True, skip_unicode=False):
|
||||
return inf.read()
|
||||
except UnicodeDecodeError as e:
|
||||
if not skip_unicode:
|
||||
raises
|
||||
raise
|
||||
print("Failed on file %s': %s" % (fname, e))
|
||||
return None
|
||||
|
||||
@ -790,9 +790,6 @@ class KconfigParser:
|
||||
actlog = "'%s' is the same as the define in Kconfig. Do nothing." \
|
||||
% value
|
||||
log_color = COLOR_LIGHT_PURPLE
|
||||
elif action == ACTION_SPL_NOT_EXIST:
|
||||
actlog = 'SPL is not enabled for this defconfig. Skip.'
|
||||
log_color = COLOR_PURPLE
|
||||
else:
|
||||
sys.exit('Internal Error. This should not happen.')
|
||||
|
||||
|
@ -125,7 +125,7 @@ def check_patch_parse(checkpatch_output, verbose=False):
|
||||
Returns:
|
||||
namedtuple containing:
|
||||
ok: False=failure, True=ok
|
||||
problems: List of problems, each a dict:
|
||||
problems (list of problems): each a dict:
|
||||
'type'; error or warning
|
||||
'msg': text message
|
||||
'file' : filename
|
||||
@ -252,6 +252,8 @@ def check_patches(verbose, args):
|
||||
if (len(result.problems) != result.errors + result.warnings +
|
||||
result.checks):
|
||||
print("Internal error: some problems lost")
|
||||
# Python seems to get confused by this
|
||||
# pylint: disable=E1133
|
||||
for item in result.problems:
|
||||
sys.stderr.write(
|
||||
get_warning_msg(col, item.get('type', '<unknown>'),
|
||||
|
@ -17,13 +17,6 @@ class CommandResult:
|
||||
return_code: Return code from command
|
||||
exception: Exception received, or None if all ok
|
||||
"""
|
||||
def __init__(self):
|
||||
self.stdout = None
|
||||
self.stderr = None
|
||||
self.combined = None
|
||||
self.return_code = None
|
||||
self.exception = None
|
||||
|
||||
def __init__(self, stdout='', stderr='', combined='', return_code=0,
|
||||
exception=None):
|
||||
self.stdout = stdout
|
||||
@ -72,6 +65,7 @@ def run_pipe(pipe_list, infile=None, outfile=None,
|
||||
"""
|
||||
if test_result:
|
||||
if hasattr(test_result, '__call__'):
|
||||
# pylint: disable=E1102
|
||||
result = test_result(pipe_list=pipe_list)
|
||||
if result:
|
||||
return result
|
||||
|
@ -31,7 +31,7 @@ class Commit:
|
||||
"""
|
||||
def __init__(self, hash):
|
||||
self.hash = hash
|
||||
self.subject = None
|
||||
self.subject = ''
|
||||
self.tags = []
|
||||
self.changes = {}
|
||||
self.cc_list = []
|
||||
|
@ -113,7 +113,7 @@ class Popen(subprocess.Popen):
|
||||
return b''
|
||||
return data
|
||||
|
||||
def communicate_filter(self, output):
|
||||
def communicate_filter(self, output, input_buf=''):
|
||||
"""Interact with process: Read data from stdout and stderr.
|
||||
|
||||
This method runs until end-of-file is reached, then waits for the
|
||||
@ -166,7 +166,7 @@ class Popen(subprocess.Popen):
|
||||
# Flush stdio buffer. This might block, if the user has
|
||||
# been writing to .stdin in an uncontrolled fashion.
|
||||
self.stdin.flush()
|
||||
if input:
|
||||
if input_buf:
|
||||
write_set.append(self.stdin)
|
||||
else:
|
||||
self.stdin.close()
|
||||
@ -195,10 +195,10 @@ class Popen(subprocess.Popen):
|
||||
# When select has indicated that the file is writable,
|
||||
# we can write up to PIPE_BUF bytes without risk
|
||||
# blocking. POSIX defines PIPE_BUF >= 512
|
||||
chunk = input[input_offset : input_offset + 512]
|
||||
chunk = input_buf[input_offset : input_offset + 512]
|
||||
bytes_written = os.write(self.stdin.fileno(), chunk)
|
||||
input_offset += bytes_written
|
||||
if input_offset >= len(input):
|
||||
if input_offset >= len(input_buf):
|
||||
self.stdin.close()
|
||||
write_set.remove(self.stdin)
|
||||
|
||||
@ -240,16 +240,6 @@ class Popen(subprocess.Popen):
|
||||
stderr = self.convert_data(stderr)
|
||||
combined = self.convert_data(combined)
|
||||
|
||||
# Translate newlines, if requested. We cannot let the file
|
||||
# object do the translation: It is based on stdio, which is
|
||||
# impossible to combine with select (unless forcing no
|
||||
# buffering).
|
||||
if self.universal_newlines and hasattr(file, 'newlines'):
|
||||
if stdout:
|
||||
stdout = self._translate_newlines(stdout)
|
||||
if stderr:
|
||||
stderr = self._translate_newlines(stderr)
|
||||
|
||||
self.wait()
|
||||
return (stdout, stderr, combined)
|
||||
|
||||
|
@ -341,6 +341,8 @@ Changes in v2:
|
||||
tools.write_file(path, text, binary=False)
|
||||
index = self.repo.index
|
||||
index.add(fname)
|
||||
# pylint doesn't seem to find this
|
||||
# pylint: disable=E1101
|
||||
author = pygit2.Signature('Test user', 'test@email.com')
|
||||
committer = author
|
||||
tree = index.write_tree()
|
||||
@ -363,6 +365,8 @@ Changes in v2:
|
||||
self.repo = repo
|
||||
new_tree = repo.TreeBuilder().write()
|
||||
|
||||
# pylint doesn't seem to find this
|
||||
# pylint: disable=E1101
|
||||
author = pygit2.Signature('Test user', 'test@email.com')
|
||||
committer = author
|
||||
_ = repo.create_commit('HEAD', author, committer, 'Created master',
|
||||
@ -414,6 +418,8 @@ better than before''')
|
||||
first_target = repo.revparse_single('HEAD')
|
||||
|
||||
target = repo.revparse_single('HEAD~2')
|
||||
# pylint doesn't seem to find this
|
||||
# pylint: disable=E1101
|
||||
repo.reset(target.oid, pygit2.GIT_CHECKOUT_FORCE)
|
||||
self.make_commit_with_file('video: Some video improvements', '''
|
||||
Fix up the video so that
|
||||
@ -459,6 +465,8 @@ complicated as possible''')
|
||||
"""Test creating patches from a branch"""
|
||||
repo = self.make_git_tree()
|
||||
target = repo.lookup_reference('refs/heads/first')
|
||||
# pylint doesn't seem to find this
|
||||
# pylint: disable=E1101
|
||||
self.repo.checkout(target, strategy=pygit2.GIT_CHECKOUT_FORCE)
|
||||
control.setup()
|
||||
try:
|
||||
@ -615,6 +623,8 @@ diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
|
||||
"""Test CountCommitsToBranch when there is no upstream"""
|
||||
repo = self.make_git_tree()
|
||||
target = repo.lookup_reference('refs/heads/base')
|
||||
# pylint doesn't seem to find this
|
||||
# pylint: disable=E1101
|
||||
self.repo.checkout(target, strategy=pygit2.GIT_CHECKOUT_FORCE)
|
||||
|
||||
# Check that it can detect the current branch
|
||||
|
@ -597,7 +597,7 @@ class PatchStream:
|
||||
if 'prefix' in self.series:
|
||||
parts.append(self.series['prefix'])
|
||||
if 'postfix' in self.series:
|
||||
parts.append(self.serties['postfix'])
|
||||
parts.append(self.series['postfix'])
|
||||
if 'version' in self.series:
|
||||
parts.append("v%s" % self.series['version'])
|
||||
|
||||
|
@ -122,8 +122,7 @@ class Series(dict):
|
||||
cc_list = list(self._generated_cc[commit.patch])
|
||||
for email in sorted(set(cc_list) - to_set - cc_set):
|
||||
if email == None:
|
||||
email = col.build(col.YELLOW, "<alias '%s' not found>"
|
||||
% tag)
|
||||
email = col.build(col.YELLOW, '<alias not found>')
|
||||
if email:
|
||||
print(' Cc: ', email)
|
||||
print
|
||||
|
@ -200,12 +200,12 @@ def CreatePatmanConfigFile(gitutil, config_fname):
|
||||
"""
|
||||
name = gitutil.get_default_user_name()
|
||||
if name == None:
|
||||
name = raw_input("Enter name: ")
|
||||
name = input("Enter name: ")
|
||||
|
||||
email = gitutil.get_default_user_email()
|
||||
|
||||
if email == None:
|
||||
email = raw_input("Enter email: ")
|
||||
email = input("Enter email: ")
|
||||
|
||||
try:
|
||||
f = open(config_fname, 'w')
|
||||
|
@ -62,8 +62,8 @@ def prepare_output_dir(dirname, preserve=False):
|
||||
try:
|
||||
os.makedirs(outdir)
|
||||
except OSError as err:
|
||||
raise CmdError("Cannot make output directory '%s': '%s'" %
|
||||
(outdir, err.strerror))
|
||||
raise ValueError(
|
||||
f"Cannot make output directory 'outdir': 'err.strerror'")
|
||||
tout.debug("Using output directory '%s'" % outdir)
|
||||
else:
|
||||
outdir = tempfile.mkdtemp(prefix='binman.')
|
||||
@ -160,7 +160,7 @@ def get_input_filename_glob(pattern):
|
||||
A list of matching files in all input directories
|
||||
"""
|
||||
if not indir:
|
||||
return glob.glob(fname)
|
||||
return glob.glob(pattern)
|
||||
files = []
|
||||
for dirname in indir:
|
||||
pathname = os.path.join(dirname, pattern)
|
||||
@ -201,7 +201,7 @@ def path_has_file(path_spec, fname):
|
||||
return True
|
||||
return False
|
||||
|
||||
def get_host_compile_tool(name):
|
||||
def get_host_compile_tool(env, name):
|
||||
"""Get the host-specific version for a compile tool
|
||||
|
||||
This checks the environment variables that specify which version of
|
||||
@ -356,7 +356,7 @@ def run_result(name, *args, **kwargs):
|
||||
name, extra_args = get_target_compile_tool(name)
|
||||
args = tuple(extra_args) + args
|
||||
elif for_host:
|
||||
name, extra_args = get_host_compile_tool(name)
|
||||
name, extra_args = get_host_compile_tool(env, name)
|
||||
args = tuple(extra_args) + args
|
||||
name = os.path.expanduser(name) # Expand paths containing ~
|
||||
all_args = (name,) + args
|
||||
|
Loading…
Reference in New Issue
Block a user