From 07c7fe929b5a42ec63fa5f9b12c12cd9f2e1823a Mon Sep 17 00:00:00 2001 From: Alexey Lapshin Date: Thu, 25 May 2023 13:53:56 +0800 Subject: [PATCH] tools: process progression for flash action output --- tools/idf_py_actions/serial_ext.py | 2 +- tools/idf_py_actions/tools.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/tools/idf_py_actions/serial_ext.py b/tools/idf_py_actions/serial_ext.py index 0ba7e18dc6..062be59dc1 100644 --- a/tools/idf_py_actions/serial_ext.py +++ b/tools/idf_py_actions/serial_ext.py @@ -184,7 +184,7 @@ def action_extensions(base_actions: Dict, project_path: str) -> Dict: if extra_args: extra += shlex.split(extra_args) env = {'ESPBAUD': str(args.baud), 'ESPPORT': args.port, 'SERIAL_TOOL_EXTRA_ARGS': ';'.join(extra)} - run_target(action, args, env) + run_target(action, args, env, force_progression=True) def erase_flash(action: str, ctx: click.core.Context, args: PropertyDict) -> None: ensure_build_directory(args, ctx.info_name) diff --git a/tools/idf_py_actions/tools.py b/tools/idf_py_actions/tools.py index 5177a91b6a..14527ba642 100644 --- a/tools/idf_py_actions/tools.py +++ b/tools/idf_py_actions/tools.py @@ -293,6 +293,12 @@ class RunTool: print('\r' + fit_text_in_terminal(output.strip('\n\r')) + '\x1b[K', end='', file=output_stream) output_stream.flush() + def is_progression(output: str) -> bool: + # try to find possible progression by a pattern match + if re.match(r'^\[\d+/\d+\]|.*\(\d+ \%\)$', output): + return True + return False + async def read_stream() -> Optional[str]: try: output_b = await input_stream.readline() @@ -324,6 +330,8 @@ class RunTool: # used in interactive mode to print hints after matched line hints = load_hints() last_line = '' + is_progression_last_line = False + is_progression_processing_enabled = self.force_progression and output_stream.isatty() and '-v' not in self.args try: with open(output_filename, 'w', encoding='utf8') as output_file: @@ -344,10 +352,13 @@ class RunTool: if not output_stream.isatty(): output = output_noescape - if self.force_progression and output[0] == '[' and '-v' not in self.args and output_stream.isatty(): - # print output in progression way but only the progression related (that started with '[') and if verbose flag is not set + if is_progression_processing_enabled and is_progression(output): print_progression(output) + is_progression_last_line = True else: + if is_progression_last_line: + output_converter.write(os.linesep) + is_progression_last_line = False output_converter.write(output) output_converter.flush()