module Github.Repos.Commits (
CommitQueryOption(..),
commitsFor,
commitsFor',
commitsForR,
commitsWithOptionsFor,
commitsWithOptionsFor',
commitsWithOptionsForR,
commit,
commit',
commitR,
diff,
diff',
diffR,
module Github.Data,
) where
import Data.Time.ISO8601 (formatISO8601)
import Data.Vector (Vector)
import qualified Data.ByteString as BS
import qualified Data.ByteString.Char8 as BS8
import qualified Data.Text.Encoding as TE
import Github.Auth
import Github.Data
import Github.Request
renderCommitQueryOption :: CommitQueryOption -> (BS.ByteString, Maybe BS.ByteString)
renderCommitQueryOption (CommitQuerySha sha) = ("sha", Just $ TE.encodeUtf8 sha)
renderCommitQueryOption (CommitQueryPath path) = ("path", Just $ TE.encodeUtf8 path)
renderCommitQueryOption (CommitQueryAuthor author) = ("author", Just $ TE.encodeUtf8 author)
renderCommitQueryOption (CommitQuerySince date) = ("since", Just $ BS8.pack $ formatISO8601 date)
renderCommitQueryOption (CommitQueryUntil date) = ("until", Just $ BS8.pack $ formatISO8601 date)
commitsFor :: Name GithubOwner -> Name Repo -> IO (Either Error (Vector Commit))
commitsFor = commitsFor' Nothing
commitsFor' :: Maybe GithubAuth -> Name GithubOwner -> Name Repo -> IO (Either Error (Vector Commit))
commitsFor' auth user repo =
commitsWithOptionsFor' auth user repo []
commitsForR :: Name GithubOwner -> Name Repo -> Maybe Count -> GithubRequest k (Vector Commit)
commitsForR user repo limit = commitsWithOptionsForR user repo limit []
commitsWithOptionsFor :: Name GithubOwner -> Name Repo -> [CommitQueryOption] -> IO (Either Error (Vector Commit))
commitsWithOptionsFor = commitsWithOptionsFor' Nothing
commitsWithOptionsFor' :: Maybe GithubAuth -> Name GithubOwner -> Name Repo -> [CommitQueryOption] -> IO (Either Error (Vector Commit))
commitsWithOptionsFor' auth user repo opts =
executeRequestMaybe auth $ commitsWithOptionsForR user repo Nothing opts
commitsWithOptionsForR :: Name GithubOwner -> Name Repo -> Maybe Count -> [CommitQueryOption] -> GithubRequest k (Vector Commit)
commitsWithOptionsForR user repo limit opts =
GithubPagedGet ["repos", toPathPart user, toPathPart repo, "commits"] qs limit
where
qs = map renderCommitQueryOption opts
commit :: Name GithubOwner -> Name Repo -> Name Commit -> IO (Either Error Commit)
commit = commit' Nothing
commit' :: Maybe GithubAuth -> Name GithubOwner -> Name Repo -> Name Commit -> IO (Either Error Commit)
commit' auth user repo sha =
executeRequestMaybe auth $ commitR user repo sha
commitR :: Name GithubOwner -> Name Repo -> Name Commit -> GithubRequest k Commit
commitR user repo sha =
GithubGet ["repos", toPathPart user, toPathPart repo, "commits", toPathPart sha] []
diff :: Name GithubOwner -> Name Repo -> Name Commit -> Name Commit -> IO (Either Error Diff)
diff = diff' Nothing
diff' :: Maybe GithubAuth -> Name GithubOwner -> Name Repo -> Name Commit -> Name Commit -> IO (Either Error Diff)
diff' auth user repo base headref =
executeRequestMaybe auth $ diffR user repo base headref
diffR :: Name GithubOwner -> Name Repo -> Name Commit -> Name Commit -> GithubRequest k Diff
diffR user repo base headref =
GithubGet ["repos", toPathPart user, toPathPart repo, "compare", toPathPart base ++ "..." ++ toPathPart headref] []