diff options
Diffstat (limited to 'src/Command')
| -rw-r--r-- | src/Command/Extract.hs | 4 | ||||
| -rw-r--r-- | src/Command/JobId.hs | 4 | ||||
| -rw-r--r-- | src/Command/Log.hs | 4 | ||||
| -rw-r--r-- | src/Command/Run.hs | 18 | ||||
| -rw-r--r-- | src/Command/Shell.hs | 4 |
5 files changed, 22 insertions, 12 deletions
diff --git a/src/Command/Extract.hs b/src/Command/Extract.hs index 6828029..a9ab292 100644 --- a/src/Command/Extract.hs +++ b/src/Command/Extract.hs @@ -6,6 +6,7 @@ import Control.Monad import Control.Monad.Except import Control.Monad.IO.Class +import Data.Bifunctor import Data.Text qualified as T import System.Console.GetOpt @@ -79,7 +80,8 @@ cmdExtract (ExtractCommand ExtractOptions {..} ExtractArguments {..}) = do _ -> return False forM_ extractArtifacts $ \( ref, ArtifactName aname ) -> do - jid@(JobId ids) <- either (tfail . textEvalError) (return . jobId . fst) =<< + [ jid@(JobId ids) ] <- either tfail (return . map jobId) =<< + return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< liftIO (runEval (evalJobReference ref) einput) let jdir = joinPath $ (storageDir :) $ ("jobs" :) $ map (T.unpack . textJobIdPart) ids diff --git a/src/Command/JobId.hs b/src/Command/JobId.hs index 096ed56..b349ebe 100644 --- a/src/Command/JobId.hs +++ b/src/Command/JobId.hs @@ -5,6 +5,7 @@ module Command.JobId ( import Control.Monad import Control.Monad.IO.Class +import Data.Bifunctor import Data.Text (Text) import Data.Text qualified as T @@ -52,7 +53,8 @@ cmdJobId :: JobIdCommand -> CommandExec () cmdJobId (JobIdCommand JobIdOptions {..} ref) = do einput <- getEvalInput out <- getOutput - JobId ids <- either (tfail . textEvalError) (return . jobId . fst) =<< + [ JobId ids ] <- either tfail (return . map jobId) =<< + return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< liftIO (runEval (evalJobReference ref) einput) outputMessage out $ textJobId $ JobId ids diff --git a/src/Command/Log.hs b/src/Command/Log.hs index e48ce8f..438c25e 100644 --- a/src/Command/Log.hs +++ b/src/Command/Log.hs @@ -4,6 +4,7 @@ module Command.Log ( import Control.Monad.IO.Class +import Data.Bifunctor import Data.Text (Text) import Data.Text qualified as T import Data.Text.Lazy qualified as TL @@ -37,7 +38,8 @@ instance Command LogCommand where cmdLog :: LogCommand -> CommandExec () cmdLog (LogCommand ref) = do einput <- getEvalInput - jid <- either (tfail . textEvalError) (return . jobId . fst) =<< + [ jid ] <- either tfail (return . map jobId) =<< + return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< liftIO (runEval (evalJobReference ref) einput) output <- getOutput storageDir <- getStorageDir diff --git a/src/Command/Run.hs b/src/Command/Run.hs index bd60bae..3bdfb4e 100644 --- a/src/Command/Run.hs +++ b/src/Command/Run.hs @@ -167,6 +167,7 @@ argumentJobSource names = do jset <- cmdEvalWith (\ei -> ei { eiCurrentIdRev = cidPart ++ eiCurrentIdRev ei }) $ do fullSet <- evalJobSet (map ( Nothing, ) jobtree) JobSet { jobsetId = () + , jobsetConfig = Just config , jobsetCommit = jcommit , jobsetExplicitlyRequested = names , jobsetJobsEither = Right (configJobs config) @@ -178,23 +179,24 @@ argumentJobSource names = do refJobSource :: [ JobRef ] -> CommandExec JobSource refJobSource [] = emptyJobSource refJobSource refs = do - jobs <- foldl' addJobToList [] <$> cmdEvalWith id (mapM evalJobReference refs) + jsets <- foldl' addJobToList [] <$> cmdEvalWith id (mapM evalJobReference refs) sets <- cmdEvalWith id $ do - forM jobs $ \( sid, js ) -> do - fillInDependencies $ JobSet sid Nothing (map jobId js) (Right $ reverse js) + forM jsets $ \jset -> do + fillInDependencies $ jset { jobsetExplicitlyRequested = either (const []) (map jobId) $ jobsetJobsEither jset } oneshotJobSource sets where - addJobToList :: [ ( JobSetId, [ Job ] ) ] -> ( Job, JobSetId ) -> [ ( JobSetId, [ Job ] ) ] - addJobToList (( sid, js ) : rest ) ( job, jsid ) - | sid == jsid = ( sid, job : js ) : rest - | otherwise = ( sid, js ) : addJobToList rest ( job, jsid ) - addJobToList [] ( job, jsid ) = [ ( jsid, [ job ] ) ] + addJobToList :: [ JobSet ] -> JobSet -> [ JobSet ] + addJobToList (cur : rest) jset + | jobsetId cur == jobsetId jset = cur { jobsetJobsEither = (++) <$> (fmap reverse $ jobsetJobsEither jset) <*> (jobsetJobsEither cur) } : rest + | otherwise = cur : addJobToList rest jset + addJobToList [] jset = [ jset ] loadJobSetFromRoot :: (MonadIO m, MonadFail m) => JobRoot -> Commit -> m DeclaredJobSet loadJobSetFromRoot root commit = case root of JobRootRepo _ -> loadJobSetForCommit commit JobRootConfig config -> return JobSet { jobsetId = () + , jobsetConfig = Just config , jobsetCommit = Just commit , jobsetExplicitlyRequested = [] , jobsetJobsEither = Right $ configJobs config diff --git a/src/Command/Shell.hs b/src/Command/Shell.hs index 6e0d880..dfff50a 100644 --- a/src/Command/Shell.hs +++ b/src/Command/Shell.hs @@ -5,6 +5,7 @@ module Command.Shell ( import Control.Monad import Control.Monad.IO.Class +import Data.Bifunctor import Data.Maybe import Data.Text (Text) import Data.Text qualified as T @@ -37,7 +38,8 @@ instance Command ShellCommand where cmdShell :: ShellCommand -> CommandExec () cmdShell (ShellCommand ref) = do einput <- getEvalInput - job <- either (tfail . textEvalError) (return . fst) =<< + [ job ] <- either tfail return =<< + return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< liftIO (runEval (evalJobReference ref) einput) sh <- fromMaybe "/bin/sh" <$> liftIO (lookupEnv "SHELL") storageDir <- getStorageDir |