packages feed

hackage-mirror-0.1.0.0: main/Main.hs

{-|
Module      : Main
Description : Create your own a mirror of Hackage (CLI)
Copyright   : (c) FPComplete.com, 2015
License     : MIT
Maintainer  : John Wiegley <johnw@fpcomplete.com>
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