mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-22 12:54:37 +00:00
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
40 changed files with 154 additions and 95 deletions
|
@ -202,6 +202,28 @@ stages:
|
||||||
export PATH=/opt/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin:$PATH
|
export PATH=/opt/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin:$PATH
|
||||||
test/nokia_rx51_test.sh
|
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
|
- stage: test_py
|
||||||
jobs:
|
jobs:
|
||||||
- job: test_py
|
- 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;
|
- export PATH=/opt/gcc-11.1.0-nolibc/arm-linux-gnueabi/bin:$PATH;
|
||||||
test/nokia_rx51_test.sh
|
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
|
# Test sandbox with test.py
|
||||||
sandbox test.py:
|
sandbox test.py:
|
||||||
variables:
|
variables:
|
||||||
|
|
10
Makefile
10
Makefile
|
@ -521,7 +521,8 @@ env_h := include/generated/environment.h
|
||||||
|
|
||||||
no-dot-config-targets := clean clobber mrproper distclean \
|
no-dot-config-targets := clean clobber mrproper distclean \
|
||||||
help %docs check% coccicheck \
|
help %docs check% coccicheck \
|
||||||
ubootversion backup tests check qcheck tcheck pylint
|
ubootversion backup tests check qcheck tcheck pylint \
|
||||||
|
pylint_err
|
||||||
|
|
||||||
config-targets := 0
|
config-targets := 0
|
||||||
mixed-targets := 0
|
mixed-targets := 0
|
||||||
|
@ -2261,7 +2262,7 @@ distclean: mrproper
|
||||||
@rm -f boards.cfg CHANGELOG
|
@rm -f boards.cfg CHANGELOG
|
||||||
|
|
||||||
# See doc/develop/python_cq.rst
|
# See doc/develop/python_cq.rst
|
||||||
PHONY += pylint
|
PHONY += pylint pylint_err
|
||||||
PYLINT_BASE := scripts/pylint.base
|
PYLINT_BASE := scripts/pylint.base
|
||||||
PYLINT_CUR := pylint.cur
|
PYLINT_CUR := pylint.cur
|
||||||
PYLINT_DIFF := pylint.diff
|
PYLINT_DIFF := pylint.diff
|
||||||
|
@ -2303,6 +2304,11 @@ pylint:
|
||||||
echo "No pylint regressions"; \
|
echo "No pylint regressions"; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Check for errors only
|
||||||
|
pylint_err:
|
||||||
|
$(Q)pylint -E -j 0 --ignore-imports=yes \
|
||||||
|
$(shell find tools test -name "*.py")
|
||||||
|
|
||||||
backup:
|
backup:
|
||||||
F=`basename $(srctree)` ; cd .. ; \
|
F=`basename $(srctree)` ; cd .. ; \
|
||||||
gtar --force-local -zcvf `LC_ALL=C date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
|
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`.
|
`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/
|
.. _`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]
|
part_list[cur_partname] = guid_to_check[1]
|
||||||
|
|
||||||
# lets check all guids with avb get_guid
|
# 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)
|
avb_guid_resp = u_boot_console.run_command('avb get_uuid %s' % part)
|
||||||
assert guid == avb_guid_resp.split('UUID: ')[1]
|
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])
|
child2_index = int(child2_line[0].split()[1])
|
||||||
|
|
||||||
#bind simple_bus as a child of bind-test-child2
|
#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
|
#check that the child is there and its uclass/index pair is right
|
||||||
tree = u_boot_console.run_command('dm tree')
|
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 == ''
|
assert child_of_child2_line == ''
|
||||||
|
|
||||||
#bind simple_bus as a child of bind-test-child2
|
#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
|
#check that the child is there and its uclass/index pair is right
|
||||||
tree = u_boot_console.run_command('dm tree')
|
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
|
assert child_of_child2_index == child2_index + 1
|
||||||
|
|
||||||
#unbind the child and check it has been removed
|
#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 == ''
|
assert response == ''
|
||||||
|
|
||||||
tree = u_boot_console.run_command('dm tree')
|
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
|
#unbind the child again and check it doesn't change the tree
|
||||||
tree_old = u_boot_console.run_command('dm 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')
|
tree_new = u_boot_console.run_command('dm tree')
|
||||||
|
|
||||||
assert response == ''
|
assert response == ''
|
||||||
|
|
|
@ -482,4 +482,5 @@ if __name__ == '__main__':
|
||||||
print('valid attack names: [fakeroot, kernel@]')
|
print('valid attack names: [fakeroot, kernel@]')
|
||||||
sys.exit(1)
|
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 = False
|
||||||
self.at_prompt_logevt = None
|
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):
|
def eval_bad_patterns(self):
|
||||||
self.bad_patterns = [pat[PAT_RE] for pat in bad_pattern_defs \
|
self.bad_patterns = [pat[PAT_RE] for pat in bad_pattern_defs \
|
||||||
if self.disable_check_count[pat[PAT_ID]] == 0]
|
if self.disable_check_count[pat[PAT_ID]] == 0]
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
from argparse import ArgumentParser
|
from argparse import ArgumentParser
|
||||||
import state
|
from binman import state
|
||||||
|
|
||||||
def make_extract_parser(subparsers):
|
def make_extract_parser(subparsers):
|
||||||
"""make_extract_parser: Make a subparser for the 'extract' command
|
"""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 command
|
||||||
from patman import tout
|
from patman import tout
|
||||||
|
|
||||||
|
# These are imported if needed since they import libfdt
|
||||||
|
state = None
|
||||||
|
Image = None
|
||||||
|
|
||||||
# List of images we plan to create
|
# List of images we plan to create
|
||||||
# Make this global so that it can be referenced from tests
|
# Make this global so that it can be referenced from tests
|
||||||
images = OrderedDict()
|
images = OrderedDict()
|
||||||
|
@ -41,6 +45,8 @@ def _ReadImageDesc(binman_node, use_expanded):
|
||||||
Returns:
|
Returns:
|
||||||
OrderedDict of Image objects, each of which describes an image
|
OrderedDict of Image objects, each of which describes an image
|
||||||
"""
|
"""
|
||||||
|
# For Image()
|
||||||
|
# pylint: disable=E1102
|
||||||
images = OrderedDict()
|
images = OrderedDict()
|
||||||
if 'multiple-images' in binman_node.props:
|
if 'multiple-images' in binman_node.props:
|
||||||
for node in binman_node.subnodes:
|
for node in binman_node.subnodes:
|
||||||
|
|
|
@ -116,7 +116,7 @@ class TestElf(unittest.TestCase):
|
||||||
entry = FakeEntry(10)
|
entry = FakeEntry(10)
|
||||||
section = FakeSection()
|
section = FakeSection()
|
||||||
with self.assertRaises(ValueError) as e:
|
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",
|
self.assertIn("Filename 'missing-file' not found in input path",
|
||||||
str(e.exception))
|
str(e.exception))
|
||||||
|
|
||||||
|
@ -126,7 +126,7 @@ class TestElf(unittest.TestCase):
|
||||||
section = FakeSection()
|
section = FakeSection()
|
||||||
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||||
with self.assertRaises(ValueError) as e:
|
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 '
|
self.assertIn('entry_path has offset 4 (size 8) but the contents size '
|
||||||
'is a', str(e.exception))
|
'is a', str(e.exception))
|
||||||
|
|
||||||
|
@ -139,8 +139,7 @@ class TestElf(unittest.TestCase):
|
||||||
entry = FakeEntry(10)
|
entry = FakeEntry(10)
|
||||||
section = FakeSection()
|
section = FakeSection()
|
||||||
elf_fname = self.ElfTestFile('u_boot_binman_syms_bad')
|
elf_fname = self.ElfTestFile('u_boot_binman_syms_bad')
|
||||||
self.assertEqual(elf.LookupAndWriteSymbols(elf_fname, entry, section),
|
elf.LookupAndWriteSymbols(elf_fname, entry, section)
|
||||||
None)
|
|
||||||
|
|
||||||
def testBadSymbolSize(self):
|
def testBadSymbolSize(self):
|
||||||
"""Test that an attempt to use an 8-bit symbol are detected
|
"""Test that an attempt to use an 8-bit symbol are detected
|
||||||
|
@ -152,7 +151,7 @@ class TestElf(unittest.TestCase):
|
||||||
section = FakeSection()
|
section = FakeSection()
|
||||||
elf_fname =self.ElfTestFile('u_boot_binman_syms_size')
|
elf_fname =self.ElfTestFile('u_boot_binman_syms_size')
|
||||||
with self.assertRaises(ValueError) as e:
|
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',
|
self.assertIn('has size 1: only 4 and 8 are supported',
|
||||||
str(e.exception))
|
str(e.exception))
|
||||||
|
|
||||||
|
@ -165,7 +164,7 @@ class TestElf(unittest.TestCase):
|
||||||
entry = FakeEntry(24)
|
entry = FakeEntry(24)
|
||||||
section = FakeSection(sym_value=None)
|
section = FakeSection(sym_value=None)
|
||||||
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
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),
|
self.assertEqual(tools.get_bytes(255, 20) + tools.get_bytes(ord('a'), 4),
|
||||||
entry.data)
|
entry.data)
|
||||||
|
|
||||||
|
@ -177,7 +176,7 @@ class TestElf(unittest.TestCase):
|
||||||
section = FakeSection()
|
section = FakeSection()
|
||||||
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
elf_fname = self.ElfTestFile('u_boot_binman_syms')
|
||||||
with test_util.capture_sys_output() as (stdout, stderr):
|
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)
|
self.assertTrue(len(stdout.getvalue()) > 0)
|
||||||
finally:
|
finally:
|
||||||
tout.init(tout.WARNING)
|
tout.init(tout.WARNING)
|
||||||
|
|
|
@ -19,6 +19,8 @@ from patman import tout
|
||||||
|
|
||||||
modules = {}
|
modules = {}
|
||||||
|
|
||||||
|
# This is imported if needed
|
||||||
|
state = None
|
||||||
|
|
||||||
# An argument which can be passed to entries on the command line, in lieu of
|
# An argument which can be passed to entries on the command line, in lieu of
|
||||||
# device-tree properties.
|
# device-tree properties.
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
# Test for the Entry class
|
# Test for the Entry class
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
|
import importlib
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
|
@ -32,11 +33,7 @@ class TestEntry(unittest.TestCase):
|
||||||
def _ReloadEntry(self):
|
def _ReloadEntry(self):
|
||||||
global entry
|
global entry
|
||||||
if entry:
|
if entry:
|
||||||
if sys.version_info[0] >= 3:
|
|
||||||
import importlib
|
|
||||||
importlib.reload(entry)
|
importlib.reload(entry)
|
||||||
else:
|
|
||||||
reload(entry)
|
|
||||||
else:
|
else:
|
||||||
from binman import entry
|
from binman import entry
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,9 @@
|
||||||
from binman.entry import Entry
|
from binman.entry import Entry
|
||||||
from binman.etype.blob import Entry_blob
|
from binman.etype.blob import Entry_blob
|
||||||
|
|
||||||
|
# This is imported if needed
|
||||||
|
state = None
|
||||||
|
|
||||||
class Entry_blob_dtb(Entry_blob):
|
class Entry_blob_dtb(Entry_blob):
|
||||||
"""A blob that holds a device tree
|
"""A blob that holds a device tree
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,9 @@
|
||||||
|
|
||||||
from binman.etype.section import Entry_section
|
from binman.etype.section import Entry_section
|
||||||
|
|
||||||
|
# This is imported if needed
|
||||||
|
state = None
|
||||||
|
|
||||||
class Entry_blob_phase(Entry_section):
|
class Entry_blob_phase(Entry_section):
|
||||||
"""Section that holds a phase binary
|
"""Section that holds a phase binary
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,9 @@ from binman.cbfs_util import CbfsWriter
|
||||||
from binman.entry import Entry
|
from binman.entry import Entry
|
||||||
from dtoc import fdt_util
|
from dtoc import fdt_util
|
||||||
|
|
||||||
|
# This is imported if needed
|
||||||
|
state = None
|
||||||
|
|
||||||
class Entry_cbfs(Entry):
|
class Entry_cbfs(Entry):
|
||||||
"""Coreboot Filesystem (CBFS)
|
"""Coreboot Filesystem (CBFS)
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,11 @@ from patman import tout
|
||||||
FDTMAP_MAGIC = b'_FDTMAP_'
|
FDTMAP_MAGIC = b'_FDTMAP_'
|
||||||
FDTMAP_HDR_LEN = 16
|
FDTMAP_HDR_LEN = 16
|
||||||
|
|
||||||
|
# These is imported if needed
|
||||||
|
Fdt = None
|
||||||
|
libfdt = None
|
||||||
|
state = None
|
||||||
|
|
||||||
def LocateFdtmap(data):
|
def LocateFdtmap(data):
|
||||||
"""Search an image for an fdt map
|
"""Search an image for an fdt map
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@ from binman.etype.section import Entry_section
|
||||||
from dtoc import fdt_util
|
from dtoc import fdt_util
|
||||||
from patman import tools
|
from patman import tools
|
||||||
|
|
||||||
|
# This is imported if needed
|
||||||
|
state = None
|
||||||
|
|
||||||
class Entry_files(Entry_section):
|
class Entry_files(Entry_section):
|
||||||
"""A set of files arranged in a section
|
"""A set of files arranged in a section
|
||||||
|
|
|
@ -163,6 +163,7 @@ class Entry_section(Entry):
|
||||||
self._sort = False
|
self._sort = False
|
||||||
self._skip_at_start = None
|
self._skip_at_start = None
|
||||||
self._end_4gb = False
|
self._end_4gb = False
|
||||||
|
self._ignore_missing = False
|
||||||
|
|
||||||
def ReadNode(self):
|
def ReadNode(self):
|
||||||
"""Read properties from the section node"""
|
"""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 binman.etype.blob_dtb import Entry_blob_dtb
|
||||||
from patman import tools
|
from patman import tools
|
||||||
|
|
||||||
|
# This is imported if needed
|
||||||
|
state = None
|
||||||
|
|
||||||
class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
|
class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
|
||||||
"""A U-Boot device tree file, with the microcode removed
|
"""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 "
|
self.assertIn("Section '/binman': Size 0x7 (7) does not match "
|
||||||
"align-size 0x8 (8)", str(e.exception))
|
"align-size 0x8 (8)", str(e.exception))
|
||||||
|
|
||||||
def testPackAlignPowerOf2(self):
|
def testPackAlignPowerOf2Inv(self):
|
||||||
"""Test that invalid image alignment is detected"""
|
"""Test that invalid image alignment is detected"""
|
||||||
with self.assertRaises(ValueError) as e:
|
with self.assertRaises(ValueError) as e:
|
||||||
self._DoTestFile('020_pack_inv_image_align_power2.dts')
|
self._DoTestFile('020_pack_inv_image_align_power2.dts')
|
||||||
|
@ -3714,7 +3714,7 @@ class TestFunctional(unittest.TestCase):
|
||||||
err = stderr.getvalue()
|
err = stderr.getvalue()
|
||||||
self.assertRegex(err, "Image 'main-section'.*missing.*: intel-ifwi")
|
self.assertRegex(err, "Image 'main-section'.*missing.*: intel-ifwi")
|
||||||
|
|
||||||
def testPackOverlap(self):
|
def testPackOverlapZero(self):
|
||||||
"""Test that zero-size overlapping regions are ignored"""
|
"""Test that zero-size overlapping regions are ignored"""
|
||||||
self._DoTestFile('160_pack_overlap_zero.dts')
|
self._DoTestFile('160_pack_overlap_zero.dts')
|
||||||
|
|
||||||
|
@ -4095,13 +4095,6 @@ class TestFunctional(unittest.TestCase):
|
||||||
self.assertIn("Generator node requires 'fit,fdt-list' property",
|
self.assertIn("Generator node requires 'fit,fdt-list' property",
|
||||||
str(e.exception))
|
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):
|
def testFitFdtMissing(self):
|
||||||
"""Test handling of a missing 'default-dt' entry arg"""
|
"""Test handling of a missing 'default-dt' entry arg"""
|
||||||
entry_args = {
|
entry_args = {
|
||||||
|
@ -4986,16 +4979,6 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
|
||||||
self.assertEqual('rot-cert', fent.fip_type)
|
self.assertEqual('rot-cert', fent.fip_type)
|
||||||
self.assertEqual(b'aa', fent.data)
|
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):
|
def testFipNoType(self):
|
||||||
"""FIP with an entry of an unknown type"""
|
"""FIP with an entry of an unknown type"""
|
||||||
with self.assertRaises(ValueError) as e:
|
with self.assertRaises(ValueError) as e:
|
||||||
|
|
|
@ -74,6 +74,7 @@ def CreateBuildmanConfigFile(config_fname):
|
||||||
print('''[toolchain]
|
print('''[toolchain]
|
||||||
# name = path
|
# name = path
|
||||||
# e.g. x86 = /opt/gcc-4.6.3-nolibc/x86_64-linux
|
# e.g. x86 = /opt/gcc-4.6.3-nolibc/x86_64-linux
|
||||||
|
other = /
|
||||||
|
|
||||||
[toolchain-prefix]
|
[toolchain-prefix]
|
||||||
# name = path to prefix
|
# name = path to prefix
|
||||||
|
|
|
@ -1763,7 +1763,7 @@ class Builder:
|
||||||
if self.num_threads:
|
if self.num_threads:
|
||||||
self.queue.put(job)
|
self.queue.put(job)
|
||||||
else:
|
else:
|
||||||
results = self._single_builder.RunJob(job)
|
self._single_builder.RunJob(job)
|
||||||
|
|
||||||
if self.num_threads:
|
if self.num_threads:
|
||||||
term = threading.Thread(target=self.queue.join)
|
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
|
C=val to set the value of C (val must have quotes if C is
|
||||||
a string Kconfig)
|
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_lines = adjust_cfg_lines(lines, adjust_cfg)
|
||||||
out = '\n'.join(out_lines) + '\n'
|
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):
|
def convert_list_to_dict(adjust_cfg_list):
|
||||||
"""Convert a list of config changes into the dict used by adjust_cfg_file()
|
"""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:
|
Returns:
|
||||||
str: None if OK, else an error string listing the problems
|
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)
|
bad_cfgs = check_cfg_lines(lines, adjust_cfg)
|
||||||
if bad_cfgs:
|
if bad_cfgs:
|
||||||
out = [f'{cfg:20} {line}' for cfg, line in 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
|
# Each commit has a config and make
|
||||||
self.assertEqual(self._make_calls, len(boards) * self._commits * 2)
|
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):
|
def testMrproper(self):
|
||||||
"""The -f flag should force a rebuild"""
|
"""The -f flag should force a rebuild"""
|
||||||
self._RunControl('-b', TEST_BRANCH, '-m', '-o', self._output_dir)
|
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)
|
VERSION = (14, 1, 0)
|
||||||
|
|
||||||
|
# pylint: disable=E1101
|
||||||
|
|
||||||
# File layout:
|
# File layout:
|
||||||
#
|
#
|
||||||
|
|
|
@ -30,8 +30,8 @@ from patman import terminal
|
||||||
from patman import test_util
|
from patman import test_util
|
||||||
|
|
||||||
def RunTests(skip_net_tests, verboose, args):
|
def RunTests(skip_net_tests, verboose, args):
|
||||||
import func_test
|
from buildman import func_test
|
||||||
import test
|
from buildman import test
|
||||||
import doctest
|
import doctest
|
||||||
|
|
||||||
result = unittest.TestResult()
|
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 struct
|
||||||
import unittest
|
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 dtb_platdata
|
||||||
from dtoc import fdt
|
from dtoc import fdt
|
||||||
from dtoc import fdt_util
|
from dtoc import fdt_util
|
||||||
from dtoc import src_scan
|
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 conv_name_to_c
|
||||||
from dtoc.src_scan import get_compat_name
|
from dtoc.src_scan import get_compat_name
|
||||||
from patman import test_util
|
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
|
||||||
from dtoc import fdt_util
|
from dtoc import fdt_util
|
||||||
from dtoc.fdt_util import fdt32_to_cpu, fdt64_to_cpu
|
from dtoc.fdt_util import fdt32_to_cpu, fdt64_to_cpu
|
||||||
from fdt import Type, BytesToValue
|
from dtoc.fdt import Type, BytesToValue
|
||||||
import libfdt
|
import libfdt
|
||||||
from patman import command
|
from patman import command
|
||||||
from patman import test_util
|
from patman import test_util
|
||||||
|
@ -119,9 +119,9 @@ class TestFdt(unittest.TestCase):
|
||||||
"""Test that packing a device tree works"""
|
"""Test that packing a device tree works"""
|
||||||
self.dtb.Pack()
|
self.dtb.Pack()
|
||||||
|
|
||||||
def testGetFdt(self):
|
def testGetFdtRaw(self):
|
||||||
"""Tetst that we can access the raw device-tree data"""
|
"""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):
|
def testGetProps(self):
|
||||||
"""Tests obtaining a list of properties"""
|
"""Tests obtaining a list of properties"""
|
||||||
|
|
|
@ -339,7 +339,7 @@ def read_file(fname, as_lines=True, skip_unicode=False):
|
||||||
return inf.read()
|
return inf.read()
|
||||||
except UnicodeDecodeError as e:
|
except UnicodeDecodeError as e:
|
||||||
if not skip_unicode:
|
if not skip_unicode:
|
||||||
raises
|
raise
|
||||||
print("Failed on file %s': %s" % (fname, e))
|
print("Failed on file %s': %s" % (fname, e))
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -790,9 +790,6 @@ class KconfigParser:
|
||||||
actlog = "'%s' is the same as the define in Kconfig. Do nothing." \
|
actlog = "'%s' is the same as the define in Kconfig. Do nothing." \
|
||||||
% value
|
% value
|
||||||
log_color = COLOR_LIGHT_PURPLE
|
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:
|
else:
|
||||||
sys.exit('Internal Error. This should not happen.')
|
sys.exit('Internal Error. This should not happen.')
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,7 @@ def check_patch_parse(checkpatch_output, verbose=False):
|
||||||
Returns:
|
Returns:
|
||||||
namedtuple containing:
|
namedtuple containing:
|
||||||
ok: False=failure, True=ok
|
ok: False=failure, True=ok
|
||||||
problems: List of problems, each a dict:
|
problems (list of problems): each a dict:
|
||||||
'type'; error or warning
|
'type'; error or warning
|
||||||
'msg': text message
|
'msg': text message
|
||||||
'file' : filename
|
'file' : filename
|
||||||
|
@ -252,6 +252,8 @@ def check_patches(verbose, args):
|
||||||
if (len(result.problems) != result.errors + result.warnings +
|
if (len(result.problems) != result.errors + result.warnings +
|
||||||
result.checks):
|
result.checks):
|
||||||
print("Internal error: some problems lost")
|
print("Internal error: some problems lost")
|
||||||
|
# Python seems to get confused by this
|
||||||
|
# pylint: disable=E1133
|
||||||
for item in result.problems:
|
for item in result.problems:
|
||||||
sys.stderr.write(
|
sys.stderr.write(
|
||||||
get_warning_msg(col, item.get('type', '<unknown>'),
|
get_warning_msg(col, item.get('type', '<unknown>'),
|
||||||
|
|
|
@ -17,13 +17,6 @@ class CommandResult:
|
||||||
return_code: Return code from command
|
return_code: Return code from command
|
||||||
exception: Exception received, or None if all ok
|
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,
|
def __init__(self, stdout='', stderr='', combined='', return_code=0,
|
||||||
exception=None):
|
exception=None):
|
||||||
self.stdout = stdout
|
self.stdout = stdout
|
||||||
|
@ -72,6 +65,7 @@ def run_pipe(pipe_list, infile=None, outfile=None,
|
||||||
"""
|
"""
|
||||||
if test_result:
|
if test_result:
|
||||||
if hasattr(test_result, '__call__'):
|
if hasattr(test_result, '__call__'):
|
||||||
|
# pylint: disable=E1102
|
||||||
result = test_result(pipe_list=pipe_list)
|
result = test_result(pipe_list=pipe_list)
|
||||||
if result:
|
if result:
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -31,7 +31,7 @@ class Commit:
|
||||||
"""
|
"""
|
||||||
def __init__(self, hash):
|
def __init__(self, hash):
|
||||||
self.hash = hash
|
self.hash = hash
|
||||||
self.subject = None
|
self.subject = ''
|
||||||
self.tags = []
|
self.tags = []
|
||||||
self.changes = {}
|
self.changes = {}
|
||||||
self.cc_list = []
|
self.cc_list = []
|
||||||
|
|
|
@ -113,7 +113,7 @@ class Popen(subprocess.Popen):
|
||||||
return b''
|
return b''
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def communicate_filter(self, output):
|
def communicate_filter(self, output, input_buf=''):
|
||||||
"""Interact with process: Read data from stdout and stderr.
|
"""Interact with process: Read data from stdout and stderr.
|
||||||
|
|
||||||
This method runs until end-of-file is reached, then waits for the
|
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
|
# Flush stdio buffer. This might block, if the user has
|
||||||
# been writing to .stdin in an uncontrolled fashion.
|
# been writing to .stdin in an uncontrolled fashion.
|
||||||
self.stdin.flush()
|
self.stdin.flush()
|
||||||
if input:
|
if input_buf:
|
||||||
write_set.append(self.stdin)
|
write_set.append(self.stdin)
|
||||||
else:
|
else:
|
||||||
self.stdin.close()
|
self.stdin.close()
|
||||||
|
@ -195,10 +195,10 @@ class Popen(subprocess.Popen):
|
||||||
# When select has indicated that the file is writable,
|
# When select has indicated that the file is writable,
|
||||||
# we can write up to PIPE_BUF bytes without risk
|
# we can write up to PIPE_BUF bytes without risk
|
||||||
# blocking. POSIX defines PIPE_BUF >= 512
|
# 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)
|
bytes_written = os.write(self.stdin.fileno(), chunk)
|
||||||
input_offset += bytes_written
|
input_offset += bytes_written
|
||||||
if input_offset >= len(input):
|
if input_offset >= len(input_buf):
|
||||||
self.stdin.close()
|
self.stdin.close()
|
||||||
write_set.remove(self.stdin)
|
write_set.remove(self.stdin)
|
||||||
|
|
||||||
|
@ -240,16 +240,6 @@ class Popen(subprocess.Popen):
|
||||||
stderr = self.convert_data(stderr)
|
stderr = self.convert_data(stderr)
|
||||||
combined = self.convert_data(combined)
|
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()
|
self.wait()
|
||||||
return (stdout, stderr, combined)
|
return (stdout, stderr, combined)
|
||||||
|
|
||||||
|
|
|
@ -341,6 +341,8 @@ Changes in v2:
|
||||||
tools.write_file(path, text, binary=False)
|
tools.write_file(path, text, binary=False)
|
||||||
index = self.repo.index
|
index = self.repo.index
|
||||||
index.add(fname)
|
index.add(fname)
|
||||||
|
# pylint doesn't seem to find this
|
||||||
|
# pylint: disable=E1101
|
||||||
author = pygit2.Signature('Test user', 'test@email.com')
|
author = pygit2.Signature('Test user', 'test@email.com')
|
||||||
committer = author
|
committer = author
|
||||||
tree = index.write_tree()
|
tree = index.write_tree()
|
||||||
|
@ -363,6 +365,8 @@ Changes in v2:
|
||||||
self.repo = repo
|
self.repo = repo
|
||||||
new_tree = repo.TreeBuilder().write()
|
new_tree = repo.TreeBuilder().write()
|
||||||
|
|
||||||
|
# pylint doesn't seem to find this
|
||||||
|
# pylint: disable=E1101
|
||||||
author = pygit2.Signature('Test user', 'test@email.com')
|
author = pygit2.Signature('Test user', 'test@email.com')
|
||||||
committer = author
|
committer = author
|
||||||
_ = repo.create_commit('HEAD', author, committer, 'Created master',
|
_ = repo.create_commit('HEAD', author, committer, 'Created master',
|
||||||
|
@ -414,6 +418,8 @@ better than before''')
|
||||||
first_target = repo.revparse_single('HEAD')
|
first_target = repo.revparse_single('HEAD')
|
||||||
|
|
||||||
target = repo.revparse_single('HEAD~2')
|
target = repo.revparse_single('HEAD~2')
|
||||||
|
# pylint doesn't seem to find this
|
||||||
|
# pylint: disable=E1101
|
||||||
repo.reset(target.oid, pygit2.GIT_CHECKOUT_FORCE)
|
repo.reset(target.oid, pygit2.GIT_CHECKOUT_FORCE)
|
||||||
self.make_commit_with_file('video: Some video improvements', '''
|
self.make_commit_with_file('video: Some video improvements', '''
|
||||||
Fix up the video so that
|
Fix up the video so that
|
||||||
|
@ -459,6 +465,8 @@ complicated as possible''')
|
||||||
"""Test creating patches from a branch"""
|
"""Test creating patches from a branch"""
|
||||||
repo = self.make_git_tree()
|
repo = self.make_git_tree()
|
||||||
target = repo.lookup_reference('refs/heads/first')
|
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)
|
self.repo.checkout(target, strategy=pygit2.GIT_CHECKOUT_FORCE)
|
||||||
control.setup()
|
control.setup()
|
||||||
try:
|
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"""
|
"""Test CountCommitsToBranch when there is no upstream"""
|
||||||
repo = self.make_git_tree()
|
repo = self.make_git_tree()
|
||||||
target = repo.lookup_reference('refs/heads/base')
|
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)
|
self.repo.checkout(target, strategy=pygit2.GIT_CHECKOUT_FORCE)
|
||||||
|
|
||||||
# Check that it can detect the current branch
|
# Check that it can detect the current branch
|
||||||
|
|
|
@ -597,7 +597,7 @@ class PatchStream:
|
||||||
if 'prefix' in self.series:
|
if 'prefix' in self.series:
|
||||||
parts.append(self.series['prefix'])
|
parts.append(self.series['prefix'])
|
||||||
if 'postfix' in self.series:
|
if 'postfix' in self.series:
|
||||||
parts.append(self.serties['postfix'])
|
parts.append(self.series['postfix'])
|
||||||
if 'version' in self.series:
|
if 'version' in self.series:
|
||||||
parts.append("v%s" % self.series['version'])
|
parts.append("v%s" % self.series['version'])
|
||||||
|
|
||||||
|
|
|
@ -122,8 +122,7 @@ class Series(dict):
|
||||||
cc_list = list(self._generated_cc[commit.patch])
|
cc_list = list(self._generated_cc[commit.patch])
|
||||||
for email in sorted(set(cc_list) - to_set - cc_set):
|
for email in sorted(set(cc_list) - to_set - cc_set):
|
||||||
if email == None:
|
if email == None:
|
||||||
email = col.build(col.YELLOW, "<alias '%s' not found>"
|
email = col.build(col.YELLOW, '<alias not found>')
|
||||||
% tag)
|
|
||||||
if email:
|
if email:
|
||||||
print(' Cc: ', email)
|
print(' Cc: ', email)
|
||||||
print
|
print
|
||||||
|
|
|
@ -200,12 +200,12 @@ def CreatePatmanConfigFile(gitutil, config_fname):
|
||||||
"""
|
"""
|
||||||
name = gitutil.get_default_user_name()
|
name = gitutil.get_default_user_name()
|
||||||
if name == None:
|
if name == None:
|
||||||
name = raw_input("Enter name: ")
|
name = input("Enter name: ")
|
||||||
|
|
||||||
email = gitutil.get_default_user_email()
|
email = gitutil.get_default_user_email()
|
||||||
|
|
||||||
if email == None:
|
if email == None:
|
||||||
email = raw_input("Enter email: ")
|
email = input("Enter email: ")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
f = open(config_fname, 'w')
|
f = open(config_fname, 'w')
|
||||||
|
|
|
@ -62,8 +62,8 @@ def prepare_output_dir(dirname, preserve=False):
|
||||||
try:
|
try:
|
||||||
os.makedirs(outdir)
|
os.makedirs(outdir)
|
||||||
except OSError as err:
|
except OSError as err:
|
||||||
raise CmdError("Cannot make output directory '%s': '%s'" %
|
raise ValueError(
|
||||||
(outdir, err.strerror))
|
f"Cannot make output directory 'outdir': 'err.strerror'")
|
||||||
tout.debug("Using output directory '%s'" % outdir)
|
tout.debug("Using output directory '%s'" % outdir)
|
||||||
else:
|
else:
|
||||||
outdir = tempfile.mkdtemp(prefix='binman.')
|
outdir = tempfile.mkdtemp(prefix='binman.')
|
||||||
|
@ -160,7 +160,7 @@ def get_input_filename_glob(pattern):
|
||||||
A list of matching files in all input directories
|
A list of matching files in all input directories
|
||||||
"""
|
"""
|
||||||
if not indir:
|
if not indir:
|
||||||
return glob.glob(fname)
|
return glob.glob(pattern)
|
||||||
files = []
|
files = []
|
||||||
for dirname in indir:
|
for dirname in indir:
|
||||||
pathname = os.path.join(dirname, pattern)
|
pathname = os.path.join(dirname, pattern)
|
||||||
|
@ -201,7 +201,7 @@ def path_has_file(path_spec, fname):
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def get_host_compile_tool(name):
|
def get_host_compile_tool(env, name):
|
||||||
"""Get the host-specific version for a compile tool
|
"""Get the host-specific version for a compile tool
|
||||||
|
|
||||||
This checks the environment variables that specify which version of
|
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)
|
name, extra_args = get_target_compile_tool(name)
|
||||||
args = tuple(extra_args) + args
|
args = tuple(extra_args) + args
|
||||||
elif for_host:
|
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
|
args = tuple(extra_args) + args
|
||||||
name = os.path.expanduser(name) # Expand paths containing ~
|
name = os.path.expanduser(name) # Expand paths containing ~
|
||||||
all_args = (name,) + args
|
all_args = (name,) + args
|
||||||
|
|
Loading…
Add table
Reference in a new issue