packages feed

hackage-proxy-0.1.0.0: hackage-proxy.hs

{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
import           ClassyPrelude
import           HackageProxy
import           Options.Applicative

hackageProxySettings :: Parser HackageProxySettings
hackageProxySettings = HackageProxySettings
    <$> option
        ( long "port"
       <> help "Port to listen on"
       <> short 'p'
       <> value 4200
       <> metavar "PORT"
        )
    <*> (fixNoBounds <$> many (strOption
        ( long "no-bounds"
       <> help "Packages to drop version bounds from"
       <> short 'n'
       <> metavar "PACKAGE"
        )))
    <*> (pack <$> strOption
        ( long "source"
       <> help "Hackage source URL we're proxying from"
       <> short 's'
       <> value "http://hackage.haskell.org/packages/archive"
       <> metavar "URL"
        ))
  where
    fixNoBounds [] = pack $ words "base process Cabal directory template-haskell"
    fixNoBounds x = pack $ map pack x

main :: IO ()
main = do
    hps <- execParser opts
    putStrLn $ "Listening on port: " ++ show (hpsPort hps)
    putStrLn $ "Dropping bounds for: " ++ unwords (unpack $ hpsNoBounds hps)
    putStrLn $ "Downloading from: " ++ hpsSource hps
    runHackageProxy hps
  where
    opts = info (helper <*> hackageProxySettings)
        ( fullDesc
       <> progDesc "Run a Hackage proxy, modifying packages in some way."
       <> header "hackage-proxy - Proxy for Hackage packages."
        )