summaryrefslogtreecommitdiff
path: root/src/Command
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-06-29 08:58:37 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-06-29 10:16:30 +0200
commitf1beff8cdbf5a2e54ea5e36b6edf337fc45ffc8b (patch)
tree16bc4f7fc8e6a73e1af5e0c157ae75a74dac3cfa /src/Command
parent126d17c96fe0730e4ae8775ca2cd4f666b6e7d61 (diff)
Gather related jobs passed by refs to jobsets
Diffstat (limited to 'src/Command')
-rw-r--r--src/Command/Run.hs13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/Command/Run.hs b/src/Command/Run.hs
index 9652529..ca6d275 100644
--- a/src/Command/Run.hs
+++ b/src/Command/Run.hs
@@ -150,8 +150,17 @@ argumentJobSource names = do
refJobSource :: [ JobRef ] -> CommandExec JobSource
refJobSource [] = emptyJobSource
refJobSource refs = do
- jobs <- cmdEvalWith id $ mapM evalJobReference refs
- oneshotJobSource . map (JobSet Nothing . Right . (: [])) $ jobs
+ jobs <- foldl' addJobToList [] <$> cmdEvalWith id (mapM evalJobReference refs)
+ oneshotJobSource . map (JobSet Nothing . Right . reverse) $ jobs
+ where
+ deriveSetId :: Job -> [ JobIdPart ]
+ deriveSetId job = let JobId parts = jobId job in init parts
+
+ addJobToList :: [[ Job ]] -> Job -> [[ Job ]]
+ addJobToList (js@(j : _) : rest) job
+ | deriveSetId j == deriveSetId job = (job : js) : rest
+ | otherwise = js : addJobToList rest job
+ addJobToList _ job = [[ job ]]
loadJobSetFromRoot :: (MonadIO m, MonadFail m) => JobRoot -> Commit -> m DeclaredJobSet
loadJobSetFromRoot root commit = case root of