Finish removing git repository state and scanning logic from worktrees (#27568)

This PR completes the process of moving git repository state storage and
scanning logic from the worktree crate to `project::git_store`.

Release Notes:

- N/A

---------

Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com>
Co-authored-by: Conrad <conrad@zed.dev>
This commit is contained in:
Cole Miller 2025-04-01 17:41:20 -04:00 committed by GitHub
parent 8f25251faf
commit e7290df02b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 3121 additions and 3529 deletions

View file

@ -834,7 +834,7 @@ pub fn split_worktree_update(mut message: UpdateWorktree) -> impl Iterator<Item
let removed_statuses_limit = cmp::min(repo.removed_statuses.len(), limit);
updated_repositories.push(RepositoryEntry {
work_directory_id: repo.work_directory_id,
repository_id: repo.repository_id,
branch_summary: repo.branch_summary.clone(),
updated_statuses: repo
.updated_statuses
@ -885,26 +885,34 @@ pub fn split_repository_update(
) -> impl Iterator<Item = UpdateRepository> {
let mut updated_statuses_iter = mem::take(&mut update.updated_statuses).into_iter().fuse();
let mut removed_statuses_iter = mem::take(&mut update.removed_statuses).into_iter().fuse();
let mut is_first = true;
std::iter::from_fn(move || {
let updated_statuses = updated_statuses_iter
.by_ref()
.take(MAX_WORKTREE_UPDATE_MAX_CHUNK_SIZE)
.collect::<Vec<_>>();
let removed_statuses = removed_statuses_iter
.by_ref()
.take(MAX_WORKTREE_UPDATE_MAX_CHUNK_SIZE)
.collect::<Vec<_>>();
if updated_statuses.is_empty() && removed_statuses.is_empty() && !is_first {
return None;
std::iter::from_fn({
let update = update.clone();
move || {
let updated_statuses = updated_statuses_iter
.by_ref()
.take(MAX_WORKTREE_UPDATE_MAX_CHUNK_SIZE)
.collect::<Vec<_>>();
let removed_statuses = removed_statuses_iter
.by_ref()
.take(MAX_WORKTREE_UPDATE_MAX_CHUNK_SIZE)
.collect::<Vec<_>>();
if updated_statuses.is_empty() && removed_statuses.is_empty() {
return None;
}
Some(UpdateRepository {
updated_statuses,
removed_statuses,
is_last_update: false,
..update.clone()
})
}
is_first = false;
Some(UpdateRepository {
updated_statuses,
removed_statuses,
..update.clone()
})
})
.chain([UpdateRepository {
updated_statuses: Vec::new(),
removed_statuses: Vec::new(),
is_last_update: true,
..update
}])
}
#[cfg(test)]