{-| Module : Main Description : Create your own a mirror of Hackage (CLI) Copyright : (c) FPComplete.com, 2015 License : MIT Maintainer : John Wiegley Stability : experimental Portability : POSIX This module is command line interface to the Hackage.Mirror library. -} import Control.Applicative ( Applicative((<*>)), (<$>) ) import Hackage.Mirror ( Options(..), mirrorHackage ) import Options.Applicative ( helper, execParser, value, switch, strOption, progDesc, long, info, help, header, fullDesc, (<>) ) import Control.Monad.Logger (filterLogger, LogLevel(LevelDebug), runStdoutLoggingT) main :: IO () main = do opts <- execParser optsParser runStdoutLoggingT (filterLogger (logFilter opts) (mirrorHackage opts)) where optsParser = info (helper <*> options) (fullDesc <> progDesc "Mirror the necessary parts of Hackage" <> header "hackage-mirror - mirror only the minimum") options = Options <$> switch (long "verbose" <> help "Display verbose output") <*> switch (long "rebuild" <> help "Don't mirror; used for rebuilding") <*> strOption (long "from" <> value "http://hackage.haskell.org" <> help "Base URL to mirror from") <*> strOption (long "to" <> help "Base URL of server mirror to") <*> strOption (long "access" <> value "" <> help "S3 access key") <*> strOption (long "secret" <> value "" <> help "S3 secret key") logFilter opts _ LevelDebug = verbose opts logFilter _ _ _ = True