hgithub-0.1.0: bin/hgithub.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Main where
import Data.Version (showVersion)
import Control.Applicative ((<$>))
import Paths_hgithub (version)
import System.Console.CmdArgs.Implicit
import System.Directory (doesFileExist)
import System.Exit
import Network.GitHub
main :: IO ()
main = (processCmd =<<) $ cmdArgs $
modes
[ cmdRepositoryList
, cmdRepositoryCreate
]
&= summary versionString
&= program "hgithub"
versionString :: String
versionString =
"hgithub " ++ showVersion version ++ " Copyright (c) 2012 Vo Minh Thu."
data Cmd =
CmdRepositoryList
| CmdRepositoryCreate
{ cmdRepositoryCreateName :: String
, cmdRepositoryCreateDescription :: Maybe String
}
deriving (Data, Typeable)
cmdRepositoryList :: Cmd
cmdRepositoryList = CmdRepositoryList
&= help "List repositories you have access to."
&= explicit
&= name "list-repositories"
cmdRepositoryCreate :: Cmd
cmdRepositoryCreate = CmdRepositoryCreate
{ cmdRepositoryCreateName = def
&= typ "NAME"
&= explicit
&= name "name"
&= help "Repository name."
, cmdRepositoryCreateDescription = def
&= typ "STRING"
&= explicit
&= name "description"
&= help "Repository description."
} &= help "Create a new repository."
&= explicit
&= name "create-repository"
processCmd :: Cmd -> IO ()
processCmd CmdRepositoryList{..} = do
usernamePassword <- readUsernamePassword "github-username-password.txt"
mrepos <- repositoryList usernamePassword
case mrepos of
Nothing -> putStrLn "Some error occured."
Just repos -> mapM_ print repos
processCmd CmdRepositoryCreate{..} = do
usernamePassword <- readUsernamePassword "github-username-password.txt"
mrepo <- repositoryCreate usernamePassword
cmdRepositoryCreateName
cmdRepositoryCreateDescription
case mrepo of
Nothing -> putStrLn "Some error occured."
Just repo -> print repo
readUsernamePassword :: FilePath -> IO String
readUsernamePassword filename = do
b <- doesFileExist filename
if b
then (head . lines) <$> readFile filename
else do
putStrLn $ "API key file `" ++ filename ++ "` not found."
exitWith (ExitFailure 1)