git-vogue-0.2.0.0: src/git-vogue.hs
--
-- Copyright © 2013-2015 Anchor Systems, Pty Ltd and Others
--
-- The code in this file, and the program it is a part of, is
-- made available to you by its authors as open source software:
-- you can redistribute it and/or modify it under the terms of
-- the 3-clause BSD licence.
--
{-# LANGUAGE OverloadedStrings #-}
module Main where
import qualified Data.Text.Lazy as T
import Git.Vogue.PluginDiscoverer.Libexec
import Git.Vogue.VCS.Git
import Options.Applicative
import Git.Vogue
import Git.Vogue.Types
import Git.Vogue.PluginCommon
import Paths_git_vogue
-- | Parse command-line options.
optionsParser :: Parser VogueOptions
optionsParser = flip Options
<$> commandParser
<*> searchP
where
searchP :: Parser SearchMode
searchP = fileList <|> allFlag
fileList = FindSpecific <$> some (argument str (metavar "FILE"))
allFlag = flag FindChanged FindAll
( long "all"
<> short 'A'
<> help "Apply to all files, not just changed files."
)
commandParser :: Parser VogueCommand
commandParser = subparser
( pureSubCommand "init"
CmdInit
"Initialise git-vogue support in a git repo"
<> pureSubCommand "verify"
CmdVerify
"Check git-vogue support is all legit"
<> pureSubCommand "plugins"
CmdPlugins
"List installed plugins."
<> command "disable" (info (parseEnableDisable CmdDisable)
(progDesc "Disable a plugin"))
<> command "enable" (info (parseEnableDisable CmdEnable)
(progDesc "Enable a plugin"))
<> pureSubCommand "check"
CmdRunCheck
"Run check plugins on files in a git repo"
<> pureSubCommand "fix"
CmdRunFix
"Run fix plugins on files a git repo"
)
parseEnableDisable :: (PluginName -> VogueCommand) -> Parser VogueCommand
parseEnableDisable ctor = ctor <$> argument (PluginName . T.pack <$> str)
(metavar "PLUGIN")
-- | Parse the command line and run the command.
main :: IO ()
main = do
opt <- execParser opts
libexec_path <- getLibexecDir
runCommand (optCommand opt)
(optSearch opt)
gitVCS
(libExecDiscoverer libexec_path)
where
opts = info (helper <*> optionsParser)
( fullDesc
<> progDesc "Make your Haskell git repository fashionable"
<> header "git-vogue - git integration for fashionable Haskell" )