eba4fd1
use crate::GitBaby;
use crate::cache::key::{blob_exists_key, rev_key};
use crate::cache::try_global_cache;
use crate::error::BabyError;
fn canonical_repo_dir(raw: std::path::PathBuf) -> Result<std::path::PathBuf, BabyError> {
std::fs::canonicalize(&raw).map_err(|source| BabyError::Io { path: raw, source })
}
pub async fn hook_ref_updated(git: &GitBaby, name: &str) -> Result<(), BabyError> {
let Some(pools) = try_global_cache() else {
return Ok(());
};
let repo_dir = git.facade().git_repo_dir().await?;
let repo_dir = canonical_repo_dir(repo_dir)?;
pools.store().remove(&rev_key(&repo_dir, name));
Ok(())
}
pub async fn hook_blob_written(git: &GitBaby, oid: &gix::ObjectId) -> Result<(), BabyError> {
let Some(pools) = try_global_cache() else {
return Ok(());
};
let repo_dir = git.facade().git_repo_dir().await?;
let repo_dir = canonical_repo_dir(repo_dir)?;
pools.store().remove(&blob_exists_key(&repo_dir, oid));
Ok(())
}
/// Invalidate the entire main cache store. Call after operations that can
/// change many refs and/or prune objects at once (e.g. `git fetch`,
/// `git gc --prune=now`, `git fast-import`), where per-key invalidation would
/// be incomplete.
pub async fn flush_cache() -> Result<(), BabyError> {
let Some(pools) = try_global_cache() else {
return Ok(());
};
pools.clear().await
}