use super::Buffer;
use crate::vcs::{self, LineStatus};
impl Buffer {
pub fn refresh_vcs_base(&mut self) {
let Some(p) = self.path.as_deref() else {
return;
};
self.vcs_base = vcs::head_blob_lines(p);
self.vcs_diff.borrow_mut().take();
}
pub fn vcs_statuses(&self) -> Vec<Option<LineStatus>> {
let Some(base) = self.vcs_base.as_ref() else {
return Vec::new();
};
{
let cache = self.vcs_diff.borrow();
if let Some((v, statuses)) = cache.as_ref()
&& *v == self.version
{
return statuses.clone();
}
}
let statuses = vcs::diff_line_status(base, &self.lines);
*self.vcs_diff.borrow_mut() = Some((self.version, statuses.clone()));
statuses
}
pub fn has_vcs_changes(&self) -> bool {
if self.vcs_base.is_none() {
return false;
}
self.vcs_statuses().iter().any(|s| s.is_some())
}
}