diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index 843a775993ccc1b4f9a9486ba2f4953c6a2c4cac..350908d0d53677c5bcb5b89cbe25a4344b49715d 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -34,7 +34,6 @@ use std::{ ffi::{OsStr, OsString}, fmt, future::Future, - mem, ops::{Deref, Range}, path::{Path, PathBuf}, sync::{ @@ -197,7 +196,6 @@ impl Worktree { entries_by_id, removed_entry_ids: Default::default(), next_entry_id: Default::default(), - diagnostic_summaries, }; let (updates_tx, mut updates_rx) = postage::mpsc::channel(64); @@ -241,6 +239,7 @@ impl Worktree { queued_operations: Default::default(), languages, user_store, + diagnostic_summaries, }) }) }); @@ -584,9 +583,7 @@ impl Worktree { match self { Self::Local(worktree) => { let is_fake_fs = worktree.fs.is_fake(); - worktree - .snapshot - .assign(worktree.background_snapshot.lock().clone()); + worktree.snapshot = worktree.background_snapshot.lock().clone(); if worktree.is_scanning() { if worktree.poll_task.is_none() { worktree.poll_task = Some(cx.spawn(|this, mut cx| async move { @@ -828,8 +825,7 @@ impl Worktree { let this = self.as_local_mut().unwrap(); let summary = DiagnosticSummary::new(&diagnostics); - this.snapshot - .diagnostic_summaries + this.diagnostic_summaries .insert(PathKey(worktree_path.clone()), summary.clone()); this.diagnostics.insert(worktree_path.clone(), diagnostics); @@ -943,7 +939,6 @@ pub struct Snapshot { entries_by_id: SumTree, removed_entry_ids: HashMap, next_entry_id: Arc, - diagnostic_summaries: TreeMap, } pub struct LocalWorktree { @@ -958,6 +953,7 @@ pub struct LocalWorktree { open_buffers: HashMap>, shared_buffers: HashMap>>, diagnostics: HashMap, Vec>>, + diagnostic_summaries: TreeMap, queued_operations: Vec<(u64, Operation)>, language_registry: Arc, client: Arc, @@ -984,6 +980,7 @@ pub struct RemoteWorktree { languages: Arc, user_store: ModelHandle, queued_operations: Vec<(u64, Operation)>, + diagnostic_summaries: TreeMap, } type LoadingBuffers = HashMap< @@ -1038,7 +1035,6 @@ impl LocalWorktree { entries_by_id: Default::default(), removed_entry_ids: Default::default(), next_entry_id: Arc::new(next_entry_id), - diagnostic_summaries: Default::default(), }; if let Some(metadata) = metadata { snapshot.insert_entry( @@ -1064,6 +1060,7 @@ impl LocalWorktree { open_buffers: Default::default(), shared_buffers: Default::default(), diagnostics: Default::default(), + diagnostic_summaries: Default::default(), queued_operations: Default::default(), language_registry: languages, client, @@ -1502,10 +1499,11 @@ impl LocalWorktree { }) .detach(); + let diagnostic_summaries = self.diagnostic_summaries.clone(); let share_message = cx.background().spawn(async move { proto::ShareWorktree { project_id, - worktree: Some(snapshot.to_proto()), + worktree: Some(snapshot.to_proto(&diagnostic_summaries)), } }); @@ -1680,7 +1678,7 @@ impl RemoteWorktree { ) { if let Some(summary) = envelope.payload.summary { let path: Arc = Path::new(&summary.path).into(); - self.snapshot.diagnostic_summaries.insert( + self.diagnostic_summaries.insert( PathKey(path.clone()), DiagnosticSummary { error_count: summary.error_count as usize, @@ -1726,7 +1724,10 @@ impl Snapshot { self.id } - pub fn to_proto(&self) -> proto::Worktree { + pub fn to_proto( + &self, + diagnostic_summaries: &TreeMap, + ) -> proto::Worktree { let root_name = self.root_name.clone(); proto::Worktree { id: self.id.0 as u64, @@ -1737,8 +1738,7 @@ impl Snapshot { .filter(|e| !e.is_ignored) .map(Into::into) .collect(), - diagnostic_summaries: self - .diagnostic_summaries + diagnostic_summaries: diagnostic_summaries .iter() .map(|(path, summary)| summary.to_proto(path.0.clone())) .collect(), @@ -1845,14 +1845,6 @@ impl Snapshot { Ok(()) } - fn assign(&mut self, mut other: Self) { - mem::swap( - &mut self.diagnostic_summaries, - &mut other.diagnostic_summaries, - ); - *self = other; - } - pub fn file_count(&self) -> usize { self.entries_by_path.summary().file_count } @@ -3358,7 +3350,7 @@ mod tests { let remote = Worktree::remote( 1, 1, - initial_snapshot.to_proto(), + initial_snapshot.to_proto(&Default::default()), Client::new(http_client.clone()), user_store, Default::default(), @@ -4205,7 +4197,6 @@ mod tests { root_name: Default::default(), root_char_bag: Default::default(), next_entry_id: next_entry_id.clone(), - diagnostic_summaries: Default::default(), }; initial_snapshot.insert_entry( Entry::new(