mirror of
https://git.yoctoproject.org/poky
synced 2026-04-19 06:32:13 +02:00
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:
committed by
Richard Purdie
parent
9b41300d47
commit
5a80602564
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user