From b2e7a2c42abbb77e0686b384bc153382d7eaf1eb Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 22 Apr 2021 19:15:37 +0200 Subject: [PATCH] Log when there's an error while scanning a directory Co-Authored-By: Max Brunsfeld Co-Authored-By: Nathan Sobo --- zed/src/worktree.rs | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/zed/src/worktree.rs b/zed/src/worktree.rs index 8d14ee9a46..cca39113c7 100644 --- a/zed/src/worktree.rs +++ b/zed/src/worktree.rs @@ -784,12 +784,12 @@ impl BackgroundScanner { let (tx, rx) = crossbeam_channel::unbounded(); - tx.send(Ok(ScanJob { + tx.send(ScanJob { inode, path: path.clone(), relative_path, scan_queue: tx.clone(), - })) + }) .unwrap(); drop(tx); @@ -800,7 +800,8 @@ impl BackgroundScanner { pool.execute(|| { let result = result; while let Ok(job) = rx.recv() { - if let Err(err) = job.and_then(|job| self.scan_dir(job)) { + if let Err(err) = self.scan_dir(&job) { + log::error!("error scanning {:?}: {}", job.path, err); *result = Err(err); break; } @@ -829,9 +830,7 @@ impl BackgroundScanner { Ok(()) } - fn scan_dir(&self, job: ScanJob) -> io::Result<()> { - let scan_queue = job.scan_queue; - + fn scan_dir(&self, job: &ScanJob) -> io::Result<()> { let mut new_entries = Vec::new(); let mut new_jobs = Vec::new(); @@ -860,7 +859,7 @@ impl BackgroundScanner { inode: child_inode, path: Arc::from(child_path), relative_path: child_relative_path, - scan_queue: scan_queue.clone(), + scan_queue: job.scan_queue.clone(), }); } else { new_entries.push(( @@ -878,7 +877,7 @@ impl BackgroundScanner { self.snapshot.lock().populate_dir(job.inode, new_entries); for new_job in new_jobs { - scan_queue.send(Ok(new_job)).unwrap(); + job.scan_queue.send(new_job).unwrap(); } Ok(()) @@ -920,7 +919,7 @@ impl BackgroundScanner { snapshot.insert_entry(path.file_name(), fs_entry); if is_dir { scan_queue_tx - .send(Ok(ScanJob { + .send(ScanJob { inode, path: Arc::from(path), relative_path: snapshot @@ -928,7 +927,7 @@ impl BackgroundScanner { .map_or(PathBuf::new(), PathBuf::from) .join(relative_path), scan_queue: scan_queue_tx.clone(), - })) + }) .unwrap(); } } @@ -948,8 +947,8 @@ impl BackgroundScanner { for _ in 0..self.thread_pool.thread_count() { pool.execute(|| { while let Ok(job) = scan_queue_rx.recv() { - if let Err(err) = job.and_then(|job| self.scan_dir(job)) { - log::error!("Error scanning {:?}", err); + if let Err(err) = self.scan_dir(&job) { + log::error!("error scanning {:?}: {}", job.path, err); } } }); @@ -1139,7 +1138,7 @@ struct ScanJob { inode: u64, path: Arc, relative_path: PathBuf, - scan_queue: crossbeam_channel::Sender>, + scan_queue: crossbeam_channel::Sender, } pub trait WorktreeHandle {