From 199f394827b6f3e746e53f7cd3f599a4365ea26f Mon Sep 17 00:00:00 2001 From: Richard Feldman Date: Wed, 1 Apr 2026 11:03:35 -0400 Subject: [PATCH] Re-check path existence after worktree creation failure When create_worktree_detached fails, re-check whether the path now exists before falling back to create_fresh_worktree. A concurrent restore may have already created the worktree, in which case we reuse the existing path. --- crates/sidebar/src/sidebar.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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");