Skip to content

Commit 574fa87

Browse files
authored
Split wrapper code and support code generation (#5046)
We generate into two different locations to separate concerns * `wrapped` is wrapping script files into object such that top-level definitions work * `package_` * `support` is generating additional source files derived from the actual build to make some build details accessible to the build scripts * `MillMiscInfo` * `wrapper_object_getter` Fix #5044 Pull request: #5046
1 parent 72b0120 commit 574fa87

File tree

16 files changed

+253
-134
lines changed

16 files changed

+253
-134
lines changed

example/extending/metabuild/4-meta-build/mill-build/build.mill

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
package build
2+
23
import mill._, scalalib._
34
import mill.meta.MillBuildRootModule
45

example/extending/metabuild/5-meta-shared-sources/mill-build/build.mill

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
package build
2+
23
import mill._
34
import mill.meta.MillBuildRootModule
45

integration/feature/full-run-logs/src/FullRunLogsTests.scala

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ object FullRunLogsTests extends UtestIntegrationTestSuite {
1919
assert(res.out == "<h1>hello</h1>")
2020
assert(
2121
res.err.replace('\\', '/').replaceAll("(\r\n)|\r", "\n") ==
22-
s"""[info] compiling 1 Scala source to ${tester.workspacePath}/out/mill-build/compile.dest/classes ...
23-
|[info] done compiling
24-
|[info] compiling 1 Java source to ${tester.workspacePath}/out/compile.dest/classes ...
25-
|[info] done compiling""".stripMargin.replace('\\', '/').replaceAll("(\r\n)|\r", "\n")
22+
s"""|[info] compiling 3 Scala sources to ${tester.workspacePath}/out/mill-build/compile.dest/classes ...
23+
|[info] done compiling
24+
|[info] compiling 1 Java source to ${tester.workspacePath}/out/compile.dest/classes ...
25+
|[info] done compiling""".stripMargin.replace('\\', '/').replaceAll("(\r\n)|\r", "\n")
2626
)
2727
}
2828
test("ticker") - integrationTest { tester =>
@@ -34,15 +34,15 @@ object FullRunLogsTests extends UtestIntegrationTestSuite {
3434

3535
val expectedErrorRegex = java.util.regex.Pattern
3636
.quote(
37-
s"""<dashes> run --text hello <dashes>
38-
|[build.mill-<digits>/<digits>] compile
39-
|[build.mill-<digits>] [info] compiling 1 Scala source to ${tester.workspacePath}/out/mill-build/compile.dest/classes ...
40-
|[build.mill-<digits>] [info] done compiling
41-
|[<digits>/<digits>] compile
42-
|[<digits>] [info] compiling 1 Java source to ${tester.workspacePath}/out/compile.dest/classes ...
43-
|[<digits>] [info] done compiling
44-
|[<digits>/<digits>] run
45-
|[<digits>/<digits>] <dashes> run --text hello <dashes> <digits>s"""
37+
s"""|<dashes> run --text hello <dashes>
38+
|[build.mill-<digits>/<digits>] compile
39+
|[build.mill-<digits>] [info] compiling 3 Scala sources to ${tester.workspacePath}/out/mill-build/compile.dest/classes ...
40+
|[build.mill-<digits>] [info] done compiling
41+
|[<digits>/<digits>] compile
42+
|[<digits>] [info] compiling 1 Java source to ${tester.workspacePath}/out/compile.dest/classes ...
43+
|[<digits>] [info] done compiling
44+
|[<digits>/<digits>] run
45+
|[<digits>/<digits>] <dashes> run --text hello <dashes> <digits>s"""
4646
.stripMargin
4747
.replaceAll("(\r\n)|\r", "\n")
4848
.replace('\\', '/')
@@ -62,17 +62,17 @@ object FullRunLogsTests extends UtestIntegrationTestSuite {
6262

6363
val expectedErrorRegex = java.util.regex.Pattern
6464
.quote(
65-
s"""<dashes> jar <dashes>
66-
|[build.mill-<digits>/<digits>] compile
67-
|[build.mill-<digits>] [info] compiling 1 Scala source to ${tester.workspacePath}/out/mill-build/compile.dest/classes ...
68-
|[build.mill-<digits>] [info] done compiling
69-
|[<digits>/<digits>] compile
70-
|[<digits>] [info] compiling 1 Java source to ${tester.workspacePath}/out/compile.dest/classes ...
71-
|[<digits>] [error] ${tester.workspacePath}/src/foo/Foo.java:36:10: reached end of file while parsing
72-
|[<digits>] compile failed
73-
|[<digits>/<digits>, 1 failed] <dashes> jar <dashes> <digits>s
74-
|1 tasks failed
75-
|compile javac returned non-zero exit code"""
65+
s"""|<dashes> jar <dashes>
66+
|[build.mill-<digits>/<digits>] compile
67+
|[build.mill-<digits>] [info] compiling 3 Scala sources to ${tester.workspacePath}/out/mill-build/compile.dest/classes ...
68+
|[build.mill-<digits>] [info] done compiling
69+
|[<digits>/<digits>] compile
70+
|[<digits>] [info] compiling 1 Java source to ${tester.workspacePath}/out/compile.dest/classes ...
71+
|[<digits>] [error] ${tester.workspacePath}/src/foo/Foo.java:36:10: reached end of file while parsing
72+
|[<digits>] compile failed
73+
|[<digits>/<digits>, 1 failed] <dashes> jar <dashes> <digits>s
74+
|1 tasks failed
75+
|compile javac returned non-zero exit code"""
7676
.stripMargin
7777
.replaceAll("(\r\n)|\r", "\n")
7878
.replace('\\', '/')

integration/ide/bsp-server/resources/snapshots/build-targets-sources.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,12 @@
7676
"generated": false
7777
},
7878
{
79-
"uri": "file:///workspace/out/mill-build/generatedSources.dest",
79+
"uri": "file:///workspace/out/mill-build/generatedScriptSources.dest/wrapped",
80+
"kind": 2,
81+
"generated": true
82+
},
83+
{
84+
"uri": "file:///workspace/out/mill-build/generatedScriptSources.dest/support",
8085
"kind": 2,
8186
"generated": true
8287
}

integration/ide/gen-idea/resources/extended/idea/mill_modules/mill-build.iml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
<output url="file://$MODULE_DIR$/../../out/mill-build/ideaCompileOutput.dest/classes"/>
44
<exclude-output/>
55
<content url="file://$MODULE_DIR$/../..">
6-
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/generatedSources.dest" isTestSource="false" generated="true"/>
6+
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/generatedScriptSources.dest/support" isTestSource="false" generated="true"/>
7+
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/generatedScriptSources.dest/wrapped" isTestSource="false" generated="true"/>
78
<sourceFolder url="file://$MODULE_DIR$/../../build.mill" isTestSource="false"/>
89
<sourceFolder url="file://$MODULE_DIR$/../../mill-build/src" isTestSource="false"/>
910
<sourceFolder url="file://$MODULE_DIR$/../../mill-build/resources" type="java-resource"/>

integration/ide/gen-idea/resources/extended/idea/mill_modules/mill-build.mill-build.iml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
<component name="NewModuleRootManager">
33
<output url="file://$MODULE_DIR$/../../out/mill-build/mill-build/ideaCompileOutput.dest/classes"/>
44
<exclude-output/>
5-
<content url="file://$MODULE_DIR$/../../out/mill-build/mill-build/generatedSources.dest">
6-
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/mill-build/generatedSources.dest" isTestSource="false" generated="true"/>
5+
<content url="file://$MODULE_DIR$/../../out/mill-build/mill-build/generatedScriptSources.dest/support">
6+
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/mill-build/generatedScriptSources.dest/support" isTestSource="false" generated="true"/>
7+
</content>
8+
<content url="file://$MODULE_DIR$/../../out/mill-build/mill-build/generatedScriptSources.dest/wrapped">
9+
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/mill-build/generatedScriptSources.dest/wrapped" isTestSource="false" generated="true"/>
710
</content>
811
<content url="file://$MODULE_DIR$/../../mill-build">
912
<sourceFolder url="file://$MODULE_DIR$/../../mill-build/build.mill" isTestSource="false"/>

integration/ide/gen-idea/resources/hello-idea/idea/mill_modules/mill-build.iml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
<output url="file://$MODULE_DIR$/../../out/mill-build/ideaCompileOutput.dest/classes"/>
44
<exclude-output/>
55
<content url="file://$MODULE_DIR$/../..">
6-
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/generatedSources.dest" isTestSource="false" generated="true"/>
6+
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/generatedScriptSources.dest/support" isTestSource="false" generated="true"/>
7+
<sourceFolder url="file://$MODULE_DIR$/../../out/mill-build/generatedScriptSources.dest/wrapped" isTestSource="false" generated="true"/>
78
<sourceFolder url="file://$MODULE_DIR$/../../build.mill" isTestSource="false"/>
89
<sourceFolder url="file://$MODULE_DIR$/../../mill-build/src" isTestSource="false"/>
910
<sourceFolder url="file://$MODULE_DIR$/../../mill-build/resources" type="java-resource"/>

integration/invalidation/codesig-subfolder/src/CodeSigSubfolderTests.scala

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,30 +15,37 @@ object CodeSigSubfolderTests extends UtestIntegrationTestSuite {
1515
test("simple") - integrationTest { tester =>
1616
import tester._
1717

18-
val initial = eval("foo")
18+
// eager capture output so we see it in asserts
19+
case class EvalOuts(out: String, err: String)
20+
def evalOuts(cmd: String): EvalOuts = {
21+
val res = eval(cmd)
22+
EvalOuts(res.out, res.err)
23+
}
24+
25+
val initial = evalOuts("foo")
1926

2027
assert(initial.out.linesIterator.toSeq == Seq("running foo", "running helperFoo"))
21-
assert(initial.err.contains("compiling 10 Scala sources"))
28+
assert(initial.err.contains("compiling 30 Scala sources"))
2229

23-
val cached = eval("foo")
30+
val cached = evalOuts("foo")
2431
assert(cached.out == "")
2532
assert(!cached.err.contains("compiling"))
2633

27-
val subFolderRes = eval("subfolder.subFolderTask")
34+
val subFolderRes = evalOuts("subfolder.subFolderTask")
2835
assert(subFolderRes.out.linesIterator.toSeq == Seq("running subFolderTask"))
2936
assert(!subFolderRes.err.contains("compiling"))
3037

3138
modifyFile(workspacePath / "build.mill", _.replace("running foo", "running foo2"))
32-
val mangledFoo = eval("foo")
39+
val mangledFoo = evalOuts("foo")
3340
assert(mangledFoo.out.linesIterator.toSeq == Seq("running foo2", "running helperFoo"))
3441
assert(mangledFoo.err.contains("compiling 1 Scala source"))
3542

36-
val cached2 = eval("foo")
43+
val cached2 = evalOuts("foo")
3744
assert(cached2.out == "")
3845
assert(!cached2.err.contains("compiling"))
3946

4047
// Changing stuff in the top-level build.mill does not invalidate tasks in subfolder/package.mill
41-
val subFolderResCached = eval("subfolder.subFolderTask")
48+
val subFolderResCached = evalOuts("subfolder.subFolderTask")
4249
assert(subFolderResCached.out == "")
4350
assert(!subFolderResCached.err.contains("compiling"))
4451

@@ -47,15 +54,15 @@ object CodeSigSubfolderTests extends UtestIntegrationTestSuite {
4754
_.replace("running subFolderTask", "running subFolderTask2")
4855
)
4956
// Changing stuff in subfolder/package.mill does not invalidate unrelated tasks in build.mill
50-
val cached3 = eval("foo")
57+
val cached3 = evalOuts("foo")
5158
assert(cached3.out == "")
5259
assert(cached3.err.contains("compiling 1 Scala source"))
5360

5461
modifyFile(
5562
workspacePath / "subfolder/package.mill",
5663
_.replace("running helperFoo", "running helperFoo2")
5764
)
58-
val mangledHelperFoo = eval("foo")
65+
val mangledHelperFoo = evalOuts("foo")
5966
assert(mangledHelperFoo.out.linesIterator.toSeq == Seq("running foo2", "running helperFoo2"))
6067
assert(mangledHelperFoo.err.contains("compiling 1 Scala source"))
6168

@@ -65,7 +72,7 @@ object CodeSigSubfolderTests extends UtestIntegrationTestSuite {
6572
workspacePath / "subfolder/package.mill",
6673
_.replace("val valueFoo = 0", "val valueFoo = 10")
6774
)
68-
val mangledValFoo = eval("foo")
75+
val mangledValFoo = evalOuts("foo")
6976
assert(mangledValFoo.out.linesIterator.toSeq == Seq("running foo2", "running helperFoo2"))
7077
assert(mangledValFoo.err.contains("compiling 1 Scala source"))
7178

@@ -76,7 +83,7 @@ object CodeSigSubfolderTests extends UtestIntegrationTestSuite {
7683
workspacePath / "subfolder/package.mill",
7784
_.replace("val valueFooUsedInBar = 0", "val valueFooUsedInBar = 10")
7885
)
79-
val mangledValFooUsedInBar = eval("foo")
86+
val mangledValFooUsedInBar = evalOuts("foo")
8087
assert(mangledValFooUsedInBar.out.linesIterator.toSeq == Seq(
8188
"running foo2",
8289
"running helperFoo2"

integration/invalidation/multi-level-editing/src/MultiLevelBuildTests.scala

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ object MultiLevelBuildTestsParseErrorEdits extends MultiLevelBuildTests {
289289
checkChangedClassloaders(tester, null, true, true, true)
290290

291291
causeParseError(workspacePath / "build.mill")
292-
evalCheckErr(tester, "\n1 tasks failed", "\ngeneratedSources", "build.mill")
292+
evalCheckErr(tester, "\n1 tasks failed", "\ngeneratedScriptSources", "build.mill")
293293
// exactly which files get watched here can be non-deterministic depending on
294294
// how far evaluation gets before it terminates due to the task failure
295295
// checkWatchedFiles(tester, Nil, buildPaths(tester), Nil, Nil)
@@ -303,7 +303,12 @@ object MultiLevelBuildTestsParseErrorEdits extends MultiLevelBuildTests {
303303

304304
fixParseError(workspacePath / "build.mill")
305305
causeParseError(workspacePath / "mill-build/build.mill")
306-
evalCheckErr(tester, "\n1 tasks failed", "\ngeneratedSources", "mill-build/build.mill")
306+
evalCheckErr(
307+
tester,
308+
"\n1 tasks failed",
309+
"\ngeneratedScriptSources",
310+
"mill-build/build.mill"
311+
)
307312
// checkWatchedFiles(tester, Nil, Nil, buildPaths2(tester), Nil)
308313
if (tester.clientServerMode) checkChangedClassloaders(tester, null, null, null, false)
309314
else checkChangedClassloaders(tester, null, null, null, true)
@@ -313,20 +318,25 @@ object MultiLevelBuildTestsParseErrorEdits extends MultiLevelBuildTests {
313318
evalCheckErr(
314319
tester,
315320
"\n1 tasks failed",
316-
"\ngeneratedSources mill-build/mill-build/build.mill"
321+
"\ngeneratedScriptSources mill-build/mill-build/build.mill"
317322
)
318323
// checkWatchedFiles(tester, Nil, Nil, Nil, buildPaths3(tester))
319324
checkChangedClassloaders(tester, null, null, null, null)
320325

321326
fixParseError(workspacePath / "mill-build/mill-build/build.mill")
322327
causeParseError(workspacePath / "mill-build/build.mill")
323-
evalCheckErr(tester, "\n1 tasks failed", "\ngeneratedSources", "mill-build/build.mill")
328+
evalCheckErr(
329+
tester,
330+
"\n1 tasks failed",
331+
"\ngeneratedScriptSources",
332+
"mill-build/build.mill"
333+
)
324334
// checkWatchedFiles(tester, Nil, Nil, buildPaths2(tester), Nil)
325335
checkChangedClassloaders(tester, null, null, null, true)
326336

327337
fixParseError(workspacePath / "mill-build/build.mill")
328338
causeParseError(workspacePath / "build.mill")
329-
evalCheckErr(tester, "\n1 tasks failed", "\ngeneratedSources", "build.mill")
339+
evalCheckErr(tester, "\n1 tasks failed", "\ngeneratedScriptSources", "build.mill")
330340
// checkWatchedFiles(tester, Nil, buildPaths(tester), Nil, Nil)
331341
if (tester.clientServerMode) checkChangedClassloaders(tester, null, null, true, false)
332342
else checkChangedClassloaders(tester, null, null, true, true)

integration/invalidation/zinc-build-compilation/src/ZincBuildCompilationTests.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ object ZincBuildCompilationTests extends UtestIntegrationTestSuite {
1111

1212
val initial = eval(("dummy"))
1313

14-
assert(initial.err.contains("compiling 2 Scala sources"))
14+
assert(initial.err.contains("compiling 6 Scala sources"))
1515

1616
val cached = eval(("dummy"))
1717
assert(!cached.err.contains("compiling"))

0 commit comments

Comments
 (0)