Ensure proto::UpdateWorktree::removed_entries doesn't exceed chunk size

This was causing the database to panic because we were trying to remove too
many entries at once.
This commit is contained in:
Antonio Scandurra 2023-01-26 17:22:45 +01:00
parent 74aeec360d
commit eca6115e4b

View File

@ -9,7 +9,7 @@ use std::fmt;
use std::{
cmp,
fmt::Debug,
io, iter, mem,
io, iter,
time::{Duration, SystemTime, UNIX_EPOCH},
};
@ -489,16 +489,26 @@ pub fn split_worktree_update(
return None;
}
let chunk_size = cmp::min(message.updated_entries.len(), max_chunk_size);
let updated_entries = message.updated_entries.drain(..chunk_size).collect();
done = message.updated_entries.is_empty();
let updated_entries_chunk_size = cmp::min(message.updated_entries.len(), max_chunk_size);
let updated_entries = message
.updated_entries
.drain(..updated_entries_chunk_size)
.collect();
let removed_entries_chunk_size = cmp::min(message.removed_entries.len(), max_chunk_size);
let removed_entries = message
.removed_entries
.drain(..removed_entries_chunk_size)
.collect();
done = message.updated_entries.is_empty() && message.removed_entries.is_empty();
Some(UpdateWorktree {
project_id: message.project_id,
worktree_id: message.worktree_id,
root_name: message.root_name.clone(),
abs_path: message.abs_path.clone(),
updated_entries,
removed_entries: mem::take(&mut message.removed_entries),
removed_entries,
scan_id: message.scan_id,
is_last_update: done && message.is_last_update,
})