github-0.1: Github/Repos.hs
-- | The Github Repos API, as documented at
-- <http://developer.github.com/v3/repos/>
module Github.Repos (
userRepos
,organizationRepos
,userRepo
,contributors
,contributorsWithAnonymous
,languagesFor
,tagsFor
,branchesFor
,module Github.Data
,RepoPublicity(..)
) where
import Github.Data
import Github.Private
-- | Filter the list of the user's repos using any of these constructors.
data RepoPublicity =
All -- ^ All repos accessible to the user.
| Owner -- ^ Only repos owned by the user.
| Public -- ^ Only public repos.
| Private -- ^ Only private repos.
| Member -- ^ Only repos to which the user is a member but not an owner.
deriving (Show, Eq)
-- | The repos for a user, by their login. Can be restricted to just repos they
-- own, are a member of, or publicize. Private repos are currently not
-- supported.
--
-- > userRepos "mike-burns" All
userRepos :: String -> RepoPublicity -> IO (Either Error [Repo])
userRepos userName All =
githubGetWithQueryString ["users", userName, "repos"] "type=all"
userRepos userName Owner =
githubGetWithQueryString ["users", userName, "repos"] "type=owner"
userRepos userName Member =
githubGetWithQueryString ["users", userName, "repos"] "type=member"
userRepos userName Public =
githubGetWithQueryString ["users", userName, "repos"] "type=public"
userRepos userName Private =
return $ Left $ UserError "Cannot access private repos using userRepos"
-- | The repos for an organization, by the organization name.
--
-- > organizationRepos "thoughtbot"
organizationRepos :: String -> IO (Either Error [Repo])
organizationRepos orgName = githubGet ["orgs", orgName, "repos"]
-- | Details on a specific repo, given the owner and repo name.
--
-- > userRepo "mike-burns" "github"
userRepo :: String -> String -> IO (Either Error Repo)
userRepo userName repoName = githubGet ["repos", userName, repoName]
-- | The contributors to a repo, given the owner and repo name.
--
-- > contributors "thoughtbot" "paperclip"
contributors :: String -> String -> IO (Either Error [Contributor])
contributors userName repoName =
githubGet ["repos", userName, repoName, "contributors"]
-- | The contributors to a repo, including anonymous contributors (such as
-- deleted users or git commits with unknown email addresses), given the owner
-- and repo name.
--
-- > contributorsWithAnonymous "thoughtbot" "paperclip"
contributorsWithAnonymous :: String -> String -> IO (Either Error [Contributor])
contributorsWithAnonymous userName repoName =
githubGetWithQueryString
["repos", userName, repoName, "contributors"]
"anon=true"
-- | The programming languages used in a repo along with the number of
-- characters written in that language. Takes the repo owner and name.
--
-- > languagesFor "mike-burns" "ohlaunch"
languagesFor :: String -> String -> IO (Either Error [Language])
languagesFor userName repoName = do
result <- githubGet ["repos", userName, repoName, "languages"]
return $ either Left (Right . getLanguages) result
-- | The git tags on a repo, given the repo owner and name.
--
-- > tagsFor "thoughtbot" "paperclip"
tagsFor :: String -> String -> IO (Either Error [Tag])
tagsFor userName repoName =
githubGet ["repos", userName, repoName, "tags"]
-- | The git branches on a repo, given the repo owner and name.
--
-- > branchesFor "thoughtbot" "paperclip"
branchesFor :: String -> String -> IO (Either Error [Branch])
branchesFor userName repoName =
githubGet ["repos", userName, repoName, "branches"]