diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 811098540f..b627c644a7 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -3030,7 +3030,7 @@ impl BackgroundScanner { // these before handling changes reported by the filesystem. request = self.scan_requests_rx.recv().fuse() => { let Ok(request) = request else { break }; - if !self.process_scan_request(request).await { + if !self.process_scan_request(request, false).await { return; } } @@ -3047,7 +3047,7 @@ impl BackgroundScanner { } } - async fn process_scan_request(&self, request: ScanRequest) -> bool { + async fn process_scan_request(&self, request: ScanRequest, scanning: bool) -> bool { log::debug!("rescanning paths {:?}", request.relative_paths); let root_path = self.expand_paths(&request.relative_paths).await; @@ -3072,7 +3072,7 @@ impl BackgroundScanner { .collect::>(); self.reload_entries_for_paths(root_path, root_canonical_path, abs_paths, None) .await; - self.send_status_update(false, Some(request.done)) + self.send_status_update(scanning, Some(request.done)) } async fn process_events(&mut self, abs_paths: Vec) { @@ -3107,6 +3107,9 @@ impl BackgroundScanner { let mut state = self.state.lock(); state.reload_repositories(&paths, self.fs.as_ref()); state.snapshot.completed_scan_id = state.snapshot.scan_id; + for (_, entry_id) in mem::take(&mut state.removed_entry_ids) { + state.expanded_dirs.remove(&entry_id); + } } self.send_status_update(false, None); @@ -3182,7 +3185,7 @@ impl BackgroundScanner { // the scan queue, so that user operations are prioritized. request = self.scan_requests_rx.recv().fuse() => { let Ok(request) = request else { break }; - if !self.process_scan_request(request).await { + if !self.process_scan_request(request, true).await { return; } } @@ -3664,7 +3667,7 @@ impl BackgroundScanner { // the queue of ignore statuses. request = self.scan_requests_rx.recv().fuse() => { let Ok(request) = request else { break }; - if !self.process_scan_request(request).await { + if !self.process_scan_request(request, true).await { return; } }