update
This commit is contained in:
+51
-12
@@ -3174,7 +3174,9 @@ class PipelineExecutor:
|
||||
|
||||
pipe_idx = pipe_index_by_stage.get(stage_index)
|
||||
|
||||
overlay_table: Any | None = None
|
||||
output_table: Any | None = None
|
||||
pre_stage_table: Any | None = None
|
||||
pre_last_result_table: Any | None = None
|
||||
session = _worker().WorkerStages.begin_stage(
|
||||
worker_manager,
|
||||
cmd_name=cmd_name,
|
||||
@@ -3204,6 +3206,22 @@ class PipelineExecutor:
|
||||
# should call begin_pipe themselves with the actual count.
|
||||
progress_ui.begin_pipe(pipe_idx, total_items=1)
|
||||
|
||||
if stage_index + 1 >= len(stages):
|
||||
try:
|
||||
pre_stage_table = (
|
||||
ctx.get_current_stage_table()
|
||||
if hasattr(ctx, "get_current_stage_table") else None
|
||||
)
|
||||
except Exception:
|
||||
pre_stage_table = None
|
||||
try:
|
||||
pre_last_result_table = (
|
||||
ctx.get_last_result_table()
|
||||
if hasattr(ctx, "get_last_result_table") else None
|
||||
)
|
||||
except Exception:
|
||||
pre_last_result_table = None
|
||||
|
||||
# RUN THE CMDLET
|
||||
ret_code = cmd_fn(piped_result, stage_args, config)
|
||||
if ret_code is not None:
|
||||
@@ -3216,20 +3234,41 @@ class PipelineExecutor:
|
||||
pipeline_error = f"Stage '{cmd_name}' failed with exit code {normalized_ret}"
|
||||
return
|
||||
|
||||
# Pipeline overlay tables (e.g., get-url detail views) need to be
|
||||
# rendered when running inside a pipeline because the CLI path
|
||||
# normally handles rendering. The overlay is only useful when
|
||||
# we're at the terminal stage of the pipeline. Save the table so
|
||||
# it can be printed after the pipe finishes.
|
||||
overlay_table = None
|
||||
# Terminal pipeline stages need to render overlay tables and also
|
||||
# newly produced standard result tables from row actions like
|
||||
# `.config -browse ...`, because there is no outer CLI render pass.
|
||||
output_table = None
|
||||
if stage_index + 1 >= len(stages):
|
||||
try:
|
||||
overlay_table = (
|
||||
output_table = (
|
||||
ctx.get_display_table()
|
||||
if hasattr(ctx, "get_display_table") else None
|
||||
)
|
||||
except Exception:
|
||||
overlay_table = None
|
||||
output_table = None
|
||||
|
||||
if output_table is None:
|
||||
current_stage_table = None
|
||||
last_result_table = None
|
||||
try:
|
||||
current_stage_table = (
|
||||
ctx.get_current_stage_table()
|
||||
if hasattr(ctx, "get_current_stage_table") else None
|
||||
)
|
||||
except Exception:
|
||||
current_stage_table = None
|
||||
try:
|
||||
last_result_table = (
|
||||
ctx.get_last_result_table()
|
||||
if hasattr(ctx, "get_last_result_table") else None
|
||||
)
|
||||
except Exception:
|
||||
last_result_table = None
|
||||
|
||||
if current_stage_table is not None and current_stage_table is not pre_stage_table:
|
||||
output_table = current_stage_table
|
||||
elif last_result_table is not None and last_result_table is not pre_last_result_table:
|
||||
output_table = last_result_table
|
||||
|
||||
# Update piped_result for next stage from emitted items
|
||||
stage_emits = list(stage_ctx.emits)
|
||||
@@ -3240,14 +3279,14 @@ class PipelineExecutor:
|
||||
finally:
|
||||
if progress_ui is not None and pipe_idx is not None:
|
||||
progress_ui.finish_pipe(pipe_idx)
|
||||
if overlay_table is not None:
|
||||
if output_table is not None:
|
||||
try:
|
||||
from SYS.rich_display import stdout_console
|
||||
|
||||
stdout_console().print()
|
||||
stdout_console().print(overlay_table)
|
||||
stdout_console().print(output_table)
|
||||
except Exception:
|
||||
logger.exception("Failed to render overlay_table to stdout_console")
|
||||
logger.exception("Failed to render output_table to stdout_console")
|
||||
if session:
|
||||
try:
|
||||
session.close()
|
||||
|
||||
Reference in New Issue
Block a user