summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-12-02 21:06:44 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2025-12-02 21:07:07 +0100
commit3dd105c0a3f7034a97de667d370ed4e7ee15bbe2 (patch)
tree519f8796ed1c18efadde99e2d67860e9eaacd9d8
parent5c558f6b107a82370d7207caad9bf88fcab77c86 (diff)
Add missing default repo ID also for transitive dependencies
-rw-r--r--src/Eval.hs18
-rw-r--r--test/script/run.et11
2 files changed, 17 insertions, 12 deletions
diff --git a/src/Eval.hs b/src/Eval.hs
index d260d91..b73f0f3 100644
--- a/src/Eval.hs
+++ b/src/Eval.hs
@@ -54,15 +54,6 @@ commonPrefix :: Eq a => [ a ] -> [ a ] -> [ a ]
commonPrefix (x : xs) (y : ys) | x == y = x : commonPrefix xs ys
commonPrefix _ _ = []
-isDefaultRepoMissingInId :: DeclaredJob -> Eval Bool
-isDefaultRepoMissingInId djob
- | all (isJust . jcRepo) (jobCheckout djob) = return False
- | otherwise = asks (not . any matches . eiCurrentIdRev)
- where
- matches (JobIdName _) = False
- matches (JobIdCommit rname _) = isNothing rname
- matches (JobIdTree rname _ _) = isNothing rname
-
collectOtherRepos :: DeclaredJobSet -> DeclaredJob -> Eval [ ( Maybe ( RepoName, Maybe Text ), FilePath ) ]
collectOtherRepos dset decl = do
jobs <- either (throwError . OtherEvalError . T.pack) return $ jobsetJobsEither dset
@@ -78,11 +69,14 @@ collectOtherRepos dset decl = do
job <- maybe (throwError $ OtherEvalError $ "job ‘" <> textJobName name <> "’ not found") return . find ((name ==) . jobName) $ jobs
return $ jobCheckout job
- missingDefault <- isDefaultRepoMissingInId decl
-
+ let isDefaultRepoId (JobIdName _) = False
+ isDefaultRepoId (JobIdCommit rname _) = isNothing rname
+ isDefaultRepoId (JobIdTree rname _ _) = isNothing rname
+ alreadyHasDefaultRepoId <- asks (any isDefaultRepoId . eiCurrentIdRev)
let checkouts =
- (if missingDefault then id else filter (isJust . jcRepo)) $
+ (if alreadyHasDefaultRepoId then filter (isJust . jcRepo) else id) $
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)
diff --git a/test/script/run.et b/test/script/run.et
index 82ad075..124ae37 100644
--- a/test/script/run.et
+++ b/test/script/run.et
@@ -579,3 +579,14 @@ test RunWithManyRepos:
expect_success from p of "second.$mt.$r2t.$r3t.$r5t"
expect /(.*)/ from p capture done
guard (done == "run-finish")
+
+ local:
+ spawn on n as p args [ "--storage=minici", "--repo=r1:./dir_r1", "--repo=r3:./dir_r3", "--repo=r4:./dir_r4", "--repo=r2:./dir_r2", "--repo=r5:./dir_r5", "--destination=d1:./dest1", "./main/minici.yaml", "run", "--rerun-all", "combined_transitive" ]
+ expect_success from p of "first.$r1t.$r2t.$r3t.$r4t"
+ expect_success from p of "second.$mt.$r2t.$r3t.$r5t"
+ expect_success from p of "dependent.$mt.$r1t.$r2t.$r3t.$r4t"
+ expect_success from p of "transitive.$mt.$r1t.$r2t.$r3t.$r4t"
+ expect_success from p of "combined.$mt.$r1t.$r2t.$r3t.$r4t.$r5t"
+ expect_success from p of "combined_transitive.$mt.$r1t.$r2t.$r3t.$r4t.$r5t"
+ expect /(.*)/ from p capture done
+ guard (done == "run-finish")