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 | 14 | ||||
| -rw-r--r-- | src/Command/Shell.hs | 4 |
5 files changed, 10 insertions, 20 deletions
diff --git a/src/Command/Extract.hs b/src/Command/Extract.hs index 366128c..8dee537 100644 --- a/src/Command/Extract.hs +++ b/src/Command/Extract.hs @@ -6,7 +6,6 @@ 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 @@ -80,8 +79,7 @@ cmdExtract (ExtractCommand ExtractOptions {..} ExtractArguments {..}) = do _ -> return False forM_ extractArtifacts $ \( ref, aname ) -> do - [ jid ] <- either tfail (return . map jobId) =<< - return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< + jid <- either (tfail . textEvalError) (return . jobId) =<< liftIO (runEval (evalJobReference ref) einput) tpath <- if diff --git a/src/Command/JobId.hs b/src/Command/JobId.hs index b349ebe..173f543 100644 --- a/src/Command/JobId.hs +++ b/src/Command/JobId.hs @@ -5,7 +5,6 @@ module Command.JobId ( import Control.Monad import Control.Monad.IO.Class -import Data.Bifunctor import Data.Text (Text) import Data.Text qualified as T @@ -53,8 +52,7 @@ cmdJobId :: JobIdCommand -> CommandExec () cmdJobId (JobIdCommand JobIdOptions {..} ref) = do einput <- getEvalInput out <- getOutput - [ JobId ids ] <- either tfail (return . map jobId) =<< - return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< + JobId ids <- either (tfail . textEvalError) (return . jobId) =<< liftIO (runEval (evalJobReference ref) einput) outputMessage out $ textJobId $ JobId ids diff --git a/src/Command/Log.hs b/src/Command/Log.hs index 438c25e..25bfc06 100644 --- a/src/Command/Log.hs +++ b/src/Command/Log.hs @@ -4,7 +4,6 @@ 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 @@ -38,8 +37,7 @@ instance Command LogCommand where cmdLog :: LogCommand -> CommandExec () cmdLog (LogCommand ref) = do einput <- getEvalInput - [ jid ] <- either tfail (return . map jobId) =<< - return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< + jid <- either (tfail . textEvalError) (return . jobId) =<< liftIO (runEval (evalJobReference ref) einput) output <- getOutput storageDir <- getStorageDir diff --git a/src/Command/Run.hs b/src/Command/Run.hs index 982a07a..b299931 100644 --- a/src/Command/Run.hs +++ b/src/Command/Run.hs @@ -8,6 +8,7 @@ import Control.Exception import Control.Monad import Control.Monad.IO.Class +import Data.Containers.ListUtils import Data.Either import Data.List import Data.Maybe @@ -168,29 +169,26 @@ argumentJobSource names = do Nothing -> tfail $ "job ‘" <> textJobName name <> "’ not found" jset <- cmdEvalWith (\ei -> ei { eiCurrentIdRev = cidPart ++ eiCurrentIdRev ei }) $ do - fullSet <- evalJobSet (map ( Nothing, ) jobtree) JobSet + evalJobSetSelected names (map ( Nothing, ) jobtree) JobSet { jobsetId = () , jobsetConfig = Just config , jobsetCommit = jcommit , jobsetExplicitlyRequested = names , jobsetJobsEither = Right (configJobs config) } - let selectedSet = fullSet { jobsetJobsEither = fmap (filter ((`elem` names) . jobName)) (jobsetJobsEither fullSet) } - fillInDependencies selectedSet oneshotJobSource [ jset ] refJobSource :: [ JobRef ] -> CommandExec JobSource refJobSource [] = emptyJobSource refJobSource refs = do - jsets <- foldl' addJobToList [] <$> cmdEvalWith id (mapM evalJobReference refs) - sets <- cmdEvalWith id $ do - forM jsets $ \jset -> do - fillInDependencies $ jset { jobsetExplicitlyRequested = either (const []) (map jobId) $ jobsetJobsEither jset } + sets <- foldl' addJobToList [] <$> cmdEvalWith id (mapM evalJobReferenceToSet refs) oneshotJobSource sets where addJobToList :: [ JobSet ] -> JobSet -> [ JobSet ] addJobToList (cur : rest) jset - | jobsetId cur == jobsetId jset = cur { jobsetJobsEither = (++) <$> (fmap reverse $ jobsetJobsEither jset) <*> (jobsetJobsEither cur) } : rest + | jobsetId cur == jobsetId jset = cur { jobsetJobsEither = fmap (nubOrdOn jobId) $ (++) <$> (jobsetJobsEither cur) <*> (jobsetJobsEither jset) + , jobsetExplicitlyRequested = nubOrd $ jobsetExplicitlyRequested cur ++ jobsetExplicitlyRequested jset + } : rest | otherwise = cur : addJobToList rest jset addJobToList [] jset = [ jset ] diff --git a/src/Command/Shell.hs b/src/Command/Shell.hs index dfff50a..16f366e 100644 --- a/src/Command/Shell.hs +++ b/src/Command/Shell.hs @@ -5,7 +5,6 @@ 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 @@ -38,8 +37,7 @@ instance Command ShellCommand where cmdShell :: ShellCommand -> CommandExec () cmdShell (ShellCommand ref) = do einput <- getEvalInput - [ job ] <- either tfail return =<< - return . either (Left . textEvalError) (first T.pack . jobsetJobsEither) =<< + job <- either (tfail . textEvalError) return =<< liftIO (runEval (evalJobReference ref) einput) sh <- fromMaybe "/bin/sh" <$> liftIO (lookupEnv "SHELL") storageDir <- getStorageDir |