From b27fd3b8d74aaa03b71784c0ddc95b9f0a2b06b2 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 17 Oct 2025 15:19:38 +0200 Subject: [PATCH] worktree: Don't attempt to watch non-existing global gitignore (#40476) Release Notes: - N/A *or* Added/Fixed/Improved ... --- .../project/src/debugger/breakpoint_store.rs | 1 - crates/worktree/src/worktree.rs | 37 +++++++++++-------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/crates/project/src/debugger/breakpoint_store.rs b/crates/project/src/debugger/breakpoint_store.rs index b7f5360d189489415032be6e5271b3880a421e57..42663ab9852a5dc2e9850d20dd20940c6723d03c 100644 --- a/crates/project/src/debugger/breakpoint_store.rs +++ b/crates/project/src/debugger/breakpoint_store.rs @@ -164,7 +164,6 @@ pub struct BreakpointStore { impl BreakpointStore { pub fn init(client: &AnyProtoClient) { - log::error!("breakpoint store init"); client.add_entity_request_handler(Self::handle_toggle_breakpoint); client.add_entity_message_handler(Self::handle_breakpoints_for_file); } diff --git a/crates/worktree/src/worktree.rs b/crates/worktree/src/worktree.rs index d3aa911ae27c97ffaeb1933c27d8a40d4869fe77..3fa271a37ac014e046b4e5a98ae780d45a66743c 100644 --- a/crates/worktree/src/worktree.rs +++ b/crates/worktree/src/worktree.rs @@ -3614,25 +3614,32 @@ impl BackgroundScanner { log::trace!("containing git repository: {containing_git_repository:?}"); - let mut global_gitignore_events = - if let Some(global_gitignore_path) = &paths::global_gitignore_path() { - self.state.lock().await.snapshot.global_gitignore = - if self.fs.is_file(&global_gitignore_path).await { - build_gitignore(global_gitignore_path, self.fs.as_ref()) - .await - .ok() - .map(Arc::new) - } else { - None - }; + let mut global_gitignore_events = if let Some(global_gitignore_path) = + &paths::global_gitignore_path() + { + let is_file = self.fs.is_file(&global_gitignore_path).await; + self.state.lock().await.snapshot.global_gitignore = if is_file { + build_gitignore(global_gitignore_path, self.fs.as_ref()) + .await + .ok() + .map(Arc::new) + } else { + None + }; + if is_file + || matches!(global_gitignore_path.parent(), Some(path) if self.fs.is_dir(path).await) + { self.fs .watch(global_gitignore_path, FS_WATCH_LATENCY) .await .0 } else { - self.state.lock().await.snapshot.global_gitignore = None; - Box::pin(futures::stream::empty()) - }; + Box::pin(futures::stream::pending()) + } + } else { + self.state.lock().await.snapshot.global_gitignore = None; + Box::pin(futures::stream::pending()) + }; let (scan_job_tx, scan_job_rx) = channel::unbounded(); { @@ -3740,7 +3747,7 @@ impl BackgroundScanner { Some([event, ..]) => { self.update_global_gitignore(&event.path).await; } - _ => {}, + _ => (), } } }