diff --git a/crates/editor/src/items.rs b/crates/editor/src/items.rs index 80c1009aa4..d2b9c20803 100644 --- a/crates/editor/src/items.rs +++ b/crates/editor/src/items.rs @@ -14,7 +14,7 @@ use language::{ proto::serialize_anchor as serialize_text_anchor, Bias, Buffer, OffsetRangeExt, Point, SelectionGoal, }; -use project::{repository::GitFileStatus, FormatTrigger, Item as _, Project, ProjectPath}; +use project::{FormatTrigger, Item as _, Project, ProjectPath}; use rpc::proto::{self, update_view}; use settings::Settings; use smallvec::SmallVec; @@ -27,7 +27,6 @@ use std::{ path::{Path, PathBuf}, }; use text::Selection; -use theme::ui::FileName; use util::{ResultExt, TryFutureExt}; use workspace::item::{BreadcrumbText, FollowableItemHandle}; use workspace::{ @@ -566,25 +565,8 @@ impl Item for Editor { style: &theme::Tab, cx: &AppContext, ) -> AnyElement { - fn git_file_status(this: &Editor, cx: &AppContext) -> Option { - let project_entry_id = this - .buffer() - .read(cx) - .as_singleton()? - .read(cx) - .entry_id(cx)?; - let project = this.project.as_ref()?.read(cx); - let path = project.path_for_entry(project_entry_id, cx)?.path; - let worktree = project.worktree_for_entry(project_entry_id, cx)?.read(cx); - worktree.repo_for(&path)?.status_for_path(&worktree, &path) - } - Flex::row() - .with_child(ComponentHost::new(FileName::new( - self.title(cx).to_string(), - git_file_status(self, cx), - FileName::style(style.label.clone(), &cx.global::().theme), - ))) + .with_child(Label::new(self.title(cx).to_string(), style.label.clone()).into_any()) .with_children(detail.and_then(|detail| { let path = path_for_buffer(&self.buffer, detail, false, cx)?; let description = path.to_string_lossy(); diff --git a/crates/project/src/worktree.rs b/crates/project/src/worktree.rs index bfd4eaa43f..cb00fc5c41 100644 --- a/crates/project/src/worktree.rs +++ b/crates/project/src/worktree.rs @@ -55,7 +55,7 @@ use std::{ time::{Duration, SystemTime}, }; use sum_tree::{Bias, Edit, SeekTarget, SumTree, TreeMap, TreeSet}; -use util::{paths::HOME, ResultExt, TakeUntilExt, TryFutureExt}; +use util::{paths::HOME, ResultExt, TryFutureExt}; #[derive(Copy, Clone, PartialEq, Eq, Debug, Hash, PartialOrd, Ord)] pub struct WorktreeId(usize); @@ -187,20 +187,12 @@ impl RepositoryEntry { self.worktree_statuses .iter_from(&repo_path) .take_while(|(key, _)| key.starts_with(&repo_path)) - .map(|(_, status)| status) - // Short circut once we've found the highest level - .take_until(|status| status == &&GitFileStatus::Conflict) - .reduce( - |status_first, status_second| match (status_first, status_second) { - (GitFileStatus::Conflict, _) | (_, GitFileStatus::Conflict) => { - &GitFileStatus::Conflict - } - (GitFileStatus::Modified, _) | (_, GitFileStatus::Modified) => { - &GitFileStatus::Modified - } - _ => &GitFileStatus::Added, - }, - ) + .map(|(path, status)| if path == &repo_path { + status + } else { + &GitFileStatus::Modified + }) + .next() .copied() }) } @@ -4170,15 +4162,13 @@ mod tests { tree.flush_fs_events(cx).await; - dbg!(git_status(&repo)); + git_status(&repo); // Check that non-repo behavior is tracked tree.read_with(cx, |tree, _cx| { let snapshot = tree.snapshot(); let (_, repo) = snapshot.repository_entries.iter().next().unwrap(); - dbg!(&repo.worktree_statuses); - assert_eq!(repo.worktree_statuses.iter().count(), 0); assert_eq!(repo.worktree_statuses.get(&Path::new(A_TXT).into()), None); assert_eq!(repo.worktree_statuses.get(&Path::new(B_TXT).into()), None);