From 4c54c32507e014bb5459d1fc7b4f3f80cfa3d286 Mon Sep 17 00:00:00 2001 From: Carter Canedy Date: Tue, 21 Jan 2025 13:38:20 -0800 Subject: [PATCH] better error reporting --- crates/terminal_view/src/terminal_panel.rs | 28 +++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/crates/terminal_view/src/terminal_panel.rs b/crates/terminal_view/src/terminal_panel.rs index 2ebb028440cf99..8c4af5dcad1a38 100644 --- a/crates/terminal_view/src/terminal_panel.rs +++ b/crates/terminal_view/src/terminal_panel.rs @@ -470,7 +470,9 @@ impl TerminalPanel { self.deferred_tasks.insert( primary_task.id.clone(), cx.spawn(|terminal_panel, mut cx| async move { - for task in tasks { + let mut task_iter = tasks.iter(); + let mut failed_task_info: Option<(&str, i32)> = None; + for task in task_iter.by_ref() { let builder = ShellBuilder::new(is_local, &task.shell); let command_label = builder.command_label(&task.command_label); let (command, args) = builder.build(task.command.clone(), &task.args); @@ -488,7 +490,7 @@ impl TerminalPanel { }) .log_err() else { - return; + break; }; let Some(spawn_terminal_task) = if terminal_task.allow_concurrent_runs @@ -529,11 +531,11 @@ impl TerminalPanel { } } .log_err() else { - return; + break; }; let Some(terminal) = spawn_terminal_task.await.log_err() else { - return; + break; }; let task_result = cx @@ -542,20 +544,24 @@ impl TerminalPanel { }) .log_err(); let Some(task_result) = task_result else { - return; + break; }; let exit_code = task_result.await; if exit_code != 0 { - Result::<()>::Err(anyhow!( - "Task \"{}\" exited with non-zero exit code, aborting remaining tasks", - task.command_label.as_str() - )) - .log_err(); - return; + failed_task_info = Some((task.label.as_str(), exit_code)); + break; } } + + if let Some((label, exit_code)) = failed_task_info { + let n_remaining = task_iter.count(); + Result::<()>::Err(anyhow!( + "Task '{label}' exited with non-zero exit code ({exit_code}), aborting {n_remaining} remaining tasks", + )) + .log_err(); + }; }), ); }