buildman: Correct most pylint warnings in builderthread

Fix the easy warnings in this file.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass
2023-07-19 17:49:09 -06:00
parent f06d333dc9
commit 606e54357f

View File

@@ -2,6 +2,12 @@
# Copyright (c) 2014 Google, Inc
#
"""Implementation the bulider threads
This module provides the BuilderThread class, which handles calling the builder
based on the jobs provided.
"""
import errno
import glob
import os
@@ -30,12 +36,12 @@ def mkdir(dirname, parents = False):
except OSError as err:
if err.errno == errno.EEXIST:
if os.path.realpath('.') == os.path.realpath(dirname):
print("Cannot create the current working directory '%s'!" % dirname)
print(f"Cannot create the current working directory '{dirname}'!")
sys.exit(1)
pass
else:
raise
# pylint: disable=R0903
class BuilderJob:
"""Holds information about a job to be performed by a thread
@@ -107,6 +113,7 @@ class BuilderThread(threading.Thread):
self.mrproper = mrproper
self.per_board_out_dir = per_board_out_dir
self.test_exception = test_exception
self.toolchain = None
def make(self, commit, brd, stage, cwd, *args, **kwargs):
"""Run 'make' on a particular commit and board.
@@ -182,9 +189,9 @@ class BuilderThread(threading.Thread):
not result.already_done)
if result.already_done:
# Get the return code from that build and use it
with open(done_file, 'r') as fd:
with open(done_file, 'r', encoding='utf-8') as outf:
try:
result.return_code = int(fd.readline())
result.return_code = int(outf.readline())
except ValueError:
# The file may be empty due to running out of disk space.
# Try a rebuild
@@ -240,11 +247,11 @@ class BuilderThread(threading.Thread):
# Symlinks can confuse U-Boot's Makefile since
# we may use '..' in our path, so remove them.
out_dir = os.path.realpath(out_dir)
args.append('O=%s' % out_dir)
args.append(f'O={out_dir}')
cwd = None
src_dir = os.getcwd()
else:
args.append('O=%s' % out_rel_dir)
args.append(f'O={out_rel_dir}')
if self.builder.verbose_build:
args.append('V=1')
else:
@@ -260,7 +267,7 @@ class BuilderThread(threading.Thread):
args.append('NO_LTO=1')
if self.builder.reproducible_builds:
args.append('SOURCE_DATE_EPOCH=0')
config_args = ['%s_defconfig' % brd.target]
config_args = [f'{brd.target}_defconfig']
config_out = ''
args.extend(self.builder.toolchains.GetMakeArguments(brd))
args.extend(self.toolchain.MakeArgs())
@@ -270,7 +277,6 @@ class BuilderThread(threading.Thread):
# SPL image. If we don't remove it (i.e. see do_config and
# self.mrproper below) then it will appear to be the output of
# this build, even if it does not produce SPL images.
build_dir = self.builder.get_build_dir(commit_upto, brd.target)
for elf in BASE_ELF_FILENAMES:
fname = os.path.join(out_dir, elf)
if os.path.exists(fname):
@@ -317,7 +323,7 @@ class BuilderThread(threading.Thread):
result.cmd_list = cmd_list
else:
result.return_code = 1
result.stderr = 'No tool chain for %s\n' % brd.arch
result.stderr = f'No tool chain for {brd.arch}\n'
result.already_done = False
result.toolchain = self.toolchain
@@ -352,15 +358,15 @@ class BuilderThread(threading.Thread):
mkdir(build_dir)
outfile = os.path.join(build_dir, 'log')
with open(outfile, 'w') as fd:
with open(outfile, 'w', encoding='utf-8') as outf:
if result.stdout:
fd.write(result.stdout)
outf.write(result.stdout)
errfile = self.builder.get_err_file(result.commit_upto,
result.brd.target)
if result.stderr:
with open(errfile, 'w') as fd:
fd.write(result.stderr)
with open(errfile, 'w', encoding='utf-8') as outf:
outf.write(result.stderr)
elif os.path.exists(errfile):
os.remove(errfile)
@@ -372,43 +378,44 @@ class BuilderThread(threading.Thread):
# Write the build result and toolchain information.
done_file = self.builder.get_done_file(result.commit_upto,
result.brd.target)
with open(done_file, 'w') as fd:
with open(done_file, 'w', encoding='utf-8') as outf:
if maybe_aborted:
# Special code to indicate we need to retry
fd.write('%s' % RETURN_CODE_RETRY)
outf.write(f'{RETURN_CODE_RETRY}')
else:
fd.write('%s' % result.return_code)
with open(os.path.join(build_dir, 'toolchain'), 'w') as fd:
print('gcc', result.toolchain.gcc, file=fd)
print('path', result.toolchain.path, file=fd)
print('cross', result.toolchain.cross, file=fd)
print('arch', result.toolchain.arch, file=fd)
fd.write('%s' % result.return_code)
outf.write(f'{result.return_code}')
with open(os.path.join(build_dir, 'toolchain'), 'w',
encoding='utf-8') as outf:
print('gcc', result.toolchain.gcc, file=outf)
print('path', result.toolchain.path, file=outf)
print('cross', result.toolchain.cross, file=outf)
print('arch', result.toolchain.arch, file=outf)
outf.write(f'{result.return_code}')
# Write out the image and function size information and an objdump
env = result.toolchain.MakeEnvironment(self.builder.full_path)
with open(os.path.join(build_dir, 'out-env'), 'wb') as fd:
with open(os.path.join(build_dir, 'out-env'), 'wb') as outf:
for var in sorted(env.keys()):
fd.write(b'%s="%s"' % (var, env[var]))
outf.write(b'%s="%s"' % (var, env[var]))
with open(os.path.join(build_dir, 'out-cmd'), 'w',
encoding='utf-8') as fd:
encoding='utf-8') as outf:
for cmd in result.cmd_list:
print(' '.join(cmd), file=fd)
print(' '.join(cmd), file=outf)
lines = []
for fname in BASE_ELF_FILENAMES:
cmd = ['%snm' % self.toolchain.cross, '--size-sort', fname]
cmd = [f'{self.toolchain.cross}nm', '--size-sort', fname]
nm_result = command.run_pipe([cmd], capture=True,
capture_stderr=True, cwd=result.out_dir,
raise_on_error=False, env=env)
if nm_result.stdout:
nm = self.builder.get_func_sizes_file(result.commit_upto,
result.brd.target, fname)
with open(nm, 'w') as fd:
print(nm_result.stdout, end=' ', file=fd)
nm_fname = self.builder.get_func_sizes_file(
result.commit_upto, result.brd.target, fname)
with open(nm_fname, 'w', encoding='utf-8') as outf:
print(nm_result.stdout, end=' ', file=outf)
cmd = ['%sobjdump' % self.toolchain.cross, '-h', fname]
cmd = [f'{self.toolchain.cross}objdump', '-h', fname]
dump_result = command.run_pipe([cmd], capture=True,
capture_stderr=True, cwd=result.out_dir,
raise_on_error=False, env=env)
@@ -416,14 +423,14 @@ class BuilderThread(threading.Thread):
if dump_result.stdout:
objdump = self.builder.get_objdump_file(result.commit_upto,
result.brd.target, fname)
with open(objdump, 'w') as fd:
print(dump_result.stdout, end=' ', file=fd)
with open(objdump, 'w', encoding='utf-8') as outf:
print(dump_result.stdout, end=' ', file=outf)
for line in dump_result.stdout.splitlines():
fields = line.split()
if len(fields) > 5 and fields[1] == '.rodata':
rodata_size = fields[2]
cmd = ['%ssize' % self.toolchain.cross, fname]
cmd = [f'{self.toolchain.cross}size', fname]
size_result = command.run_pipe([cmd], capture=True,
capture_stderr=True, cwd=result.out_dir,
raise_on_error=False, env=env)
@@ -432,13 +439,12 @@ class BuilderThread(threading.Thread):
rodata_size)
# Extract the environment from U-Boot and dump it out
cmd = ['%sobjcopy' % self.toolchain.cross, '-O', 'binary',
cmd = [f'{self.toolchain.cross}objcopy', '-O', 'binary',
'-j', '.rodata.default_environment',
'env/built-in.o', 'uboot.env']
command.run_pipe([cmd], capture=True,
capture_stderr=True, cwd=result.out_dir,
raise_on_error=False, env=env)
ubootenv = os.path.join(result.out_dir, 'uboot.env')
if not work_in_output:
self.copy_files(result.out_dir, build_dir, '', ['uboot.env'])
@@ -446,11 +452,11 @@ class BuilderThread(threading.Thread):
# of binutil's 'size' utility, but it omits the header line and
# adds an additional hex value at the end of each line for the
# rodata size
if len(lines):
if lines:
sizes = self.builder.get_sizes_file(result.commit_upto,
result.brd.target)
with open(sizes, 'w') as fd:
print('\n'.join(lines), file=fd)
with open(sizes, 'w', encoding='utf-8') as outf:
print('\n'.join(lines), file=outf)
if not work_in_output:
# Write out the configuration files, with a special case for SPL
@@ -485,7 +491,7 @@ class BuilderThread(threading.Thread):
if dirname:
base, ext = os.path.splitext(target)
if ext:
target = '%s-%s%s' % (base, dirname, ext)
target = f'{base}-{dirname}{ext}'
shutil.copy(fname, os.path.join(build_dir, target))
def _send_result(self, result):
@@ -598,7 +604,8 @@ class BuilderThread(threading.Thread):
job = self.builder.queue.get()
try:
self.run_job(job)
except Exception as e:
print('Thread exception (use -T0 to run without threads):', e)
self.builder.thread_exceptions.append(e)
except Exception as exc:
print('Thread exception (use -T0 to run without threads):',
exc)
self.builder.thread_exceptions.append(exc)
self.builder.queue.task_done()