From 4f79aa150aaa0aace017fdeb43a85b63a02dcc48 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Wed, 25 Dec 2024 22:48:50 +0900 Subject: [PATCH] Split out `downloadTestRepo` from `testRepoRoot` in mill's own build (#4179) Fixes https://github.com/com-lihaoyi/mill/issues/4176. `testRepoRoot.super` always needs to re-evaluate, because it is a `Task.Source`. But if we split the `downloadTestRepo` call into a separate cached task that ensures the download is cached and can be re-used every time our `testRepoRoot` override needs to re-evaluate --- example/package.mill | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/example/package.mill b/example/package.mill index 9912e29697c..f4a75b79a18 100644 --- a/example/package.mill +++ b/example/package.mill @@ -288,23 +288,25 @@ object `package` extends RootModule with Module { val (repoPath, repoHash) = repoInfo(crossValue) def repoSlug = repoPath.split("/").last - def testRepoRoot = Task { + def downloadedRepo = Task{ shared.downloadTestRepo(repoPath, repoHash, T.dest) val wrapperFolder = T.dest / s"$repoSlug-$repoHash" + PathRef(wrapperFolder) + } - os.makeDir(T.dest / "merged") - os.copy(wrapperFolder, T.dest / "merged", mergeFolders = true) - os.remove.all(wrapperFolder) + def testRepoRoot = Task { + val wrapperFolder = downloadedRepo().path + os.copy(wrapperFolder, T.dest, mergeFolders = true) os.copy( super.testRepoRoot().path, - T.dest / "merged", + T.dest, mergeFolders = true, replaceExisting = true ) - os.remove.all(T.dest / "merged" / ".mill-version") + os.remove.all(T.dest / ".mill-version") - os.remove.all(T.dest / "merged" / "build.sc") - PathRef(T.dest / "merged") + os.remove.all(T.dest / "build.sc") + PathRef(T.dest) } } }