Re-check path existence after worktree creation failure

Richard Feldman created

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.

Change summary

crates/sidebar/src/sidebar.rs | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)

Detailed changes

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");