diff --git a/crates/fs/src/repository.rs b/crates/fs/src/repository.rs index ed9aa85a89bf991bf1d03d5f8952dd8fb70a9780..3826dae2aa73eeb3f5c263d0291e932939a19fff 100644 --- a/crates/fs/src/repository.rs +++ b/crates/fs/src/repository.rs @@ -33,6 +33,7 @@ pub trait GitRepository: Send { fn statuses(&self) -> Option>; fn status(&self, path: &RepoPath) -> Result>; + fn branches(&self) -> Result> { Ok(vec![]) } diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index b113af34ad40c9f06d5fa2989aee94219c2091b6..a1730fd365f9dd13002a94011acf0c187b06b6d5 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -2023,6 +2023,9 @@ impl LocalSnapshot { ) -> Vec> { let mut changes = vec![]; let mut edits = vec![]; + + let statuses = repo_ptr.statuses(); + for mut entry in self .descendent_entries(false, false, &work_directory.0) .cloned() @@ -2030,10 +2033,8 @@ impl LocalSnapshot { let Ok(repo_path) = entry.path.strip_prefix(&work_directory.0) else { continue; }; - let git_file_status = repo_ptr - .status(&RepoPath(repo_path.into())) - .log_err() - .flatten(); + let repo_path = RepoPath(repo_path.to_path_buf()); + let git_file_status = statuses.as_ref().and_then(|s| s.get(&repo_path).copied()); if entry.git_status != git_file_status { entry.git_status = git_file_status; changes.push(entry.path.clone());