From 9431c6573318dde690bc4e61b3b82d97a69030b8 Mon Sep 17 00:00:00 2001 From: Jacob <33708767+jacobtread@users.noreply.github.com> Date: Wed, 10 Sep 2025 06:16:29 +1200 Subject: [PATCH] git: Improve error messages (#35946) Release Notes: - Improved git error messages Includes stderr in the error message for git commands, provides better output for things like errors when switching branches. Before: image After: image --------- Co-authored-by: Conrad Irwin --- crates/git/src/repository.rs | 4 +++- crates/workspace/src/notifications.rs | 7 ++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/crates/git/src/repository.rs b/crates/git/src/repository.rs index fd12dafa98575b5d8b0190d6ed4e894ac61e8165..6d053e1855d34d3bc0c173f760e7f71cd816d288 100644 --- a/crates/git/src/repository.rs +++ b/crates/git/src/repository.rs @@ -1814,6 +1814,7 @@ impl GitBinary { output.status.success(), GitBinaryCommandError { stdout: String::from_utf8_lossy(&output.stdout).to_string(), + stderr: String::from_utf8_lossy(&output.stderr).to_string(), status: output.status, } ); @@ -1836,9 +1837,10 @@ impl GitBinary { } #[derive(Error, Debug)] -#[error("Git command failed: {stdout}")] +#[error("Git command failed:\n{stdout}{stderr}\n")] struct GitBinaryCommandError { stdout: String, + stderr: String, status: ExitStatus, } diff --git a/crates/workspace/src/notifications.rs b/crates/workspace/src/notifications.rs index 039aec51990cda02e99996e9a4029aa42613f492..768b10abe4f3973ca6424b7b59b4e3bfb44cbb15 100644 --- a/crates/workspace/src/notifications.rs +++ b/crates/workspace/src/notifications.rs @@ -1077,8 +1077,13 @@ where if let Err(err) = result.as_ref() { log::error!("{err:?}"); if let Ok(prompt) = cx.update(|window, cx| { + let mut display = format!("{err}"); + if !display.ends_with('\n') { + display.push('.'); + display.push(' ') + } let detail = - f(err, window, cx).unwrap_or_else(|| format!("{err}. Please try again.")); + f(err, window, cx).unwrap_or_else(|| format!("{display}Please try again.")); window.prompt(PromptLevel::Critical, &msg, Some(&detail), &["Ok"], cx) }) { prompt.await.ok();