From edda149d7561120409728322a429caf8e946bc76 Mon Sep 17 00:00:00 2001 From: Kirill Bulatov Date: Tue, 22 Oct 2024 19:27:50 +0300 Subject: [PATCH] Do not remove worktrees after the headless server removal (#19556) Release Notes: - N/A Co-authored-by: Conrad Irwin --- crates/language/src/language_settings.rs | 2 +- crates/project/src/lsp_store.rs | 1 + crates/project/src/project.rs | 6 ++++-- crates/project/src/worktree_store.rs | 5 +++++ crates/settings/src/settings_store.rs | 2 +- 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/crates/language/src/language_settings.rs b/crates/language/src/language_settings.rs index f4083b2244..07d922cf9f 100644 --- a/crates/language/src/language_settings.rs +++ b/crates/language/src/language_settings.rs @@ -831,7 +831,7 @@ impl AllLanguageSettings { let editorconfig_properties = location.and_then(|location| { cx.global::() - .editorconfg_properties(location.worktree_id, location.path) + .editorconfig_properties(location.worktree_id, location.path) }); if let Some(editorconfig_properties) = editorconfig_properties { let mut settings = settings.clone(); diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 534bd71d7f..a2e1b7b0f8 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -1029,6 +1029,7 @@ impl LspStore { }) .detach() } + WorktreeStoreEvent::WorktreeReleased(..) => {} WorktreeStoreEvent::WorktreeRemoved(_, id) => self.remove_worktree(*id, cx), WorktreeStoreEvent::WorktreeOrderChanged => {} WorktreeStoreEvent::WorktreeUpdateSent(worktree) => { diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index c4c33a58d1..9d27b98225 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -2223,9 +2223,11 @@ impl Project { cx.emit(Event::WorktreeAdded); } WorktreeStoreEvent::WorktreeRemoved(_, id) => { - self.on_worktree_removed(*id, cx); cx.emit(Event::WorktreeRemoved(*id)); } + WorktreeStoreEvent::WorktreeReleased(_, id) => { + self.on_worktree_released(*id, cx); + } WorktreeStoreEvent::WorktreeOrderChanged => cx.emit(Event::WorktreeOrderChanged), WorktreeStoreEvent::WorktreeUpdateSent(_) => {} } @@ -2261,7 +2263,7 @@ impl Project { cx.notify(); } - fn on_worktree_removed(&mut self, id_to_remove: WorktreeId, cx: &mut ModelContext) { + fn on_worktree_released(&mut self, id_to_remove: WorktreeId, cx: &mut ModelContext) { if let Some(dev_server_project_id) = self.dev_server_project_id { let paths: Vec = self .visible_worktrees(cx) diff --git a/crates/project/src/worktree_store.rs b/crates/project/src/worktree_store.rs index df63415b18..7196ae199f 100644 --- a/crates/project/src/worktree_store.rs +++ b/crates/project/src/worktree_store.rs @@ -62,6 +62,7 @@ pub struct WorktreeStore { pub enum WorktreeStoreEvent { WorktreeAdded(Model), WorktreeRemoved(EntityId, WorktreeId), + WorktreeReleased(EntityId, WorktreeId), WorktreeOrderChanged, WorktreeUpdateSent(Model), } @@ -394,6 +395,10 @@ impl WorktreeStore { let handle_id = worktree.entity_id(); cx.observe_release(worktree, move |this, worktree, cx| { + cx.emit(WorktreeStoreEvent::WorktreeReleased( + handle_id, + worktree.id(), + )); cx.emit(WorktreeStoreEvent::WorktreeRemoved( handle_id, worktree.id(), diff --git a/crates/settings/src/settings_store.rs b/crates/settings/src/settings_store.rs index a25eae7e2c..0130adf99c 100644 --- a/crates/settings/src/settings_store.rs +++ b/crates/settings/src/settings_store.rs @@ -968,7 +968,7 @@ impl SettingsStore { Ok(()) } - pub fn editorconfg_properties( + pub fn editorconfig_properties( &self, for_worktree: WorktreeId, for_path: &Path,