diff --git a/crates/sidebar/src/sidebar.rs b/crates/sidebar/src/sidebar.rs index 1c532d03b569dd35ed858a9d70b5745ce47064ac..a8eb70d62a5c9270b8032c7a4eb4fbbe6bc1276e 100644 --- a/crates/sidebar/src/sidebar.rs +++ b/crates/sidebar/src/sidebar.rs @@ -2386,8 +2386,14 @@ impl Sidebar { match create_receiver.await { Ok(Ok(())) => {} Ok(Err(err)) => { - log::error!("Failed to create worktree: {err}"); - return Self::create_fresh_worktree(row, workspaces, cx).await; + // Another concurrent restore may have already created + // this worktree. Re-check before falling back. + if fs.metadata(&final_worktree_path).await?.is_some() { + log::info!("Worktree creation failed ({err}) but path exists — reusing it"); + } else { + log::error!("Failed to create worktree: {err}"); + return Self::create_fresh_worktree(row, workspaces, cx).await; + } } Err(_) => { anyhow::bail!("Worktree creation was canceled");