mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 12:29:55 +00:00
Revert "lib/oe/log_colorizer.py: add LogColorizerProxyProgressHandler"
This reverts commit 312fb3c86a3d84e60867b132666c01859f73ceb2 as this wasn't meant to merge as yet. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -1,86 +0,0 @@
|
|||||||
# Copyright (C) 2020 Agilent Technologies, Inc.
|
|
||||||
# Author: Chris Laplante <chris.laplante@agilent.com>
|
|
||||||
#
|
|
||||||
# Released under the MIT license (see COPYING.MIT)
|
|
||||||
|
|
||||||
from bb.progress import ProgressHandler
|
|
||||||
from bb.build import create_progress_handler
|
|
||||||
import contextlib
|
|
||||||
import re
|
|
||||||
import os.path
|
|
||||||
|
|
||||||
# from https://stackoverflow.com/a/14693789/221061
|
|
||||||
ansi_escape = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
|
|
||||||
|
|
||||||
|
|
||||||
class LogColorizerProxyProgressHandler(ProgressHandler):
|
|
||||||
"""
|
|
||||||
This is a proxy progress handler. It intercepts log output, stripping any
|
|
||||||
ANSII color escape codes. Then the stripped output is fed to the task's
|
|
||||||
original progress handler which will render the progress bar as usual.
|
|
||||||
"""
|
|
||||||
def __init__(self, d, outfile=None, otherargs=None):
|
|
||||||
self._task = d.getVar("BB_RUNTASK")
|
|
||||||
self._color_log = None
|
|
||||||
self._nocolor_log = None
|
|
||||||
self._exit_stack = None
|
|
||||||
self._original_ph = None
|
|
||||||
|
|
||||||
self._suppress_color_output = not not d.getVar("LOG_COLORIZER_SUPPRESS_COLORIZED_OUTPUT")
|
|
||||||
|
|
||||||
self._tempdir = d.getVar("T")
|
|
||||||
logfmt = (d.getVar('BB_LOGFMT') or 'log.{task}.{pid}')
|
|
||||||
self._logbasename = logfmt.format(task=self._task, pid=os.getpid())
|
|
||||||
|
|
||||||
# Setup courtesy symlinks
|
|
||||||
for suffix in [".nocolor", ".color"]:
|
|
||||||
loglink = os.path.join(self._tempdir, 'log.{0}{1}'.format(self._task, suffix))
|
|
||||||
logfn = os.path.join(self._tempdir, self._logbasename + suffix)
|
|
||||||
if loglink:
|
|
||||||
bb.utils.remove(loglink)
|
|
||||||
|
|
||||||
try:
|
|
||||||
os.symlink(self._logbasename + suffix, loglink)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
super().__init__(d, outfile)
|
|
||||||
|
|
||||||
def __enter__(self):
|
|
||||||
with contextlib.ExitStack() as es:
|
|
||||||
self._color_log = es.enter_context(open(os.path.join(self._tempdir, self._logbasename) + ".color", "w"))
|
|
||||||
self._nocolor_log = es.enter_context(open(os.path.join(self._tempdir, self._logbasename) + ".nocolor", "w"))
|
|
||||||
|
|
||||||
# Reconstitute the original progress handler. We will feed stripped output to it so
|
|
||||||
# that the progress bar still shows up for the task.
|
|
||||||
original_ph = self._data.getVarFlag(self._task, "originalprogress")
|
|
||||||
if original_ph:
|
|
||||||
# We don't want task output showing up on the screen twice, so we'll just have
|
|
||||||
# the original progress handler write to /dev/null.
|
|
||||||
# Note the progress handler itself is responsible for closing the devnull handler.
|
|
||||||
devnull = open("/dev/null", "w")
|
|
||||||
self._original_ph = es.enter_context(create_progress_handler(self._task, original_ph, devnull, self._data))
|
|
||||||
|
|
||||||
self._exit_stack = es.pop_all()
|
|
||||||
super().__enter__()
|
|
||||||
|
|
||||||
def __exit__(self, *exc_info):
|
|
||||||
if self._exit_stack:
|
|
||||||
self._exit_stack.__exit__(*exc_info)
|
|
||||||
super().__exit__(*exc_info)
|
|
||||||
|
|
||||||
def write(self, string):
|
|
||||||
# Filter out ANSI escape sequences using the regular expression
|
|
||||||
filtered = ansi_escape.sub('', string)
|
|
||||||
|
|
||||||
if self._color_log:
|
|
||||||
self._color_log.write(string)
|
|
||||||
|
|
||||||
if self._nocolor_log:
|
|
||||||
self._nocolor_log.write(filtered)
|
|
||||||
|
|
||||||
if self._original_ph:
|
|
||||||
# Pass-through to the original progress handler so we get our progress bar
|
|
||||||
self._original_ph.write(filtered)
|
|
||||||
|
|
||||||
super().write(filtered if self._suppress_color_output else string)
|
|
||||||
Reference in New Issue
Block a user