diff options
author | Roman Smrž <roman.smrz@seznam.cz> | 2025-06-29 08:58:37 +0200 |
---|---|---|
committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-06-29 10:16:30 +0200 |
commit | f1beff8cdbf5a2e54ea5e36b6edf337fc45ffc8b (patch) | |
tree | 16bc4f7fc8e6a73e1af5e0c157ae75a74dac3cfa /src/Command | |
parent | 126d17c96fe0730e4ae8775ca2cd4f666b6e7d61 (diff) |
Gather related jobs passed by refs to jobsets
Diffstat (limited to 'src/Command')
-rw-r--r-- | src/Command/Run.hs | 13 |
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 |