module Git.Libgit2.Backend
( odbBackendAdd
, F'git_odb_backend_read_callback
, F'git_odb_backend_read_prefix_callback
, F'git_odb_backend_readstream_callback
, F'git_odb_backend_read_header_callback
, F'git_odb_backend_write_callback
, F'git_odb_backend_writestream_callback
, F'git_odb_backend_exists_callback
, F'git_odb_backend_refresh_callback
, F'git_odb_backend_foreach_callback
, F'git_odb_backend_writepack_callback
, F'git_odb_backend_free_callback
, F'git_odb_writepack_add_callback
, F'git_odb_writepack_commit_callback
, F'git_odb_writepack_free_callback
)
where
import Bindings.Libgit2
import Foreign.C.Types
import Foreign.ForeignPtr
import Foreign.Marshal.Alloc
import Foreign.Ptr
import Foreign.Storable
import Git.Libgit2.Types
type F'git_odb_backend_read_callback =
Ptr (Ptr ()) -> Ptr CSize -> Ptr C'git_otype -> Ptr C'git_odb_backend
-> Ptr C'git_oid -> IO CInt
type F'git_odb_backend_read_prefix_callback =
Ptr C'git_oid -> Ptr (Ptr ()) -> Ptr CSize -> Ptr C'git_otype
-> Ptr C'git_odb_backend -> Ptr C'git_oid -> CSize -> IO CInt
type F'git_odb_backend_readstream_callback =
Ptr (Ptr C'git_odb_stream) -> Ptr C'git_odb_backend -> Ptr C'git_oid
-> IO CInt
type F'git_odb_backend_read_header_callback =
Ptr CSize -> Ptr C'git_otype -> Ptr C'git_odb_backend -> Ptr C'git_oid
-> IO CInt
type F'git_odb_backend_write_callback =
Ptr C'git_oid -> Ptr C'git_odb_backend -> Ptr () -> CSize -> C'git_otype
-> IO CInt
type F'git_odb_backend_writestream_callback =
Ptr (Ptr C'git_odb_stream) -> Ptr C'git_odb_backend -> CSize
-> C'git_otype -> IO CInt
type F'git_odb_backend_exists_callback =
Ptr C'git_odb_backend -> Ptr C'git_oid -> CInt -> IO CInt
type F'git_odb_backend_refresh_callback = Ptr C'git_odb_backend -> IO CInt
type F'git_odb_backend_foreach_callback =
Ptr C'git_odb_backend -> C'git_odb_foreach_cb -> Ptr () -> IO CInt
type F'git_odb_backend_writepack_callback =
Ptr (Ptr C'git_odb_writepack) -> Ptr C'git_odb_backend
-> C'git_transfer_progress_callback -> Ptr () -> IO CInt
type F'git_odb_backend_free_callback = Ptr C'git_odb_backend -> IO ()
type F'git_odb_writepack_add_callback =
Ptr C'git_odb_writepack -> Ptr () -> CSize -> Ptr C'git_transfer_progress
-> IO CInt
type F'git_odb_writepack_commit_callback =
Ptr C'git_odb_writepack -> Ptr C'git_transfer_progress -> IO CInt
type F'git_odb_writepack_free_callback = Ptr C'git_odb_writepack -> IO ()
odbBackendAdd :: Repository -> Ptr C'git_odb_backend -> Int
-> IO (Either String Repository)
odbBackendAdd repo backend priority =
withForeignPtr (repoObj repo) $ \repoPtr ->
alloca $ \odbPtr -> do
r <- c'git_repository_odb odbPtr repoPtr
if r < 0
then return (Left "Cannot get repository ODB")
else do
odb <- peek odbPtr
r2 <- c'git_odb_add_backend odb backend (fromIntegral priority)
if r2 < 0
then return (Left "Cannot add backend to repository ODB")
else return (Right repo)