Prune the set of expanded dir ids as entries are removed

This commit is contained in:
Max Brunsfeld 2023-06-23 10:23:21 -07:00
parent b22a18345e
commit 27b74e9ea1

View file

@ -3030,7 +3030,7 @@ impl BackgroundScanner {
// these before handling changes reported by the filesystem. // these before handling changes reported by the filesystem.
request = self.scan_requests_rx.recv().fuse() => { request = self.scan_requests_rx.recv().fuse() => {
let Ok(request) = request else { break }; let Ok(request) = request else { break };
if !self.process_scan_request(request).await { if !self.process_scan_request(request, false).await {
return; 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); log::debug!("rescanning paths {:?}", request.relative_paths);
let root_path = self.expand_paths(&request.relative_paths).await; let root_path = self.expand_paths(&request.relative_paths).await;
@ -3072,7 +3072,7 @@ impl BackgroundScanner {
.collect::<Vec<_>>(); .collect::<Vec<_>>();
self.reload_entries_for_paths(root_path, root_canonical_path, abs_paths, None) self.reload_entries_for_paths(root_path, root_canonical_path, abs_paths, None)
.await; .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<PathBuf>) { async fn process_events(&mut self, abs_paths: Vec<PathBuf>) {
@ -3107,6 +3107,9 @@ impl BackgroundScanner {
let mut state = self.state.lock(); let mut state = self.state.lock();
state.reload_repositories(&paths, self.fs.as_ref()); state.reload_repositories(&paths, self.fs.as_ref());
state.snapshot.completed_scan_id = state.snapshot.scan_id; 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); self.send_status_update(false, None);
@ -3182,7 +3185,7 @@ impl BackgroundScanner {
// the scan queue, so that user operations are prioritized. // the scan queue, so that user operations are prioritized.
request = self.scan_requests_rx.recv().fuse() => { request = self.scan_requests_rx.recv().fuse() => {
let Ok(request) = request else { break }; let Ok(request) = request else { break };
if !self.process_scan_request(request).await { if !self.process_scan_request(request, true).await {
return; return;
} }
} }
@ -3664,7 +3667,7 @@ impl BackgroundScanner {
// the queue of ignore statuses. // the queue of ignore statuses.
request = self.scan_requests_rx.recv().fuse() => { request = self.scan_requests_rx.recv().fuse() => {
let Ok(request) = request else { break }; let Ok(request) = request else { break };
if !self.process_scan_request(request).await { if !self.process_scan_request(request, true).await {
return; return;
} }
} }