gitlab-haskell-0.1.5: src/GitLab/API/Repositories.hs
{-# LANGUAGE OverloadedStrings #-}
{-|
Module : Repositories
Description : Queries about project repositories
Copyright : (c) Rob Stewart, Heriot-Watt University, 2019
License : BSD3
Maintainer : robstewart57@gmail.com
Stability : stable
-}
module GitLab.API.Repositories where
import Control.Monad.IO.Unlift
import qualified Data.ByteString.Lazy as BSL
import qualified Data.Text as T
import GitLab.Types
import GitLab.WebRequests.GitLabWebCalls
-- | returns a list of repository files and directories in a project.
repositories :: (MonadIO m)
=> Project -- ^ the project
-> GitLab m [Repository]
repositories project = repositories' (project_id project)
-- | returns a list of repository files and directories in a project
-- given its project ID.
repositories' :: (MonadIO m)
=> Int -- ^ the project ID
-> GitLab m [Repository]
repositories' projectId =
gitlab addr
where
addr =
"/projects/"
<> T.pack (show projectId)
<> "/repository"
<> "/tree"
-- | get a file archive of the repository files. For example:
--
-- > getFileArchive myProject TarGz "/tmp/myProject.tar.gz"
getFileArchive :: (MonadIO m)
=> Project -- ^ project
-> ArchiveFormat -- ^ file format
-> FilePath -- ^ file path to store the archive
-> GitLab m ()
getFileArchive project = getFileArchive' (project_id project)
-- | get a file archive of the repository files using the project's
-- ID. For example:
--
-- > getFileArchive' 3453 Zip "/tmp/myProject.zip"
getFileArchive' :: (MonadIO m)
=> Int -- ^ project ID
-> ArchiveFormat -- ^ file format
-> FilePath -- ^ file path to store the archive
-> GitLab m ()
getFileArchive' projectId format path = do
archiveData <- gitlabReqByteString addr
liftIO $ BSL.writeFile path archiveData
where
addr =
"/projects/"
<> T.pack (show projectId)
<> "/repository"
<> "/archive"
<> T.pack (show format)