res = self.fetch(meth)
except urllib.error.URLError as uerr:
message = uerr.reason
- print(col.Color(col.RED, f'- {message}'))
+ print(col.build(col.RED, f'- {message}'))
except ValueError as exc:
print(f'Exception: {exc}')
if skip_present and self.is_present():
return PRESENT
- print(col.Color(col.YELLOW, 'Fetch: %s' % self.name))
+ print(col.build(col.YELLOW, 'Fetch: %s' % self.name))
if method == FETCH_ANY:
for try_method in range(1, FETCH_COUNT):
print(f'- trying method: {FETCH_NAMES[try_method]}')
True on success, False on failure
"""
def show_status(color, prompt, names):
- print(col.Color(
+ print(col.build(
color, f'{prompt}:%s{len(names):2}: %s' %
(' ' * (16 - len(prompt)), ' '.join(names))))
name_list = Bintool.get_tool_list()
if names_to_fetch[0] == 'missing':
skip_present = True
- print(col.Color(col.YELLOW,
+ print(col.build(col.YELLOW,
'Fetching tools: %s' % ' '.join(name_list)))
status = collections.defaultdict(list)
for name in name_list:
# Display separate counts for ok, warned and fail
ok = self.upto - self.warned - self.fail
- line = '\r' + self.col.Color(self.col.GREEN, '%5d' % ok)
- line += self.col.Color(self.col.YELLOW, '%5d' % self.warned)
- line += self.col.Color(self.col.RED, '%5d' % self.fail)
+ line = '\r' + self.col.build(self.col.GREEN, '%5d' % ok)
+ line += self.col.build(self.col.YELLOW, '%5d' % self.warned)
+ line += self.col.build(self.col.RED, '%5d' % self.fail)
line += ' /%-5d ' % self.count
remaining = self.count - self.upto
if remaining:
- line += self.col.Color(self.col.MAGENTA, ' -%-5d ' % remaining)
+ line += self.col.build(self.col.MAGENTA, ' -%-5d ' % remaining)
else:
line += ' ' * 8
arch = board_dict[target].arch
else:
arch = 'unknown'
- str = self.col.Color(color, ' ' + target)
+ str = self.col.build(color, ' ' + target)
if not arch in done_arch:
- str = ' %s %s' % (self.col.Color(color, char), str)
+ str = ' %s %s' % (self.col.build(color, char), str)
done_arch[arch] = True
if not arch in arch_list:
arch_list[arch] = str
color = self.col.RED if num > 0 else self.col.GREEN
if num == 0:
return '0'
- return self.col.Color(color, str(num))
+ return self.col.build(color, str(num))
def ResetResultSummary(self, board_selected):
"""Reset the results summary ready for use.
args = [self.ColourNum(x) for x in args]
indent = ' ' * 15
Tprint('%s%s: add: %s/%s, grow: %s/%s bytes: %s/%s (%s)' %
- tuple([indent, self.col.Color(self.col.YELLOW, fname)] + args))
+ tuple([indent, self.col.build(self.col.YELLOW, fname)] + args))
Tprint('%s %-38s %7s %7s %+7s' % (indent, 'function', 'old', 'new',
'delta'))
for diff, name in delta:
names = [board.target for board in line.boards]
board_str = ' '.join(names) if names else ''
if board_str:
- out = self.col.Color(colour, line.char + '(')
- out += self.col.Color(self.col.MAGENTA, board_str,
+ out = self.col.build(colour, line.char + '(')
+ out += self.col.build(self.col.MAGENTA, board_str,
bright=False)
- out += self.col.Color(colour, ') %s' % line.errline)
+ out += self.col.build(colour, ') %s' % line.errline)
else:
- out = self.col.Color(colour, line.char + line.errline)
+ out = self.col.build(colour, line.char + line.errline)
out_list.append(out)
Tprint('\n'.join(out_list))
self._error_lines += 1
if commits:
for upto in range(0, len(series.commits), options.step):
commit = series.commits[upto]
- print(' ', col.Color(col.YELLOW, commit.hash[:8], bright=False), end=' ')
+ print(' ', col.build(col.YELLOW, commit.hash[:8], bright=False), end=' ')
print(commit.subject)
print()
for arg in why_selected:
len(why_selected['all'])))
if board_warnings:
for warning in board_warnings:
- print(col.Color(col.YELLOW, warning))
+ print(col.build(col.YELLOW, warning))
def ShowToolchainPrefix(boards, toolchains):
"""Show information about a the tool chain used by one or more boards
if options.fetch_arch:
if options.fetch_arch == 'list':
sorted_list = toolchains.ListArchs()
- print(col.Color(col.BLUE, 'Available architectures: %s\n' %
+ print(col.build(col.BLUE, 'Available architectures: %s\n' %
' '.join(sorted_list)))
return 0
else:
fetch_arch = options.fetch_arch
if fetch_arch == 'all':
fetch_arch = ','.join(toolchains.ListArchs())
- print(col.Color(col.CYAN, '\nDownloading toolchains: %s' %
+ print(col.build(col.CYAN, '\nDownloading toolchains: %s' %
fetch_arch))
for arch in fetch_arch.split(','):
print()
return 0
if options.incremental:
- print(col.Color(col.RED,
+ print(col.build(col.RED,
'Warning: -I has been removed. See documentation'))
if not options.output_dir:
if options.work_in_output:
- sys.exit(col.Color(col.RED, '-w requires that you specify -o'))
+ sys.exit(col.build(col.RED, '-w requires that you specify -o'))
options.output_dir = '..'
# Work out what subset of the boards we are building
requested_boards)
selected = boards.GetSelected()
if not len(selected):
- sys.exit(col.Color(col.RED, 'No matching boards found'))
+ sys.exit(col.build(col.RED, 'No matching boards found'))
if options.print_prefix:
err = ShowToolchainPrefix(boards, toolchains)
if err:
- sys.exit(col.Color(col.RED, err))
+ sys.exit(col.build(col.RED, err))
return 0
# Work out how many commits to build. We want to build everything on the
count, msg = gitutil.count_commits_in_branch(options.git_dir,
options.branch)
if count is None:
- sys.exit(col.Color(col.RED, msg))
+ sys.exit(col.build(col.RED, msg))
elif count == 0:
- sys.exit(col.Color(col.RED, "Range '%s' has no commits" %
+ sys.exit(col.build(col.RED, "Range '%s' has no commits" %
options.branch))
if msg:
- print(col.Color(col.YELLOW, msg))
+ print(col.build(col.YELLOW, msg))
count += 1 # Build upstream commit also
if not count:
str = ("No commits found to process in branch '%s': "
"set branch's upstream or use -c flag" % options.branch)
- sys.exit(col.Color(col.RED, str))
+ sys.exit(col.build(col.RED, str))
if options.work_in_output:
if len(selected) != 1:
- sys.exit(col.Color(col.RED,
+ sys.exit(col.build(col.RED,
'-w can only be used with a single board'))
if count != 1:
- sys.exit(col.Color(col.RED,
+ sys.exit(col.build(col.RED,
'-w can only be used with a single commit'))
# Read the metadata from the commits. First look at the upstream commit,
col.YELLOW if outcome == OUTCOME_WARN else col.RED)
expect = '%10s: ' % arch
# TODO(sjg@chromium.org): If plus is '', we shouldn't need this
- expect += ' ' + col.Color(expected_colour, plus)
+ expect += ' ' + col.build(expected_colour, plus)
expect += ' '
for board in boards:
- expect += col.Color(expected_colour, ' %s' % board)
+ expect += col.build(expected_colour, ' %s' % board)
self.assertEqual(text, expect)
def _SetupTest(self, echo_lines=False, threads=1, **kwdisplay_args):
new_lines = []
for line in lines:
if boards:
- expect = self._col.Color(colour, prefix + '(')
- expect += self._col.Color(self._col.MAGENTA, boards,
+ expect = self._col.build(colour, prefix + '(')
+ expect += self._col.build(self._col.MAGENTA, boards,
bright=False)
- expect += self._col.Color(colour, ') %s' % line)
+ expect += self._col.build(colour, ') %s' % line)
else:
- expect = self._col.Color(colour, prefix + line)
+ expect = self._col.build(colour, prefix + line)
new_lines.append(expect)
return '\n'.join(new_lines)
self.assertEqual(next(lines).text, '04: %s' % commits[3][1])
if filter_migration_warnings:
expect = '%10s: ' % 'powerpc'
- expect += ' ' + col.Color(col.GREEN, '')
+ expect += ' ' + col.build(col.GREEN, '')
expect += ' '
- expect += col.Color(col.GREEN, ' %s' % 'board2')
- expect += ' ' + col.Color(col.YELLOW, 'w+')
+ expect += col.build(col.GREEN, ' %s' % 'board2')
+ expect += ' ' + col.build(col.YELLOW, 'w+')
expect += ' '
- expect += col.Color(col.YELLOW, ' %s' % 'board3')
+ expect += col.build(col.YELLOW, ' %s' % 'board3')
self.assertEqual(next(lines).text, expect)
else:
self.assertSummary(next(lines).text, 'powerpc', 'w+',
def List(self):
"""List out the selected toolchains for each architecture"""
col = terminal.Color()
- print(col.Color(col.BLUE, 'List of available toolchains (%d):' %
+ print(col.build(col.BLUE, 'List of available toolchains (%d):' %
len(self.toolchains)))
if len(self.toolchains):
for key, value in sorted(self.toolchains.items()):
"""
# Fist get the URL for this architecture
col = terminal.Color()
- print(col.Color(col.BLUE, "Downloading toolchain for arch '%s'" % arch))
+ print(col.build(col.BLUE, "Downloading toolchain for arch '%s'" % arch))
url = self.LocateArchUrl(arch)
if not url:
print(("Cannot find toolchain for arch '%s' - use 'list' to list" %
tarfile, tmpdir = tools.download(url, '.buildman')
if not tarfile:
return 1
- print(col.Color(col.GREEN, 'Unpacking to: %s' % dest), end=' ')
+ print(col.build(col.GREEN, 'Unpacking to: %s' % dest), end=' ')
sys.stdout.flush()
path = self.Unpack(tarfile, dest)
os.remove(tarfile)
print()
# Check that the toolchain works
- print(col.Color(col.GREEN, 'Testing'))
+ print(col.build(col.GREEN, 'Testing'))
dirpath = os.path.join(dest, path)
compiler_fname_list = self.ScanPath(dirpath, True)
if not compiler_fname_list:
print('Could not locate C compiler - fetch failed.')
return 1
if len(compiler_fname_list) != 1:
- print(col.Color(col.RED, 'Warning, ambiguous toolchains: %s' %
+ print(col.build(col.RED, 'Warning, ambiguous toolchains: %s' %
', '.join(compiler_fname_list)))
toolchain = Toolchain(compiler_fname_list[0], True, True)
msg: Message to report
'''
if msg_type == 'warning':
- msg_type = col.Color(col.YELLOW, msg_type)
+ msg_type = col.build(col.YELLOW, msg_type)
elif msg_type == 'error':
- msg_type = col.Color(col.RED, msg_type)
+ msg_type = col.build(col.RED, msg_type)
elif msg_type == 'check':
- msg_type = col.Color(col.MAGENTA, msg_type)
+ msg_type = col.build(col.MAGENTA, msg_type)
line_str = '' if line is None else '%d' % line
return '%s:%s: %s: %s\n' % (fname, line_str, msg_type, msg)
warning_count += result.warnings
check_count += result.checks
print('%d errors, %d warnings, %d checks for %s:' % (result.errors,
- result.warnings, result.checks, col.Color(col.BLUE, fname)))
+ result.warnings, result.checks, col.build(col.BLUE, fname)))
if (len(result.problems) != result.errors + result.warnings +
result.checks):
print("Internal error: some problems lost")
color = col.YELLOW
if error_count:
color = col.RED
- print(col.Color(color, str % (error_count, warning_count, check_count)))
+ print(col.build(color, str % (error_count, warning_count, check_count)))
return False
return True
if not count:
str = 'No commits found to process - please use -c flag, or run:\n' \
' git branch --set-upstream-to remote/branch'
- sys.exit(col.Color(col.RED, str))
+ sys.exit(col.build(col.RED, str))
# Read the metadata from the commits
to_do = count - end
cc_file, in_reply_to=in_reply_to, thread=thread,
smtp_server=smtp_server)
else:
- print(col.Color(col.RED, "Not sending emails due to errors/warnings"))
+ print(col.build(col.RED, "Not sending emails due to errors/warnings"))
# For a dry run, just show our actions as a sanity check
if dry_run:
series.ShowActions(patch_files, cmd, process_tags)
if not its_a_go:
- print(col.Color(col.RED, "Email would not be sent"))
+ print(col.build(col.RED, "Email would not be sent"))
os.remove(cc_file)
if suppresscc == 'all' or suppresscc == 'cccmd':
col = terminal.Color()
- print((col.Color(col.RED, "error") +
+ print((col.build(col.RED, "error") +
": git config sendemail.suppresscc set to %s\n" % (suppresscc)) +
" patman needs --cc-cmd to be run to set the cc list.\n" +
" Please run:\n" +
if warn_on_error:
raise OSError(msg)
else:
- print(col.Color(col.RED, msg))
+ print(col.build(col.RED, msg))
return out_list
if lookup_name:
if not lookup_name in alias:
msg = "Alias '%s' not found" % lookup_name
if warn_on_error:
- print(col.Color(col.RED, msg))
+ print(col.build(col.RED, msg))
return out_list
for item in alias[lookup_name]:
todo = lookup_email(item, alias, warn_on_error, level + 1)
# TODO: Colour the patches according to whether they passed checks
for upto in range(len(args)):
commit = self.commits[upto]
- print(col.Color(col.GREEN, ' %s' % args[upto]))
+ print(col.build(col.GREEN, ' %s' % args[upto]))
cc_list = list(self._generated_cc[commit.patch])
for email in sorted(set(cc_list) - to_set - cc_set):
if email == None:
- email = col.Color(col.YELLOW, "<alias '%s' not found>"
+ email = col.build(col.YELLOW, "<alias '%s' not found>"
% tag)
if email:
print(' Cc: ', email)
else:
if version > 1:
str = 'Change log missing for v%d' % version
- print(col.Color(col.RED, str))
+ print(col.build(col.RED, str))
for version in changes_copy:
str = 'Change log for unknown version v%d' % version
- print(col.Color(col.RED, str))
+ print(col.build(col.RED, str))
elif self.changes:
str = 'Change log exists, but no version is set'
- print(col.Color(col.RED, str))
+ print(col.build(col.RED, str))
def MakeCcFile(self, process_tags, cover_fname, warn_on_error,
add_maintainers, limit):
dir_list = [os.path.join(gitutil.get_top_level(), 'scripts')]
cc += get_maintainer.get_maintainer(dir_list, commit.patch)
for x in set(cc) & set(settings.bounces):
- print(col.Color(col.YELLOW, 'Skipping "%s"' % x))
+ print(col.build(col.YELLOW, 'Skipping "%s"' % x))
cc = list(set(cc) - set(settings.bounces))
if limit is not None:
cc = cc[:limit]
Length of text, after skipping ANSI sequences
>>> col = Color(COLOR_ALWAYS)
- >>> text = col.Color(Color.RED, 'abc')
+ >>> text = col.build(Color.RED, 'abc')
>>> len(text)
14
>>> CalcAsciiLen(text)
>>> text += 'def'
>>> CalcAsciiLen(text)
6
- >>> text += col.Color(Color.RED, 'abc')
+ >>> text += col.build(Color.RED, 'abc')
>>> CalcAsciiLen(text)
9
"""
calculation.
>>> col = Color(COLOR_ALWAYS)
- >>> text = col.Color(Color.RED, 'abc')
+ >>> text = col.build(Color.RED, 'abc')
>>> len(text)
14
>>> CalcAsciiLen(TrimAsciiLen(text, 4))
>>> text += 'def'
>>> CalcAsciiLen(TrimAsciiLen(text, 4))
4
- >>> text += col.Color(Color.RED, 'ghi')
+ >>> text += col.build(Color.RED, 'ghi')
>>> CalcAsciiLen(TrimAsciiLen(text, 7))
7
"""
else:
if colour:
col = Color()
- text = col.Color(colour, text, bright=bright)
+ text = col.build(colour, text, bright=bright)
if newline:
print(text)
last_print_len = None
for line in print_test_list:
if line.colour:
col = Color()
- print(col.Color(line.colour, line.text), end='')
+ print(col.build(line.colour, line.text), end='')
else:
print(line.text, end='')
if line.newline:
return self.RESET
return ''
- def Color(self, color, text, bright=True):
+ def build(self, color, text, bright=True):
"""Returns text with conditionally added color escape sequences.
Keyword arguments:
_progress = msg + trailer
if stdout_is_tty:
col = _color.YELLOW if warning else _color.GREEN
- _stdout.write('\r' + _color.Color(col, _progress))
+ _stdout.write('\r' + _color.build(col, _progress))
_stdout.flush()
in_progress = True
else:
if verbose >= level:
clear_progress()
if color:
- msg = _color.Color(color, msg)
+ msg = _color.build(color, msg)
if level < NOTICE:
print(msg, file=sys.stderr)
else: