diff options
Diffstat (limited to 'src/Command.hs')
-rw-r--r-- | src/Command.hs | 49 |
1 files changed, 23 insertions, 26 deletions
diff --git a/src/Command.hs b/src/Command.hs index 0d333e8..0b1c790 100644 --- a/src/Command.hs +++ b/src/Command.hs @@ -9,11 +9,10 @@ module Command ( tfail, CommandInput(..), getCommonOptions, - getConfigPath, - getConfig, + getRootPath, getJobRoot, getRepo, getDefaultRepo, tryGetDefaultRepo, - getEvalInput, - getTerminalOutput, + getEvalInput, cmdEvalWith, + getOutput, getStorageDir, ) where @@ -28,13 +27,12 @@ import Data.Text.IO qualified as T import System.Console.GetOpt import System.Exit -import System.FilePath import System.IO import Config import Eval +import Output import Repo -import Terminal data CommonOptions = CommonOptions { optJobs :: Int @@ -100,34 +98,28 @@ tfail err = liftIO $ do data CommandInput = CommandInput { ciOptions :: CommonOptions - , ciConfigPath :: Maybe FilePath - , ciConfig :: Either String Config + , ciRootPath :: FilePath + , ciJobRoot :: JobRoot , ciContainingRepo :: Maybe Repo , ciOtherRepos :: [ ( RepoName, Repo ) ] - , ciTerminalOutput :: TerminalOutput - , ciStorageDir :: Maybe FilePath + , ciOutput :: Output + , ciStorageDir :: FilePath } getCommonOptions :: CommandExec CommonOptions getCommonOptions = CommandExec (asks ciOptions) -getConfigPath :: CommandExec FilePath -getConfigPath = do - CommandExec (asks ciConfigPath) >>= \case - Nothing -> tfail $ "no job file found" - Just path -> return path +getRootPath :: CommandExec FilePath +getRootPath = CommandExec (asks ciRootPath) -getConfig :: CommandExec Config -getConfig = do - CommandExec (asks ciConfig) >>= \case - Left err -> fail err - Right config -> return config +getJobRoot :: CommandExec JobRoot +getJobRoot = CommandExec (asks ciJobRoot) getRepo :: RepoName -> CommandExec Repo getRepo name = do CommandExec (asks (lookup name . ciOtherRepos)) >>= \case Just repo -> return repo - Nothing -> tfail $ "repo `" <> textRepoName name <> "' not declared" + Nothing -> tfail $ "repo ‘" <> textRepoName name <> "’ not declared" getDefaultRepo :: CommandExec Repo getDefaultRepo = do @@ -140,14 +132,19 @@ tryGetDefaultRepo = CommandExec $ asks ciContainingRepo getEvalInput :: CommandExec EvalInput getEvalInput = CommandExec $ do + eiJobRoot <- asks ciJobRoot + eiRootPath <- asks ciRootPath + eiCurrentIdRev <- return [] eiContainingRepo <- asks ciContainingRepo eiOtherRepos <- asks ciOtherRepos return EvalInput {..} -getTerminalOutput :: CommandExec TerminalOutput -getTerminalOutput = CommandExec (asks ciTerminalOutput) +cmdEvalWith :: (EvalInput -> EvalInput) -> Eval a -> CommandExec a +cmdEvalWith f ev = do + either (tfail . textEvalError) return =<< liftIO . runEval ev . f =<< getEvalInput + +getOutput :: CommandExec Output +getOutput = CommandExec (asks ciOutput) getStorageDir :: CommandExec FilePath -getStorageDir = CommandExec (asks ciStorageDir) >>= \case - Just dir -> return dir - Nothing -> ((</> ".minici") . takeDirectory) <$> getConfigPath +getStorageDir = CommandExec (asks ciStorageDir) |