From 5a80602564539cf0fdbabde8095969efa6077045 Mon Sep 17 00:00:00 2001 From: Chris Laplante Date: Fri, 31 Jul 2020 11:42:48 -0400 Subject: 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 Signed-off-by: Richard Purdie --- bitbake/lib/bb/progress.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/bitbake/lib/bb/progress.py b/bitbake/lib/bb/progress.py index 8cddefaebe..d051ba0198 100644 --- a/bitbake/lib/bb/progress.py +++ b/bitbake/lib/bb/progress.py @@ -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) -- cgit v1.2.3-54-g00ecf