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::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 }