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:
Tom Rini 2022-03-02 10:38:00 -05:00
commit f861ffa660
40 changed files with 154 additions and 95 deletions

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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/

View File

@ -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]

View File

@ -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 == ''

View File

@ -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)

View File

@ -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]

View File

@ -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

View File

@ -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:

View File

@ -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)

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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"""

View File

@ -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

View File

@ -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:

View File

@ -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

View File

@ -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)

View File

@ -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]

View File

@ -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)

View File

@ -556,6 +556,7 @@ from os.path import dirname, exists, expandvars, islink, join, realpath
VERSION = (14, 1, 0)
# pylint: disable=E1101
# File layout:
#

View File

@ -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()

View File

View 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

View File

@ -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"""

View File

@ -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.')

View File

@ -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>'),

View File

@ -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

View File

@ -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 = []

View File

@ -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)

View File

@ -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

View File

@ -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'])

View File

@ -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

View File

@ -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')

View File

@ -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