use gix::hash::ObjectId; use serde::Serialize; use serde::de::DeserializeOwned; use crate::GitRepository; use crate::error::Error; pub const IMMUTABLE_TTL: u64 = 0; pub const DERIVED_TTL: u64 = 60; impl GitRepository { pub(crate) fn tip_id(&self) -> Result { let repo = self.repo()?; repo.head_id() .map(|id| id.detach()) .map_err(|e| Error::Ref(e.to_string())) } pub(crate) fn cache_get_oid(&self, kind: &str, id: &ObjectId) -> Option where T: DeserializeOwned + Send + Sync, { let k = format!("{kind}.{id}"); self.cache.object_pool_get_sync(&k) } pub(crate) fn cache_put_oid(&self, kind: &str, id: &ObjectId, v: &T) { let k = format!("{kind}.{id}"); self.cache.set_sync_with_ttl(&k, v, IMMUTABLE_TTL); } pub(crate) fn cache_get_rev( &self, module: &str, func: &str, key_part: &str, tip: ObjectId, ) -> Option where T: DeserializeOwned + Send + Sync, { let k = format!("{module}.{func}.{key_part}:{tip}"); self.cache.get_sync(&k) } pub(crate) fn cache_put_rev( &self, module: &str, func: &str, key_part: &str, tip: ObjectId, v: &T, ) { let k = format!("{module}.{func}.{key_part}:{tip}"); self.cache.set_sync_with_ttl(&k, v, DERIVED_TTL); } }