diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2025-07-01 22:46:07 +0200 | 
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-07-02 18:28:52 +0200 | 
| commit | 518998bebf22b6bb92dd246026fce62ad57a0b0b (patch) | |
| tree | b18554b1d4f8799c05dd3d524759439685b9fc9e /src/Command | |
| parent | ac70a5f9aebcfd51901740681463d1ac4fa90e33 (diff) | |
Automatically run dependencies
Changelog: Automatically run dependencies of jobs specified on command line
Diffstat (limited to 'src/Command')
| -rw-r--r-- | src/Command/Run.hs | 27 | 
1 files changed, 18 insertions, 9 deletions
| diff --git a/src/Command/Run.hs b/src/Command/Run.hs index a7e7eff..a80e15d 100644 --- a/src/Command/Run.hs +++ b/src/Command/Run.hs @@ -126,7 +126,7 @@ mergeSources sources = do  argumentJobSource :: [ JobName ] -> CommandExec JobSource  argumentJobSource [] = emptyJobSource  argumentJobSource names = do -    ( config, jobsetCommit ) <- getJobRoot >>= \case +    ( config, jcommit ) <- getJobRoot >>= \case          JobRootConfig config -> do              commit <- sequence . fmap createWipCommit =<< tryGetDefaultRepo              return ( config, commit ) @@ -135,24 +135,33 @@ argumentJobSource names = do              config <- either fail return =<< loadConfigForCommit =<< getCommitTree commit              return ( config, Just commit ) -    jobtree <- case jobsetCommit of +    jobtree <- case jcommit of          Just commit -> (: []) <$> getCommitTree commit          Nothing -> return []      let cidPart = map (JobIdTree Nothing "" . treeId) jobtree -        jobsetId = () -    jobsetJobsEither <- fmap Right $ forM names $ \name -> +    forM_ names $ \name ->          case find ((name ==) . jobName) (configJobs config) of -            Just job -> return job +            Just _  -> return ()              Nothing -> tfail $ "job ‘" <> textJobName name <> "’ not found" -    oneshotJobSource . (: []) =<< -        cmdEvalWith (\ei -> ei { eiCurrentIdRev = cidPart ++ eiCurrentIdRev ei }) -        (evalJobSet (map ( Nothing, ) jobtree) JobSet {..}) + +    jset <- cmdEvalWith (\ei -> ei { eiCurrentIdRev = cidPart ++ eiCurrentIdRev ei }) $ do +        fullSet <- evalJobSet (map ( Nothing, ) jobtree) JobSet +            { jobsetId = () +            , jobsetCommit = jcommit +            , 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      jobs <- foldl' addJobToList [] <$> cmdEvalWith id (mapM evalJobReference refs) -    oneshotJobSource . map (\( sid, js ) -> JobSet sid Nothing (Right $ reverse js)) $ jobs +    sets <- cmdEvalWith id $ do +        forM jobs $ \( sid, js ) -> do +            fillInDependencies $ JobSet sid Nothing (Right $ reverse js) +    oneshotJobSource sets    where      addJobToList :: [ ( JobSetId, [ Job ] ) ] -> ( Job, JobSetId ) -> [ ( JobSetId, [ Job ] ) ]      addJobToList (( sid, js ) : rest ) ( job, jsid ) |