From 87e06494eadc628a29b0f17b0498f046fd9c3d3c Mon Sep 17 00:00:00 2001 From: Luite Stegeman Date: Wed, 29 Oct 2014 14:18:41 +0100 Subject: [PATCH] restore default options injection --- yesod-bin/Options.hs | 17 +++++++++-------- yesod-bin/yesod-bin.cabal | 1 + 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/yesod-bin/Options.hs b/yesod-bin/Options.hs index 4286f1e2..6d53cad4 100644 --- a/yesod-bin/Options.hs +++ b/yesod-bin/Options.hs @@ -7,6 +7,8 @@ module Options (injectDefaults) where import Control.Applicative import qualified Control.Exception as E import Control.Monad +import Control.Monad.Trans.Except +import Control.Monad.Trans.Reader import Data.Char (isAlphaNum, isSpace, toLower) import Data.List (foldl') import Data.List.Split (splitOn) @@ -62,8 +64,6 @@ configLines = mapMaybe (mkLine . takeWhile (/='#')) . lines -- the map contains the paths with the value that's passed into the reader if the -- command line parser gives no result injectDefaultP :: M.Map [String] String -> [String] -> Parser a -> Parser a -injectDefaultP _ _ = id -{- FIXME Disabled due to changes in optparse-applicative 0.11 injectDefaultP _env _path n@(NilP{}) = n injectDefaultP env path p@(OptP o) | (Option (CmdReader cmds f) props) <- o = @@ -73,20 +73,21 @@ injectDefaultP env path p@(OptP o) in parseri { infoParser = injectDefaultP env (path ++ [normalizeName cmd]) (infoParser parseri) } in OptP (Option (CmdReader cmds (`M.lookup` cmdMap)) props) | (Option (OptReader names (CReader _ rdr) _) _) <- o = - p <|> either' (const empty) pure (msum $ map (rdr <=< (maybe (left $ ErrorMsg "Missing environment variable") right . getEnvValue env path)) names) + p <|> either (const empty) + pure + (runExcept . msum $ + map (maybe (throwE $ ErrorMsg "Missing environment variable") + (runReaderT (unReadM rdr)) + . getEnvValue env path) + names) | (Option (FlagReader names a) _) <- o = p <|> if any ((==Just "1") . getEnvValue env path) names then pure a else empty | otherwise = p - where - right= ReadM . Right - left = ReadM . Left - either' f g (ReadM x) = either f g x injectDefaultP env path (MultP p1 p2) = MultP (injectDefaultP env path p1) (injectDefaultP env path p2) injectDefaultP env path (AltP p1 p2) = AltP (injectDefaultP env path p1) (injectDefaultP env path p2) injectDefaultP _env _path b@(BindP {}) = b --} getEnvValue :: M.Map [String] String -> [String] -> OptName -> Maybe String getEnvValue env path (OptLong l) = M.lookup (path ++ [normalizeName l]) env diff --git a/yesod-bin/yesod-bin.cabal b/yesod-bin/yesod-bin.cabal index 686279e9..00241264 100644 --- a/yesod-bin/yesod-bin.cabal +++ b/yesod-bin/yesod-bin.cabal @@ -84,6 +84,7 @@ executable yesod , http-conduit >= 2.1.4 , project-template >= 0.1.1 , transformers + , transformers-compat , warp >= 1.3.7.5 , wai >= 1.4 , wai-extra