Restore trickle up git status to folder

co-authored-by: max <max@zed.dev>
This commit is contained in:
Mikayla Maki 2023-05-15 16:17:18 -07:00
parent f59256f761
commit 4d40aa5d6f
No known key found for this signature in database

View file

@ -55,7 +55,7 @@ use std::{
time::{Duration, SystemTime}, time::{Duration, SystemTime},
}; };
use sum_tree::{Bias, Edit, SeekTarget, SumTree, TreeMap, TreeSet}; use sum_tree::{Bias, Edit, SeekTarget, SumTree, TreeMap, TreeSet};
use util::{paths::HOME, ResultExt, TryFutureExt}; use util::{paths::HOME, ResultExt, TryFutureExt, TakeUntilExt};
#[derive(Copy, Clone, PartialEq, Eq, Debug, Hash, PartialOrd, Ord)] #[derive(Copy, Clone, PartialEq, Eq, Debug, Hash, PartialOrd, Ord)]
pub struct WorktreeId(usize); pub struct WorktreeId(usize);
@ -187,14 +187,20 @@ impl RepositoryEntry {
self.statuses self.statuses
.iter_from(&repo_path) .iter_from(&repo_path)
.take_while(|(key, _)| key.starts_with(&repo_path)) .take_while(|(key, _)| key.starts_with(&repo_path))
.map(|(path, status)| { // Short circut once we've found the highest level
if path == &repo_path { .take_until(|(_, status)| status == &&GitFileStatus::Conflict)
status .map(|(_, status)| status)
} else { .reduce(
&GitFileStatus::Modified |status_first, status_second| match (status_first, status_second) {
} (GitFileStatus::Conflict, _) | (_, GitFileStatus::Conflict) => {
}) &GitFileStatus::Conflict
.next() }
(GitFileStatus::Modified, _) | (_, GitFileStatus::Modified) => {
&GitFileStatus::Modified
}
_ => &GitFileStatus::Added,
},
)
.copied() .copied()
}) })
} }