summaryrefslogtreecommitdiff
path: root/src/Command
diff options
context:
space:
mode:
Diffstat (limited to 'src/Command')
-rw-r--r--src/Command/Extract.hs4
-rw-r--r--src/Command/JobId.hs4
-rw-r--r--src/Command/Log.hs4
-rw-r--r--src/Command/Run.hs18
-rw-r--r--src/Command/Shell.hs4
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