diff options
Diffstat (limited to 'src/Eval.hs')
-rw-r--r-- | src/Eval.hs | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/src/Eval.hs b/src/Eval.hs index 0e3e3e0..1278c6f 100644 --- a/src/Eval.hs +++ b/src/Eval.hs @@ -12,7 +12,6 @@ import Control.Monad import Control.Monad.Except import Control.Monad.Reader -import Data.Bifunctor import Data.List import Data.Maybe import Data.Text (Text) @@ -43,8 +42,9 @@ runEval :: Eval a -> EvalInput -> IO (Either EvalError a) runEval action einput = runExceptT $ flip runReaderT einput action -evalJob :: EvalInput -> DeclaredJob -> Except EvalError Job -evalJob EvalInput {..} decl = do +evalJob :: DeclaredJob -> Eval Job +evalJob decl = do + EvalInput {..} <- ask otherCheckout <- forM (jobOtherCheckout decl) $ \( name, revision, checkout ) -> do repo <- maybe (throwError $ OtherEvalError $ "repo `" <> textRepoName name <> "' not defined") return $ lookup name eiOtherRepos @@ -59,25 +59,23 @@ evalJob EvalInput {..} decl = do , jobUses = jobUses decl } -evalJobSet :: EvalInput -> DeclaredJobSet -> JobSet -evalJobSet ei decl = do - JobSet +evalJobSet :: DeclaredJobSet -> Eval JobSet +evalJobSet decl = do + jobs <- either (return . Left) (handleToEither . mapM evalJob) $ jobsetJobsEither decl + return JobSet { jobsetCommit = jobsetCommit decl - , jobsetJobsEither = join $ - fmap (sequence . map (runExceptStr . evalJob ei)) $ - jobsetJobsEither decl + , jobsetJobsEither = jobs } where - runExceptStr = first (T.unpack . textEvalError) . runExcept + handleToEither = handleError (return . Left . T.unpack . textEvalError) . fmap Right canonicalJobName :: [ Text ] -> Maybe Tree -> Config -> Eval [ JobIdPart ] canonicalJobName (r : rs) mbTree config = do - einput <- ask let name = JobName r case find ((name ==) . jobName) (configJobs config) of Just djob -> do - job <- either throwError return $ runExcept $ evalJob einput djob + job <- evalJob djob repos <- concat <$> sequence [ case mbTree of Just _ -> return [] |