bitbake: progress: filter ANSI escape codes before looking for progress text

This is in prepartion for introducing the log-colorizer bbclass into poky.

(Bitbake rev: 889a873d71a6543efb71a0eb4ea6632c9f17175d)

Signed-off-by: Chris Laplante <chris.laplante@agilent.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Chris Laplante
2020-07-31 11:42:48 -04:00
committed by Richard Purdie
parent 9b41300d47
commit 5a80602564

View File

@@ -15,6 +15,25 @@ import bb.build
from bb.build import StdoutNoopContextManager
# from https://stackoverflow.com/a/14693789/221061
ANSI_ESCAPE_REGEX = re.compile(r'\x1B\[[0-?]*[ -/]*[@-~]')
def filter_color(string):
"""
Filter ANSI escape codes out of |string|, return new string
"""
return ANSI_ESCAPE_REGEX.sub('', string)
def filter_color_n(string):
"""
Filter ANSI escape codes out of |string|, returns tuple of
(new string, # of ANSI codes removed)
"""
return ANSI_ESCAPE_REGEX.subn('', string)
class ProgressHandler:
"""
Base class that can pretend to be a file object well enough to be
@@ -82,7 +101,7 @@ class LineFilterProgressHandler(ProgressHandler):
lbreakpos = line.rfind('\r') + 1
if lbreakpos:
line = line[lbreakpos:]
if self.writeline(line):
if self.writeline(filter_color(line)):
super().write(line)
def writeline(self, line):
@@ -97,7 +116,7 @@ class BasicProgressHandler(ProgressHandler):
self._fire_progress(0)
def write(self, string):
percs = self._regex.findall(string)
percs = self._regex.findall(filter_color(string))
if percs:
progress = int(percs[-1])
self.update(progress)
@@ -112,7 +131,7 @@ class OutOfProgressHandler(ProgressHandler):
self._fire_progress(0)
def write(self, string):
nums = self._regex.findall(string)
nums = self._regex.findall(filter_color(string))
if nums:
progress = (float(nums[-1][0]) / float(nums[-1][1])) * 100
self.update(progress)