module Git.Repository where
import Control.Exception.Lifted
import Control.Monad
import Control.Monad.IO.Class
import Control.Monad.Trans.Control
import Git.Types
import System.Directory
withNewRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m)
=> RepositoryFactory n m r
-> FilePath -> n a -> m a
withNewRepository factory path action = do
liftIO $ do
exists <- doesDirectoryExist path
when exists $ removeDirectoryRecursive path
a <- withRepository' factory RepositoryOptions
{ repoPath = path
, repoWorkingDir = Nothing
, repoIsBare = True
, repoAutoCreate = True
} action
liftIO $ do
exists <- doesDirectoryExist path
when exists $ removeDirectoryRecursive path
return a
withNewRepository' :: (MonadGit r n, MonadBaseControl IO n,
MonadBaseControl IO m, MonadIO m)
=> RepositoryFactory n m r -> FilePath -> n a -> m a
withNewRepository' factory path action =
bracket_ recover recover $
withRepository' factory RepositoryOptions
{ repoPath = path
, repoWorkingDir = Nothing
, repoIsBare = True
, repoAutoCreate = True
} action
where
recover = liftIO $ do
exists <- doesDirectoryExist path
when exists $ removeDirectoryRecursive path
withRepository' :: (MonadGit r n, MonadBaseControl IO n, MonadIO m)
=> RepositoryFactory n m r -> RepositoryOptions -> n a -> m a
withRepository' factory opts action = do
repo <- openRepository factory opts
runRepository factory repo $ action `finally` closeRepository
withRepository :: (MonadGit r n, MonadBaseControl IO n, MonadIO m)
=> RepositoryFactory n m r -> FilePath -> n a -> m a
withRepository factory path =
withRepository' factory defaultRepositoryOptions { repoPath = path }