From 57501fca3b6c2c64d32744e6d534b9de3a6674f6 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 13 Jan 2018 13:00:21 -0800 Subject: Migrate most classpath-related code onto `Loose.OSet` abstraction, to enforce deduplication --- scalajslib/src/main/scala/mill/scalajslib/Lib.scala | 8 ++++---- .../src/main/scala/mill/scalajslib/ScalaJSModule.scala | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 9 deletions(-) (limited to 'scalajslib/src') diff --git a/scalajslib/src/main/scala/mill/scalajslib/Lib.scala b/scalajslib/src/main/scala/mill/scalajslib/Lib.scala index 3de37962..744bb262 100644 --- a/scalajslib/src/main/scala/mill/scalajslib/Lib.scala +++ b/scalajslib/src/main/scala/mill/scalajslib/Lib.scala @@ -7,7 +7,7 @@ import java.net.URLClassLoader import ammonite.ops.{Path, mkdir, rm, _} import mill.eval.PathRef import mill.scalalib.Dep -import mill.util.Ctx +import mill.util.{Ctx, Loose} import scala.collection.breakOut import scala.language.reflectiveCalls @@ -21,7 +21,7 @@ object Lib { def scalaJSLinkerIvyDep(scalaJSVersion: String): Dep = Dep("com.lihaoyi", s"mill-jsbridge_${scalaJSVersion.replace('.', '_')}", "0.1-SNAPSHOT") - def scalaJSLinkerBridge(classPath: Seq[Path]): ScalaJSLinkerBridge = { + def scalaJSLinkerBridge(classPath: Loose.OSet[Path]): ScalaJSLinkerBridge = { val classloaderSig = classPath.map(p => p.toString().hashCode + p.mtime.toMillis).sum LinkerBridge.scalaInstanceCache match { case Some((`classloaderSig`, linker)) => linker @@ -44,7 +44,7 @@ object Lib { def link(main: Option[String], inputPaths: Seq[Path], - libraries: Seq[Path], + libraries: Loose.OSet[Path], linker: ScalaJSLinkerBridge, mode: OptimizeMode) (implicit ctx: Ctx.DestCtx): PathRef = { @@ -53,7 +53,7 @@ object Lib { if (inputPaths.nonEmpty) { mkdir(outputPath / up) val inputFiles: Vector[File] = inputPaths.map(ls).flatMap(_.filter(_.ext == "sjsir")).map(_.toIO)(breakOut) - val inputLibraries: Vector[File] = libraries.filter(_.ext == "jar").map(_.toIO)(breakOut) + val inputLibraries: Vector[File] = libraries.filter(_.ext == "jar").map(_.toIO).toVector linker.link(inputFiles, inputLibraries, outputPath.toIO, main, mode) } PathRef(outputPath) diff --git a/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala b/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala index ed0a2c85..03c4e216 100644 --- a/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala +++ b/scalajslib/src/main/scala/mill/scalajslib/ScalaJSModule.scala @@ -7,7 +7,8 @@ import ammonite.ops.Path import mill.eval.Result.Success import mill.scalajslib.Lib._ import mill.scalalib.Lib.resolveDependencies -import mill.scalalib.{Dep, PublishModule, Module, TestModule} +import mill.scalalib.{Dep, Module, PublishModule, TestModule} +import mill.util.Loose trait ScalaJSModule extends scalalib.Module { outer => @@ -26,10 +27,16 @@ trait ScalaJSModule extends scalalib.Module { outer => def scalaJSBridgeVersion = T{ scalaJSVersion().split('.').dropRight(1).mkString(".") } - def scalaJSLinkerClasspath: T[Seq[PathRef]] = T{ + def scalaJSLinkerClasspath: T[Loose.OSet[PathRef]] = T{ val jsBridgeKey = "MILL_SCALAJS_BRIDGE_" + scalaJSBridgeVersion().replace('.', '_') val jsBridgePath = sys.props(jsBridgeKey) - if (jsBridgePath != null) Success(jsBridgePath.split(File.pathSeparator).map(f => PathRef(Path(f), quick = true)).toVector) + if (jsBridgePath != null) { + Success( + Loose.OSet.from( + jsBridgePath.split(File.pathSeparator).map(f => PathRef(Path(f), quick = true)) + ) + ) + } else { val dep = scalaJSLinkerIvyDep(scalaJSBridgeVersion()) resolveDependencies( @@ -51,9 +58,9 @@ trait ScalaJSModule extends scalalib.Module { outer => link(mainClass(), Seq(compile().classes.path), compileDepClasspath().map(_.path), linker, FullOpt) } - override def scalacPluginIvyDeps = T{ Seq(Dep.Point("org.scala-js", "scalajs-compiler", scalaJSVersion())) } + override def scalacPluginIvyDeps = T{ Loose.OSet(Dep.Point("org.scala-js", "scalajs-compiler", scalaJSVersion())) } - override def ivyDeps = T{ Seq(Dep("org.scala-js", "scalajs-library", scalaJSVersion())) } + override def ivyDeps = T{ Loose.OSet(Dep("org.scala-js", "scalajs-library", scalaJSVersion())) } // publish artifact with name "mill_sjs0.6.4_2.12" instead of "mill_sjs0.6_2.12" def crossFullScalaJSVersion: T[Boolean] = false -- cgit v1.2.3