From ac198e780b71e296e30d8c04a8dd5be249ec3aca Mon Sep 17 00:00:00 2001 From: Thomas Marchand Date: Fri, 16 Jan 2026 14:31:23 +0000 Subject: [PATCH] Fix update stream error handling and unreachable code - Add exit status check for git fetch command (previously only checked spawn errors, not fetch failures) - Remove unreachable dead code after service restart (process gets terminated by systemctl, so code after restart never executes) - Send "restarting" event at 100% progress before restart so clients can detect completion when connection drops --- src/api/system.rs | 68 +++++++++++++++++++---------------------------- 1 file changed, 28 insertions(+), 40 deletions(-) diff --git a/src/api/system.rs b/src/api/system.rs index 286550e..2b160d6 100644 --- a/src/api/system.rs +++ b/src/api/system.rs @@ -450,13 +450,25 @@ fn stream_open_agent_update() -> impl Stream {} + Ok(output) => { + let stderr = String::from_utf8_lossy(&output.stderr); + yield Ok(Event::default().data(serde_json::to_string(&UpdateProgressEvent { + event_type: "error".to_string(), + message: format!("Failed to fetch: {}", stderr), + progress: None, + }).unwrap())); + return; + } + Err(e) => { + yield Ok(Event::default().data(serde_json::to_string(&UpdateProgressEvent { + event_type: "error".to_string(), + message: format!("Failed to run git fetch: {}", e), + progress: None, + }).unwrap())); + return; + } } // Get the latest tag @@ -627,45 +639,21 @@ fn stream_open_agent_update() -> impl Stream { - // Wait a moment for the service to start - tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; - - yield Ok(Event::default().data(serde_json::to_string(&UpdateProgressEvent { - event_type: "complete".to_string(), - message: format!("Open Agent updated to {} successfully!", latest_tag), - progress: Some(100), - }).unwrap())); - } - Ok(output) => { - let stderr = String::from_utf8_lossy(&output.stderr); - yield Ok(Event::default().data(serde_json::to_string(&UpdateProgressEvent { - event_type: "error".to_string(), - message: format!("Failed to restart service: {}", stderr), - progress: None, - }).unwrap())); - } - Err(e) => { - yield Ok(Event::default().data(serde_json::to_string(&UpdateProgressEvent { - event_type: "error".to_string(), - message: format!("Failed to restart service: {}", e), - progress: None, - }).unwrap())); - } - } } }