diff options
author | Guillaume Martres <smarter@ubuntu.com> | 2018-07-27 01:37:31 +0200 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-27 07:37:31 +0800 |
commit | 2c8b55967f946435a4b553c745c8d99620a85ea1 (patch) | |
tree | f6d564f14ad12ce746723e11a15b5a29c5245159 | |
parent | 436e5e21f526a8e9758bd11c8b9b221253d50663 (diff) | |
download | mill-2c8b55967f946435a4b553c745c8d99620a85ea1.tar.gz mill-2c8b55967f946435a4b553c745c8d99620a85ea1.tar.bz2 mill-2c8b55967f946435a4b553c745c8d99620a85ea1.zip |
Upgrade Zinc and fix over-compilation (#390)
* Remove dead code
* Upgrade zinc to 1.1.7, avoid hardcoding the version
* Fix over-compilation with Zinc
`upstreamCompileOutput` needs to contain the CompileOutput of all
recursive dependencies, otherwise Zinc gets confused when a classfile
from one of these recursive dependency is used, resulting in
over-compilation.
No tests because I don't know how to write one, but this can be observed
manually:
1. mill scalajslib.compile
2. Add an empty line to ScalaModule.scala
3. mill scalajslib.compile
Before this commit, the last compilation ended up compiling one file in
scalalib (as expected), then every file in scalajslib. After this
commit, nothing in scalajslib is recompiled, as expected.
-rwxr-xr-x | build.sc | 3 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/JavaModule.scala | 11 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/Lib.scala | 6 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaModule.scala | 4 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaWorkerApi.scala | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/Versions.scala | 6 |
6 files changed, 20 insertions, 12 deletions
@@ -181,7 +181,8 @@ object scalalib extends MillModule { def moduleDeps = Seq(main, scalalib) def ivyDeps = Agg( - ivy"org.scala-sbt::zinc:1.1.5" + // Keep synchronized with zinc in Versions.scala + ivy"org.scala-sbt::zinc:1.1.7" ) def testArgs = Seq( "-DMILL_SCALA_WORKER=" + runClasspath().map(_.path).mkString(",") diff --git a/scalalib/src/mill/scalalib/JavaModule.scala b/scalalib/src/mill/scalalib/JavaModule.scala index 87dfb1b9..eae1f09e 100644 --- a/scalalib/src/mill/scalalib/JavaModule.scala +++ b/scalalib/src/mill/scalalib/JavaModule.scala @@ -55,12 +55,19 @@ trait JavaModule extends mill.Module with TaskModule { outer => def javacOptions = T{ Seq.empty[String] } + /** The direct dependencies of this module */ def moduleDeps = Seq.empty[JavaModule] + /** The direct and indirect dependencies of this module */ + def recursiveModuleDeps: Seq[JavaModule] = { + moduleDeps.flatMap(_.transitiveModuleDeps).distinct + } + /** Like `recursiveModuleDeps` but also include the module itself */ def transitiveModuleDeps: Seq[JavaModule] = { - Seq(this) ++ moduleDeps.flatMap(_.transitiveModuleDeps).distinct + Seq(this) ++ recursiveModuleDeps } + def unmanagedClasspath = T{ Agg.empty[PathRef] } @@ -69,7 +76,7 @@ trait JavaModule extends mill.Module with TaskModule { outer => } def upstreamCompileOutput = T{ - Task.traverse(moduleDeps)(_.compile) + Task.traverse(recursiveModuleDeps)(_.compile) } def transitiveLocalClasspath: T[Agg[PathRef]] = T{ diff --git a/scalalib/src/mill/scalalib/Lib.scala b/scalalib/src/mill/scalalib/Lib.scala index f1683768..b69409a6 100644 --- a/scalalib/src/mill/scalalib/Lib.scala +++ b/scalalib/src/mill/scalalib/Lib.scala @@ -149,12 +149,6 @@ object Lib{ def scalaRuntimeIvyDeps(scalaVersion: String) = Agg[Dep]( ivy"org.scala-lang:scala-library:$scalaVersion".forceVersion() ) - def compilerBridgeIvyDep(scalaVersion: String) = - Dep.Point( - coursier.Dependency(coursier.Module("com.lihaoyi", "mill-bridge"), "0.1", transitive = false), - cross = false, - force = false - ) def listClassFiles(base: Path): Iterator[String] = { if (base.isDir) ls.rec(base).toIterator.filter(_.ext == "class").map(_.relativeTo(base).toString) diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index 3ce84088..3cea7fab 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -80,9 +80,9 @@ trait ScalaModule extends JavaModule { outer => resolveDependencies( repositories, Lib.depToDependency(_, scalaVersion0, platformSuffix()), - Seq(ivy"org.scala-sbt::compiler-bridge:1.1.0"), + Seq(ivy"org.scala-sbt::compiler-bridge:${Versions.zinc}"), sources = true - ).map(_.find(_.path.last == s"compiler-bridge_${scalaBinaryVersion0}-1.1.0-sources.jar").map(_.path).get) + ).map(_.find(_.path.last == s"compiler-bridge_${scalaBinaryVersion0}-${Versions.zinc}-sources.jar").map(_.path).get) } def scalacPluginClasspath: T[Agg[PathRef]] = T { diff --git a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala index 3d1a195a..52dea3e8 100644 --- a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala +++ b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala @@ -51,7 +51,7 @@ trait ScalaWorkerModule extends mill.Module{ resolveDependencies( repositories, Lib.depToDependency(_, "2.12.4", ""), - Seq(ivy"org.scala-sbt:compiler-interface:1.1.0") + Seq(ivy"org.scala-sbt:compiler-interface:${Versions.zinc}") ) } diff --git a/scalalib/src/mill/scalalib/Versions.scala b/scalalib/src/mill/scalalib/Versions.scala new file mode 100644 index 00000000..6c1c385f --- /dev/null +++ b/scalalib/src/mill/scalalib/Versions.scala @@ -0,0 +1,6 @@ +package mill.scalalib + +object Versions { + // Keep synchronized with zinc dependency in scalalib.worker in build.sc + val zinc = "1.1.7" +} |