diff --git a/crates/agent_ui/src/thread_worktree_archive.rs b/crates/agent_ui/src/thread_worktree_archive.rs index 9ddb5cde37a1769881fd1cc45e303cb29f76ceb0..d6a22d232a518e5a886e6cceb046a0039d413db1 100644 --- a/crates/agent_ui/src/thread_worktree_archive.rs +++ b/crates/agent_ui/src/thread_worktree_archive.rs @@ -10,10 +10,7 @@ use collections::HashMap; use git::repository::{AskPassDelegate, CommitOptions, ResetMode}; use gpui::{App, AsyncApp, Entity, Global, Task, WindowHandle}; use parking_lot::Mutex; -use project::{ - LocalProjectFlags, Project, WorktreeId, - git_store::{Repository, resolve_git_worktree_to_main_repo}, -}; +use project::{LocalProjectFlags, Project, WorktreeId, git_store::Repository}; use util::ResultExt; use workspace::{ AppState, MultiWorkspace, OpenMode, OpenOptions, PathList, Toast, Workspace, @@ -992,10 +989,13 @@ pub async fn restore_worktree_via_git( let already_exists = app_state.fs.metadata(worktree_path).await?.is_some(); let needs_reset = if already_exists { - let is_git_worktree = - resolve_git_worktree_to_main_repo(app_state.fs.as_ref(), worktree_path) - .await - .is_some(); + // Check if the existing path is actually a git worktree by looking for + // a `.git` file (worktrees have a `.git` file, not a directory). + let dot_git_path = worktree_path.join(".git"); + let dot_git_metadata = app_state.fs.metadata(&dot_git_path).await?; + let is_git_worktree = dot_git_metadata + .as_ref() + .is_some_and(|meta| !meta.is_dir); if is_git_worktree { // Already a git worktree — another thread on the same worktree