summaryrefslogtreecommitdiff
path: root/src/Command/Run.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Command/Run.hs')
-rw-r--r--src/Command/Run.hs15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/Command/Run.hs b/src/Command/Run.hs
index c122cf6..9652529 100644
--- a/src/Command/Run.hs
+++ b/src/Command/Run.hs
@@ -147,6 +147,12 @@ argumentJobSource names = do
cmdEvalWith (\ei -> ei { eiCurrentIdRev = cidPart ++ eiCurrentIdRev ei })
(evalJobSet (map ( Nothing, ) jobtree) JobSet {..})
+refJobSource :: [ JobRef ] -> CommandExec JobSource
+refJobSource [] = emptyJobSource
+refJobSource refs = do
+ jobs <- cmdEvalWith id $ mapM evalJobReference refs
+ oneshotJobSource . map (JobSet Nothing . Right . (: [])) $ jobs
+
loadJobSetFromRoot :: (MonadIO m, MonadFail m) => JobRoot -> Commit -> m DeclaredJobSet
loadJobSetFromRoot root commit = case root of
JobRootRepo _ -> loadJobSetForCommit commit
@@ -248,11 +254,14 @@ cmdRun (RunCommand RunOptions {..} args) = do
[ base, tip ]
| not (T.null base) && not (T.null tip)
-> return $ Left ( Just base, tip )
- [ _ ] -> return $ Right $ JobName arg
+ [ _ ] -> return $ Right arg
_ -> tfail $ "invalid argument: " <> arg
]
- argumentJobs <- argumentJobSource jobOptions
+ let ( refOptions, nameOptions ) = partition (T.elem '.') jobOptions
+
+ argumentJobs <- argumentJobSource $ map JobName nameOptions
+ refJobs <- refJobSource $ map parseJobRef refOptions
defaultSource <- getJobRoot >>= \case
_ | not (null rangeOptions && null roNewCommitsOn && null roNewTags && null jobOptions) -> do
@@ -279,7 +288,7 @@ cmdRun (RunCommand RunOptions {..} args) = do
liftIO $ do
mngr <- newJobManager storageDir optJobs
- source <- mergeSources $ concat [ [ defaultSource, argumentJobs ], ranges, branches, tags ]
+ source <- mergeSources $ concat [ [ defaultSource, argumentJobs, refJobs ], ranges, branches, tags ]
mbHeaderLine <- mapM (flip newLine "") (outputTerminal output)
threadCount <- newTVarIO (0 :: Int)