Initial commit
This commit is contained in:
89
app/Main.hs
Normal file
89
app/Main.hs
Normal file
@@ -0,0 +1,89 @@
|
||||
module Main where
|
||||
|
||||
import Control.Monad
|
||||
import Data.ByteString ( ByteString )
|
||||
import Data.Functor ( (<&>) )
|
||||
import Data.Semigroup ( (<>) )
|
||||
import GHup
|
||||
import GitHub.Auth
|
||||
import HPath
|
||||
import Options.Applicative
|
||||
import System.Exit
|
||||
|
||||
|
||||
|
||||
data Options = Options
|
||||
{ optCommand :: Command
|
||||
}
|
||||
|
||||
data Command
|
||||
= Fork ForkOptions
|
||||
| Config ConfigOptions
|
||||
| Del DelOptions
|
||||
|
||||
data ForkOptions = ForkOptions
|
||||
{
|
||||
repo :: ByteString
|
||||
, newBranch :: Maybe ByteString
|
||||
, repoBasePath :: Maybe ByteString
|
||||
}
|
||||
|
||||
data ConfigOptions = ConfigOptions {
|
||||
oAuth :: ByteString
|
||||
}
|
||||
|
||||
|
||||
data DelOptions = DelOptions {
|
||||
del :: ByteString
|
||||
}
|
||||
|
||||
opts :: Parser Command
|
||||
opts = subparser
|
||||
( command "fork" (Fork <$> (info (forkOpts <**> helper) idm))
|
||||
<> command "config" (Config <$> (info (configOpts <**> helper) idm))
|
||||
<> command "delete" (Del <$> (info (delOpts <**> helper) idm))
|
||||
)
|
||||
|
||||
configOpts :: Parser ConfigOptions
|
||||
configOpts = ConfigOptions <$> strOption
|
||||
(short 'o' <> long "oauth" <> metavar "OAUTH" <> help "The OAUTH token")
|
||||
|
||||
forkOpts :: Parser ForkOptions
|
||||
forkOpts =
|
||||
ForkOptions
|
||||
<$> strOption
|
||||
(short 'r' <> long "repo" <> metavar "REPO" <> help
|
||||
"The repository to fork"
|
||||
)
|
||||
<*> optional
|
||||
(strOption
|
||||
(short 'b' <> long "branch" <> metavar "BRANCH" <> help
|
||||
"The branch to create after cloning the fork"
|
||||
)
|
||||
)
|
||||
<*> optional
|
||||
(strOption
|
||||
(short 'p' <> long "repo-path" <> metavar "REPO_PATH" <> help
|
||||
"The base path where to clone the repository to"
|
||||
)
|
||||
)
|
||||
|
||||
delOpts :: Parser DelOptions
|
||||
delOpts = DelOptions <$> strOption
|
||||
(short 'r' <> long "repo" <> metavar "REPO" <> help "The REPO fork to delete")
|
||||
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
e <- execParser (info (opts <**> helper) idm) >>= \case
|
||||
Fork (ForkOptions {..}) -> do
|
||||
case repoBasePath of
|
||||
Just rbp -> case parseAbs rbp of
|
||||
Just p -> prepareRepoForPR' repo (Just p) newBranch
|
||||
Nothing -> fail "Repo path must be absolute"
|
||||
Nothing -> prepareRepoForPR' repo Nothing newBranch
|
||||
Config (ConfigOptions {..}) -> writeSettings (OAuth oAuth) <&> Right
|
||||
Del (DelOptions {..} ) -> deleteFork' del
|
||||
case e of
|
||||
Right () -> putStrLn "success!"
|
||||
Left t -> die t
|
||||
Reference in New Issue
Block a user