diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2025-11-29 11:43:47 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2025-11-29 11:50:14 +0100 |
| commit | 75e7be5f3763bfc425d84e1cf761fe62e607105d (patch) | |
| tree | 83afb2a2d29baf4feddc3000235cd9e1bda0521f /src | |
| parent | 113f4f6cd8c556d9261f59eb5d52e108d9117bbe (diff) | |
Include transitive repo dependencies in job ID
Diffstat (limited to 'src')
| -rw-r--r-- | src/Eval.hs | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/src/Eval.hs b/src/Eval.hs index 572dad2..7a5bad3 100644 --- a/src/Eval.hs +++ b/src/Eval.hs @@ -65,20 +65,24 @@ isDefaultRepoMissingInId djob collectOtherRepos :: DeclaredJobSet -> DeclaredJob -> Eval [ ( Maybe ( RepoName, Maybe Text ), FilePath ) ] collectOtherRepos dset decl = do - let dependencies = map fst $ jobUses decl + jobs <- either (throwError . OtherEvalError . T.pack) return $ jobsetJobsEither dset + let gatherDependencies seen (d : ds) + | d `elem` seen = gatherDependencies seen ds + | Just job <- find ((d ==) . jobName) jobs + = gatherDependencies (d : seen) (map fst (jobUses job) ++ ds) + | otherwise = gatherDependencies (d : seen) ds + gatherDependencies seen [] = seen + + let dependencies = gatherDependencies [] [ jobName decl ] dependencyRepos <- forM dependencies $ \name -> do - jobs <- either (throwError . OtherEvalError . T.pack) return $ jobsetJobsEither dset job <- maybe (throwError $ OtherEvalError $ "job ‘" <> textJobName name <> "’ not found") return . find ((name ==) . jobName) $ jobs return $ jobCheckout job missingDefault <- isDefaultRepoMissingInId decl let checkouts = - (if missingDefault then id else (filter (isJust . jcRepo))) $ - concat - [ jobCheckout decl - , concat dependencyRepos - ] + (if missingDefault then id else filter (isJust . jcRepo)) $ + concat dependencyRepos let commonSubdir reporev = joinPath $ foldr1 commonPrefix $ map (maybe [] splitDirectories . jcSubtree) . filter ((reporev ==) . jcRepo) $ checkouts let canonicalRepoOrder = Nothing : maybe [] (map (Just . repoName) . configRepos) (jobsetConfig dset) |