Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
storage/git: impl git::repository traits for Repository
Fintan Halpenny committed 24 days ago
commit fb408ba1bb1170e7e01cd6f7e4720b4339f36d9a
parent e1867632fb03a1a75b73087e8ce5fb5d0846187c
1 file changed +124 -0
modified crates/radicle/src/storage/git.rs
@@ -1127,6 +1127,130 @@ impl sigrefs::git::reference::Writer for Repository {
    }
}

+
impl crate::git::repository::ObjectReader for Repository {
+
    fn blob(
+
        &self,
+
        oid: Oid,
+
    ) -> Result<Option<git::repository::Blob>, git::repository::object::error::read::BlobError>
+
    {
+
        crate::git::repository::ObjectReader::blob(&self.backend, oid)
+
    }
+

+
    fn blob_at<P>(
+
        &self,
+
        commit: Oid,
+
        path: &P,
+
    ) -> Result<Option<git::repository::Blob>, git::repository::object::error::read::BlobAtError>
+
    where
+
        P: AsRef<Path>,
+
    {
+
        crate::git::repository::ObjectReader::blob_at(&self.backend, commit, path)
+
    }
+

+
    fn commit(
+
        &self,
+
        oid: Oid,
+
    ) -> Result<Option<git::repository::Commit>, git::repository::object::error::read::CommitError>
+
    {
+
        crate::git::repository::ObjectReader::commit(&self.backend, oid)
+
    }
+

+
    fn exists(&self, oid: Oid) -> Result<bool, git::repository::object::error::read::ExistsError> {
+
        crate::git::repository::ObjectReader::exists(&self.backend, oid)
+
    }
+
}
+

+
impl crate::git::repository::ObjectWriter for Repository {
+
    fn write_blob(
+
        &self,
+
        content: &[u8],
+
    ) -> Result<Oid, crate::git::repository::object::error::write::BlobError> {
+
        crate::git::repository::ObjectWriter::write_blob(&self.backend, content)
+
    }
+

+
    fn write_tree(
+
        &self,
+
        entries: &[crate::git::repository::types::TreeEntry],
+
    ) -> Result<Oid, crate::git::repository::object::error::write::TreeError> {
+
        crate::git::repository::ObjectWriter::write_tree(&self.backend, entries)
+
    }
+

+
    fn write_commit(
+
        &self,
+
        bytes: &[u8],
+
    ) -> Result<Oid, crate::git::repository::object::error::write::CommitError> {
+
        crate::git::repository::ObjectWriter::write_commit(&self.backend, bytes)
+
    }
+
}
+

+
impl crate::git::repository::RefWriter for Repository {
+
    fn write_ref<R>(
+
        &self,
+
        name: &R,
+
        target: crate::git::repository::RefTarget,
+
        reflog: &str,
+
    ) -> Result<(), crate::git::repository::reference::error::write::WriteRefError>
+
    where
+
        R: AsRef<git::fmt::RefStr>,
+
    {
+
        crate::git::repository::RefWriter::write_ref(&self.backend, name, target, reflog)
+
    }
+

+
    fn delete_ref<R>(
+
        &self,
+
        name: &R,
+
    ) -> Result<(), crate::git::repository::reference::error::write::DeleteRefError>
+
    where
+
        R: AsRef<git::fmt::RefStr>,
+
    {
+
        crate::git::repository::RefWriter::delete_ref(&self.backend, name)
+
    }
+
}
+

+
impl crate::git::repository::SymbolicRefWriter for Repository {
+
    fn write_symbolic_ref<R>(
+
        &self,
+
        name: &R,
+
        target: git::repository::SymbolicRefTarget,
+
        reflog: &str,
+
    ) -> Result<(), git::repository::reference::error::write::SymbolicWriteError>
+
    where
+
        R: AsRef<radicle_git_ref_format::RefStr>,
+
    {
+
        crate::git::repository::SymbolicRefWriter::write_symbolic_ref(
+
            &self.backend,
+
            name,
+
            target,
+
            reflog,
+
        )
+
    }
+
}
+

+
impl crate::git::repository::RefReader for Repository {
+
    type References<'a> =
+
        <git::raw::Repository as crate::git::repository::RefReader>::References<'a>;
+

+
    fn ref_target<R>(
+
        &self,
+
        name: &R,
+
    ) -> Result<Option<Oid>, crate::git::repository::reference::error::read::RefTargetError>
+
    where
+
        R: AsRef<git::fmt::RefStr>,
+
    {
+
        crate::git::repository::RefReader::ref_target(&self.backend, name)
+
    }
+

+
    fn list_refs<'a, P>(
+
        &'a self,
+
        pattern: &P,
+
    ) -> Result<Self::References<'a>, crate::git::repository::reference::error::read::ListRefsError>
+
    where
+
        P: AsRef<git::fmt::refspec::PatternStr>,
+
    {
+
        crate::git::repository::RefReader::list_refs(&self.backend, pattern)
+
    }
+
}
+

pub mod trailers {
    use std::str::FromStr;