From f6ab030e7d88e1c0ac290ec5773022f18d3524b0 Mon Sep 17 00:00:00 2001 From: Francis De Brabandere Date: Thu, 8 Mar 2018 16:46:56 +0100 Subject: fix #174 skip interfaces when finding tests (#210) --- scalaworker/src/mill/scalaworker/ScalaWorker.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scalaworker/src/mill/scalaworker/ScalaWorker.scala b/scalaworker/src/mill/scalaworker/ScalaWorker.scala index 12511b60..ddf6f916 100644 --- a/scalaworker/src/mill/scalaworker/ScalaWorker.scala +++ b/scalaworker/src/mill/scalaworker/ScalaWorker.scala @@ -333,8 +333,8 @@ class ScalaWorker(ctx0: mill.util.Ctx, val cls = cl.loadClass(path.stripSuffix(".class").replace('/', '.')) fingerprints.find { case f: SubclassFingerprint => - - (f.isModule == cls.getName.endsWith("$")) && + !cls.isInterface && + (f.isModule == cls.getName.endsWith("$")) && cl.loadClass(f.superclassName()).isAssignableFrom(cls) case f: AnnotatedFingerprint => (f.isModule == cls.getName.endsWith("$")) && -- cgit v1.2.3 From 877715fbb4e00f1593520045439a8834cf054bd6 Mon Sep 17 00:00:00 2001 From: Shani Elharrar Date: Fri, 9 Mar 2018 19:59:55 +0200 Subject: ScalaModule: Added ivyDepsTree command (#213) --- scalalib/src/mill/scalalib/ScalaModule.scala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index 5a355bc6..119d4d47 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -71,6 +71,7 @@ trait ScalaModule extends mill.Module with TaskModule { outer => def transitiveIvyDeps: T[Agg[Dep]] = T{ ivyDeps() ++ Task.traverse(moduleDeps)(_.transitiveIvyDeps)().flatten } + def upstreamCompileOutput = T{ Task.traverse(moduleDeps)(_.compile) } @@ -247,6 +248,20 @@ trait ScalaModule extends mill.Module with TaskModule { outer => ) } + def ivyDepsTree(inverse: Boolean = false) = T.command { + import coursier.{Cache, Fetch, Resolution} + + val flattened = ivyDeps().map(depToDependency(_, scalaVersion(), platformSuffix())).toSeq + val start = Resolution(flattened.toSet) + val fetch = Fetch.from(repositories, Cache.fetch()) + val resolution = start.process.run(fetch).unsafePerformSync + + println(coursier.util.Print.dependencyTree(flattened, resolution, + printExclusions = false, reverse = inverse)) + + Result.Success() + } + def runLocal(args: String*) = T.command { Jvm.runLocal( finalMainClass(), -- cgit v1.2.3 From 3635964e18c55a66c214cd3261f4cc515a6982a0 Mon Sep 17 00:00:00 2001 From: Lorenzo Gabriele Date: Sat, 10 Mar 2018 04:10:48 +0100 Subject: ScalaJSModule: Support to switch between NoModule and CommonJSModule ModuleKinds (#212) --- .../0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala | 14 +++++++++++--- .../1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala | 14 +++++++++++--- scalajslib/src/mill/scalajslib/ScalaJSBridge.scala | 15 ++++++++++++--- scalajslib/src/mill/scalajslib/ScalaJSModule.scala | 17 ++++++++++++----- 4 files changed, 46 insertions(+), 14 deletions(-) diff --git a/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala b/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala index 57fbf65a..283576ab 100644 --- a/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/0.6/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -7,19 +7,27 @@ import java.io.File import org.scalajs.core.tools.io.IRFileCache.IRContainer import org.scalajs.core.tools.io._ import org.scalajs.core.tools.jsdep.ResolvedJSDependency -import org.scalajs.core.tools.linker.{ModuleInitializer, StandardLinker, Semantics} +import org.scalajs.core.tools.linker.{ModuleInitializer, StandardLinker, Semantics, ModuleKind => ScalaJSModuleKind} import org.scalajs.core.tools.logging.ScalaConsoleLogger import org.scalajs.jsenv._ import org.scalajs.jsenv.nodejs._ import org.scalajs.testadapter.TestAdapter class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { - def link(sources: Array[File], libraries: Array[File], dest: File, main: String, fullOpt: Boolean): Unit = { + def link(sources: Array[File], libraries: Array[File], dest: File, main: String, fullOpt: Boolean, moduleKind: ModuleKind): Unit = { val semantics = fullOpt match { case true => Semantics.Defaults.optimized case false => Semantics.Defaults } - val config = StandardLinker.Config().withOptimizer(fullOpt).withClosureCompilerIfAvailable(fullOpt).withSemantics(semantics) + val scalaJSModuleKind = moduleKind match { + case ModuleKind.NoModule => ScalaJSModuleKind.NoModule + case ModuleKind.CommonJSModule => ScalaJSModuleKind.CommonJSModule + } + val config = StandardLinker.Config() + .withOptimizer(fullOpt) + .withClosureCompilerIfAvailable(fullOpt) + .withSemantics(semantics) + .withModuleKind(scalaJSModuleKind) val linker = StandardLinker(config) val sourceSJSIRs = sources.map(new FileVirtualScalaJSIRFile(_)) val jars = libraries.map(jar => IRContainer.Jar(new FileVirtualBinaryFile(jar) with VirtualJarFile)) diff --git a/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala b/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala index d7ed26eb..711ef200 100644 --- a/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala +++ b/scalajslib/jsbridges/1.0/src/mill/scalajslib/bridge/ScalaJSBridge.scala @@ -5,19 +5,27 @@ package bridge import java.io.File import org.scalajs.core.tools.io._ -import org.scalajs.core.tools.linker.{ModuleInitializer, StandardLinker, Semantics} +import org.scalajs.core.tools.linker.{ModuleInitializer, StandardLinker, Semantics, ModuleKind => ScalaJSModuleKind} import org.scalajs.core.tools.logging.ScalaConsoleLogger import org.scalajs.jsenv.ConsoleJSConsole import org.scalajs.jsenv.nodejs._ import org.scalajs.testadapter.TestAdapter class ScalaJSBridge extends mill.scalajslib.ScalaJSBridge { - def link(sources: Array[File], libraries: Array[File], dest: File, main: String, fullOpt: Boolean): Unit = { + def link(sources: Array[File], libraries: Array[File], dest: File, main: String, fullOpt: Boolean, moduleKind: ModuleKind): Unit = { val semantics = fullOpt match { case true => Semantics.Defaults.optimized case false => Semantics.Defaults } - val config = StandardLinker.Config().withOptimizer(fullOpt).withClosureCompilerIfAvailable(fullOpt).withSemantics(semantics) + val scalaJSModuleKind = moduleKind match { + case ModuleKind.NoModule => ScalaJSModuleKind.NoModule + case ModuleKind.CommonJSModule => ScalaJSModuleKind.CommonJSModule + } + val config = StandardLinker.Config() + .withOptimizer(fullOpt) + .withClosureCompilerIfAvailable(fullOpt) + .withSemantics(semantics) + .withModuleKind(scalaJSModuleKind) val linker = StandardLinker(config) val cache = new IRFileCache().newCache val sourceIRs = sources.map(FileVirtualScalaJSIRFile) diff --git a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala index e5952291..17bcd6c7 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala @@ -12,6 +12,12 @@ sealed trait OptimizeMode object FastOpt extends OptimizeMode object FullOpt extends OptimizeMode +sealed trait ModuleKind +object ModuleKind{ + object NoModule extends ModuleKind + object CommonJSModule extends ModuleKind +} + class ScalaJSWorker { private var scalaInstanceCache = Option.empty[(Long, ScalaJSBridge)] @@ -40,13 +46,15 @@ class ScalaJSWorker { libraries: Agg[Path], dest: File, main: Option[String], - fullOpt: Boolean): Unit = { + fullOpt: Boolean, + moduleKind: ModuleKind): Unit = { bridge(toolsClasspath).link( sources.items.map(_.toIO).toArray, libraries.items.map(_.toIO).toArray, dest, main.orNull, - fullOpt + fullOpt, + moduleKind ) } @@ -68,7 +76,8 @@ trait ScalaJSBridge { libraries: Array[File], dest: File, main: String, - fullOpt: Boolean): Unit + fullOpt: Boolean, + moduleKind: ModuleKind): Unit def run(config: NodeJSConfig, linkedFile: File): Unit diff --git a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala index 4f932e1e..dd955bc7 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala @@ -72,7 +72,8 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => toolsClasspath(), runClasspath(), finalMainClassOpt().toOption, - FastOpt + FastOpt, + moduleKind() ) } @@ -82,7 +83,8 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => toolsClasspath(), runClasspath(), finalMainClassOpt().toOption, - FullOpt + FullOpt, + moduleKind() ) } @@ -114,7 +116,8 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => toolsClasspath: Agg[PathRef], runClasspath: Agg[PathRef], mainClass: Option[String], - mode: OptimizeMode)(implicit ctx: Ctx.Dest): PathRef = { + mode: OptimizeMode, + moduleKind: ModuleKind)(implicit ctx: Ctx.Dest): PathRef = { val outputPath = ctx.dest / "out.js" mkdir(ctx.dest) @@ -132,7 +135,8 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => libraries, outputPath.toIO, mainClass, - mode == FullOpt + mode == FullOpt, + moduleKind ) PathRef(outputPath) } @@ -159,6 +163,8 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => override def platformSuffix = s"_sjs${artifactScalaJSVersion()}" def nodeJSConfig = T { NodeJSConfig() } + + def moduleKind: T[ModuleKind] = T { ModuleKind.NoModule } } trait TestScalaJSModule extends ScalaJSModule with TestModule { @@ -177,7 +183,8 @@ trait TestScalaJSModule extends ScalaJSModule with TestModule { toolsClasspath(), scalaJSTestDeps() ++ runClasspath(), None, - FastOpt + FastOpt, + moduleKind() ) } -- cgit v1.2.3 From 03e7b54d87a564da84a16989b1c916d9f47256e4 Mon Sep 17 00:00:00 2001 From: Robby Date: Sat, 10 Mar 2018 13:01:32 -0600 Subject: Support for Java 9 (and 10). (#215) --- build.sc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.sc b/build.sc index 63c4c362..83dc5922 100755 --- a/build.sc +++ b/build.sc @@ -83,7 +83,7 @@ object core extends MillModule { def ivyDeps = Agg( ivy"com.lihaoyi::sourcecode:0.1.4", - ivy"com.lihaoyi:::ammonite:1.0.5", + ivy"com.lihaoyi:::ammonite:1.0.5-1-819bc80", ivy"jline:jline:2.14.5" ) -- cgit v1.2.3 From 0c91649e548f4fe6620e067dfe7425e3bca0de62 Mon Sep 17 00:00:00 2001 From: benjaminfrank Date: Sun, 11 Mar 2018 02:31:58 +0100 Subject: Update 1 - Intro to Mill.md (#218) --- docs/pages/1 - Intro to Mill.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/pages/1 - Intro to Mill.md b/docs/pages/1 - Intro to Mill.md index b912bf14..d1e387b5 100644 --- a/docs/pages/1 - Intro to Mill.md +++ b/docs/pages/1 - Intro to Mill.md @@ -17,6 +17,14 @@ external subprocesses. ## Installation +### OS X + +Installation via [homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/mill.rb): + +```sh +brew install mill +``` + ### Arch Linux Arch Linux has an [AUR package for mill](https://aur.archlinux.org/packages/mill/): -- cgit v1.2.3 From 46c516893a641a283f11a46f5c45a5cf1b4af373 Mon Sep 17 00:00:00 2001 From: Robby Date: Sat, 10 Mar 2018 19:32:42 -0600 Subject: Changes to make {clientserver,main,scalalib,scalajslib}.test work under Java 9 (#217) * Append "exported rt.jar" when creating URLClassLoader. * Disabled tests involving Scala 2.10 & 2.11 and nashorn. * Use java.net.URLClassLoader. --- core/src/mill/util/ClassLoader.scala | 12 ++++++++++ main/src/mill/modules/Jvm.scala | 4 ++-- main/test/src/mill/util/TestUtil.scala | 5 ++++ scalajslib/src/mill/scalajslib/ScalaJSBridge.scala | 4 ++-- .../src/mill/scalajslib/HelloJSWorldTests.scala | 28 +++++++++++----------- .../src/mill/scalajslib/MultiModuleTests.scala | 4 ++-- .../test/src/mill/scalalib/HelloWorldTests.scala | 4 ++-- scalaworker/src/mill/scalaworker/ScalaWorker.scala | 6 ++--- 8 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 core/src/mill/util/ClassLoader.scala diff --git a/core/src/mill/util/ClassLoader.scala b/core/src/mill/util/ClassLoader.scala new file mode 100644 index 00000000..7f4a9836 --- /dev/null +++ b/core/src/mill/util/ClassLoader.scala @@ -0,0 +1,12 @@ +package mill.util + +import java.net.{URL, URLClassLoader} + +import io.github.retronym.java9rtexport.Export + +object ClassLoader { + def create(urls: Seq[URL], parent: java.lang.ClassLoader): URLClassLoader = { + val rtOpt = if (ammonite.util.Util.java9OrAbove) Some(Export.export().toURI.toURL) else None + new URLClassLoader((urls ++ rtOpt).toArray, parent) + } +} diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index 153e1959..dba3552d 100644 --- a/main/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala @@ -104,7 +104,7 @@ object Jvm { body: ClassLoader => T): T = { val cl = if (classLoaderOverrideSbtTesting) { val outerClassLoader = getClass.getClassLoader - new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, null){ + new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, mill.util.ClassLoader.create(Seq(), null)){ override def findClass(name: String) = { if (name.startsWith("sbt.testing.")){ outerClassLoader.loadClass(name) @@ -114,7 +114,7 @@ object Jvm { } } } else { - new URLClassLoader(classPath.map(_.toIO.toURI.toURL).toArray, null) + mill.util.ClassLoader.create(classPath.map(_.toIO.toURI.toURL).toVector, null) } val oldCl = Thread.currentThread().getContextClassLoader Thread.currentThread().setContextClassLoader(cl) diff --git a/main/test/src/mill/util/TestUtil.scala b/main/test/src/mill/util/TestUtil.scala index d06c7f6a..d0caade7 100644 --- a/main/test/src/mill/util/TestUtil.scala +++ b/main/test/src/mill/util/TestUtil.scala @@ -78,4 +78,9 @@ object TestUtil { } } } + def disableInJava9OrAbove(f: => Any): Unit = { + if (!ammonite.util.Util.java9OrAbove) { + f + } + } } diff --git a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala index 17bcd6c7..322a6ca4 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSBridge.scala @@ -27,8 +27,8 @@ class ScalaJSWorker { scalaInstanceCache match { case Some((sig, bridge)) if sig == classloaderSig => bridge case _ => - val cl = new URLClassLoader( - toolsClasspath.map(_.toIO.toURI.toURL).toArray, + val cl = mill.util.ClassLoader.create( + toolsClasspath.map(_.toIO.toURI.toURL).toVector, getClass.getClassLoader ) val bridge = cl diff --git a/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala b/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala index 2429a189..cfdcdd1f 100644 --- a/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala +++ b/scalajslib/test/src/mill/scalajslib/HelloJSWorldTests.scala @@ -102,7 +102,7 @@ object HelloJSWorldTests extends TestSuite { 'fromScratch_2124_0622 - testCompileFromScratch("2.12.4", "0.6.22") 'fromScratch_2123_0622 - testCompileFromScratch("2.12.3", "0.6.22") - 'fromScratch_2118_0622 - testCompileFromScratch("2.11.8", "0.6.22") + 'fromScratch_2118_0622 - TestUtil.disableInJava9OrAbove(testCompileFromScratch("2.11.8", "0.6.22")) 'fromScratch_2124_100M2 - testCompileFromScratch("2.12.4", "1.0.0-M2") } @@ -119,16 +119,16 @@ object HelloJSWorldTests extends TestSuite { } 'fullOpt - { - 'run_2124_0622 - testRun("2.12.4", "0.6.22", FullOpt) - 'run_2123_0622 - testRun("2.12.3", "0.6.22", FullOpt) - 'run_2118_0622 - testRun("2.11.8", "0.6.22", FullOpt) - 'run_2124_100M2 - testRun("2.12.4", "1.0.0-M2", FullOpt) + 'run_2124_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "0.6.22", FullOpt)) + 'run_2123_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.3", "0.6.22", FullOpt)) + 'run_2118_0622 - TestUtil.disableInJava9OrAbove(testRun("2.11.8", "0.6.22", FullOpt)) + 'run_2124_100M2 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "1.0.0-M2", FullOpt)) } 'fastOpt - { - 'run_2124_0622 - testRun("2.12.4", "0.6.22", FastOpt) - 'run_2123_0622 - testRun("2.12.3", "0.6.22", FastOpt) - 'run_2118_0622 - testRun("2.11.8", "0.6.22", FastOpt) - 'run_2124_100M2 - testRun("2.12.4", "1.0.0-M2", FastOpt) + 'run_2124_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "0.6.22", FastOpt)) + 'run_2123_0622 - TestUtil.disableInJava9OrAbove(testRun("2.12.3", "0.6.22", FastOpt)) + 'run_2118_0622 - TestUtil.disableInJava9OrAbove(testRun("2.11.8", "0.6.22", FastOpt)) + 'run_2124_100M2 - TestUtil.disableInJava9OrAbove(testRun("2.12.4", "1.0.0-M2", FastOpt)) } 'jar - { 'containsSJSIRs - { @@ -192,12 +192,12 @@ object HelloJSWorldTests extends TestSuite { ) } - 'utest_2118_0622 - checkUtest("2.11.8", "0.6.22") + 'utest_2118_0622 - TestUtil.disableInJava9OrAbove(checkUtest("2.11.8", "0.6.22")) 'utest_2124_0622 - checkUtest("2.12.4", "0.6.22") - 'utest_2118_100M2 - checkUtest("2.11.8", "1.0.0-M2") + 'utest_2118_100M2 - TestUtil.disableInJava9OrAbove(checkUtest("2.11.8", "1.0.0-M2")) 'utest_2124_100M2 - checkUtest("2.12.4", "1.0.0-M2") - 'scalaTest_2118_0622 - checkScalaTest("2.11.8", "0.6.22") + 'scalaTest_2118_0622 - TestUtil.disableInJava9OrAbove(checkScalaTest("2.11.8", "0.6.22")) 'scalaTest_2124_0622 - checkScalaTest("2.12.4", "0.6.22") // No scalatest artifact for scala.js 1.0.0-M2 published yet // 'scalaTest_2118_100M2 - checkScalaTest("2.11.8", "1.0.0-M2") @@ -222,9 +222,9 @@ object HelloJSWorldTests extends TestSuite { } 'run - { - 'run_2118_0622 - checkRun("2.11.8", "0.6.22") + 'run_2118_0622 - TestUtil.disableInJava9OrAbove(checkRun("2.11.8", "0.6.22")) 'run_2124_0622 - checkRun("2.12.4", "0.6.22") - 'run_2118_100M2 - checkRun("2.11.8", "1.0.0-M2") + 'run_2118_100M2 - TestUtil.disableInJava9OrAbove(checkRun("2.11.8", "1.0.0-M2")) 'run_2124_100M2 - checkRun("2.12.4", "1.0.0-M2") } } diff --git a/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala b/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala index e2364f38..37429038 100644 --- a/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala +++ b/scalajslib/test/src/mill/scalajslib/MultiModuleTests.scala @@ -54,8 +54,8 @@ object MultiModuleTests extends TestSuite { ) } - 'fastOpt - checkOpt(FastOpt) - 'fullOpt - checkOpt(FullOpt) + 'fastOpt - TestUtil.disableInJava9OrAbove(checkOpt(FastOpt)) + 'fullOpt - TestUtil.disableInJava9OrAbove(checkOpt(FullOpt)) 'test - { val Right(((_, testResults), evalCount)) = evaluator(MultiModule.client.test.test()) diff --git a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala index 317f9bec..61d2b724 100644 --- a/scalalib/test/src/mill/scalalib/HelloWorldTests.scala +++ b/scalalib/test/src/mill/scalalib/HelloWorldTests.scala @@ -246,8 +246,8 @@ object HelloWorldTests extends TestSuite { read(runResult) == expectedOut ) } - 'v210 - workspaceTest(CrossHelloWorld)(cross(_, "2.10.6", "2.10.6 rox")) - 'v211 - workspaceTest(CrossHelloWorld)(cross(_, "2.11.11", "2.11.11 pwns")) + 'v210 - TestUtil.disableInJava9OrAbove(workspaceTest(CrossHelloWorld)(cross(_, "2.10.6", "2.10.6 rox"))) + 'v211 - TestUtil.disableInJava9OrAbove(workspaceTest(CrossHelloWorld)(cross(_, "2.11.11", "2.11.11 pwns"))) 'v2123 - workspaceTest(CrossHelloWorld)(cross(_, "2.12.3", "2.12.3 leet")) 'v2124 - workspaceTest(CrossHelloWorld)(cross(_, "2.12.4", "2.12.4 leet")) } diff --git a/scalaworker/src/mill/scalaworker/ScalaWorker.scala b/scalaworker/src/mill/scalaworker/ScalaWorker.scala index ddf6f916..ca20ccf1 100644 --- a/scalaworker/src/mill/scalaworker/ScalaWorker.scala +++ b/scalaworker/src/mill/scalaworker/ScalaWorker.scala @@ -89,7 +89,7 @@ class ScalaWorker(ctx0: mill.util.Ctx, .get val sourceFolder = mill.modules.Util.unpackZip(sourceJar)(workingDir) - val classloader = new URLClassLoader(compilerJars.map(_.toURI.toURL), null) + val classloader = mill.util.ClassLoader.create(compilerJars.map(_.toURI.toURL), null) val scalacMain = classloader.loadClass("scala.tools.nsc.Main") val argsArray = Array[String]( "-d", compiledDest.toString, @@ -145,7 +145,7 @@ class ScalaWorker(ctx0: mill.util.Ctx, val compilerClassLoader = scalaClassloaderCache match{ case Some((k, v)) if k == compilerClassloaderSig => v case _ => - val classloader = new URLClassLoader(compilerJars.map(_.toURI.toURL), null) + val classloader = mill.util.ClassLoader.create(compilerJars.map(_.toURI.toURL), null) scalaClassloaderCache = Some((compilerClassloaderSig, classloader)) classloader } @@ -155,7 +155,7 @@ class ScalaWorker(ctx0: mill.util.Ctx, case _ => val scalaInstance = new ScalaInstance( version = scalaVersion, - loader = new URLClassLoader(pluginJars.map(_.toURI.toURL), compilerClassLoader), + loader = mill.util.ClassLoader.create(pluginJars.map(_.toURI.toURL), compilerClassLoader), libraryJar = grepJar(compilerClasspath, s"scala-library-$scalaVersion.jar"), compilerJar = grepJar(compilerClasspath, s"scala-compiler-$scalaVersion.jar"), allJars = compilerJars ++ pluginJars, -- cgit v1.2.3 From 95e6cb9124431a2203f48433a5d7551c542b7f56 Mon Sep 17 00:00:00 2001 From: Shani Elharrar Date: Sun, 11 Mar 2018 03:33:25 +0200 Subject: MainModule/resolve: print results sorted alphabetically (#216) Fixes #161 --- main/src/mill/main/MainModule.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/src/mill/main/MainModule.scala b/main/src/mill/main/MainModule.scala index 9fa6e4dd..4b0a4354 100644 --- a/main/src/mill/main/MainModule.scala +++ b/main/src/mill/main/MainModule.scala @@ -42,7 +42,7 @@ trait MainModule extends mill.Module{ resolved match{ case Left(err) => Result.Failure(err) case Right(rs) => - for(r <- rs){ + for(r <- rs.sorted) { println(r) } Result.Success(()) -- cgit v1.2.3 From 55ee6ed4616657d308d3e7843d478e74352737ae Mon Sep 17 00:00:00 2001 From: Robby Date: Sun, 11 Mar 2018 01:39:09 -0600 Subject: Test mill using Java 9 (in addition to Java 8) (#219) * Test mill using Java 9 (in addition to Java 8). * Use mill -i. * Fixed Java 9 path. --- .appveyor.yml | 14 +++++++++++--- .travis.yml | 21 +++++++++++++++++---- ci/publish-local.sh | 2 +- ci/test-mill-0.sh | 2 +- ci/test-mill-dev.sh | 2 +- ci/test-mill-release.sh | 2 +- .../test/src/mill/integration/AcyclicTests.scala | 2 +- .../test/src/mill/integration/UpickleTests.scala | 15 +++++++++++---- 8 files changed, 44 insertions(+), 16 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 8fa75778..376d0ece 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -15,14 +15,22 @@ environment: MSYS2_DIR: msys64 MSYSTEM: MINGW64 BIT: 64 - JAVA_HOME: 'C:\Program Files\Java\jdk1.8.0' - PATH: '%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH%' + JAVA_HOME: C:\Program Files\Java\jdk1.8.0 + - COMPILER: msys2 + PLATFORM: x64 + MSYS2_ARCH: x86_64 + MSYS2_DIR: msys64 + MSYSTEM: MINGW64 + BIT: 64 + JAVA_HOME: C:\Program Files\Java\jdk9 cache: - '%LOCALAPPDATA%\Coursier\cache' install: - - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.4/0.1.4-12-f5250d" + - cmd: SET PATH=%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH% + - cmd: java -version + - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.4/0.1.4-22-95e6cb" build_script: - bash -lc "cd /c/mill && mill -i all main.test scalajslib.test" diff --git a/.travis.yml b/.travis.yml index 45373358..a7c66a8c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,28 +2,41 @@ language: scala sudo: required dist: trusty -jdk: - - oraclejdk8 - matrix: include: - stage: build env: CI_SCRIPT=ci/test-mill-0.sh + jdk: oraclejdk9 + - stage: build + env: CI_SCRIPT=ci/test-mill-0.sh + jdk: oraclejdk8 - stage: build env: CI_SCRIPT=ci/test-mill-1.sh + jdk: oraclejdk8 - stage: build env: CI_SCRIPT=ci/test-mill-2.sh + jdk: oraclejdk8 - stage: build env: CI_SCRIPT=ci/test-mill-dev.sh + jdk: oraclejdk9 + - stage: build + env: CI_SCRIPT=ci/test-mill-dev.sh + jdk: oraclejdk8 + - stage: build + env: CI_SCRIPT=ci/test-mill-release.sh + jdk: oraclejdk9 - stage: build env: CI_SCRIPT=ci/test-mill-release.sh + jdk: oraclejdk8 - stage: release env: CI_SCRIPT="ci/on-master.py ci/release.sh" + jdk: oraclejdk8 - stage: release env: CI_SCRIPT="ci/on-master.py ci/publish-docs.sh" + jdk: oraclejdk8 script: - - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.3/0.1.3 && chmod +x ~/bin/mill + - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.4/0.1.4-22-95e6cb && chmod +x ~/bin/mill - export PATH=~/bin/mill:$PATH - "$CI_SCRIPT" diff --git a/ci/publish-local.sh b/ci/publish-local.sh index fc9e06b9..c137340d 100755 --- a/ci/publish-local.sh +++ b/ci/publish-local.sh @@ -2,6 +2,6 @@ set -eux -mill all __.publishLocal release +mill -i all __.publishLocal release mv out/release/dest/mill ~/mill-release diff --git a/ci/test-mill-0.sh b/ci/test-mill-0.sh index 3d1470f1..ee5b7213 100755 --- a/ci/test-mill-0.sh +++ b/ci/test-mill-0.sh @@ -6,4 +6,4 @@ set -eux git clean -xdf # Run tests using Mill built using SBT -mill all {clientserver,main,scalalib,scalajslib}.test +mill -i all {clientserver,main,scalalib,scalajslib}.test diff --git a/ci/test-mill-dev.sh b/ci/test-mill-dev.sh index cb83ef00..11d64154 100755 --- a/ci/test-mill-dev.sh +++ b/ci/test-mill-dev.sh @@ -6,7 +6,7 @@ set -eux git clean -xdf # Build Mill using SBT -mill dev.assembly +mill -i dev.assembly # Second build & run tests using Mill out/dev/assembly/dest/mill -i all {clientserver,main,scalalib,scalajslib}.test diff --git a/ci/test-mill-release.sh b/ci/test-mill-release.sh index 3c70410b..8c0aca2f 100755 --- a/ci/test-mill-release.sh +++ b/ci/test-mill-release.sh @@ -11,4 +11,4 @@ git clean -xdf # Second build & run tests using Mill -~/mill-release integration.test "mill.integration.forked.{AcyclicTests,UpickleTests}" +~/mill-release -i integration.test "mill.integration.forked.{AcyclicTests,UpickleTests}" diff --git a/integration/test/src/mill/integration/AcyclicTests.scala b/integration/test/src/mill/integration/AcyclicTests.scala index d1035af0..c117f862 100644 --- a/integration/test/src/mill/integration/AcyclicTests.scala +++ b/integration/test/src/mill/integration/AcyclicTests.scala @@ -25,7 +25,7 @@ class AcyclicTests(fork: Boolean) assert(!brokenCompile) } - 'scala2118 - check("2.11.8") + 'scala2118 - mill.util.TestUtil.disableInJava9OrAbove(check("2.11.8")) 'scala2124 - check("2.12.4") } diff --git a/integration/test/src/mill/integration/UpickleTests.scala b/integration/test/src/mill/integration/UpickleTests.scala index dba6488d..1b83c60f 100644 --- a/integration/test/src/mill/integration/UpickleTests.scala +++ b/integration/test/src/mill/integration/UpickleTests.scala @@ -6,12 +6,19 @@ import utest._ class UpickleTests(fork: Boolean) extends IntegrationTestSuite("MILL_UPICKLE_REPO", "upickle", fork) { val tests = Tests{ initWorkspace() - 'jvm - { - assert(eval("upickleJvm[2.11.11].test")) - val jvmMeta = meta("upickleJvm[2.11.11].test.test") + 'jvm21111 - { + mill.util.TestUtil.disableInJava9OrAbove({ + assert(eval("upickleJvm[2.11.11].test")) + val jvmMeta = meta("upickleJvm[2.11.11].test.test") + assert(jvmMeta.contains("example.ExampleTests.simple")) + assert(jvmMeta.contains("upickle.MacroTests.commonCustomStructures.simpleAdt")) + }) + } + 'jvm2124 - { + assert(eval("upickleJvm[2.12.4].test")) + val jvmMeta = meta("upickleJvm[2.12.4].test.test") assert(jvmMeta.contains("example.ExampleTests.simple")) assert(jvmMeta.contains("upickle.MacroTests.commonCustomStructures.simpleAdt")) - } 'js - { assert(eval("upickleJs[2.12.4].test")) -- cgit v1.2.3 From e73f8084c531e25435d3f38d2cf518f391ae3ce0 Mon Sep 17 00:00:00 2001 From: rockjam <5min4eq.unity@gmail.com> Date: Tue, 13 Mar 2018 12:35:32 +0300 Subject: 0.1.5 --- readme.md | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index ca821226..4a60a1c5 100644 --- a/readme.md +++ b/readme.md @@ -328,13 +328,39 @@ rm -rf out/ ## Changelog -### master +### 0.1.5 - Introduced the `mill plan foo.bar` command, which shows you what the execution plan of running the `foo.bar` task looks like without actually evaluating it. - Mill now generates an `out/mill-profile.json` file containing task-timings, to make it easier to see where your mill evaluation time is going + +- Introduced `ScalaModule#ivyDepsTree` command to show dependencies tree + +- Rename `describe` to `inspect` for consistency with SBT + +- `mill resolve` now prints results sorted alphabetically + +- Node.js configuration can be customised with `ScalaJSModule#nodeJSConfig` + +- Scala.js `fullOpt` now uses Google Closure Compiler after generating the optimized Javascript output + +- Scala.js now supports `NoModule` and `CommonJSModule` module kinds + +- Include `compileIvyDeps` when generating IntelliJ projects + +- Fixed invalid POM generation + +- Support for Java 9 (and 10) + +- Fixes for Windows support + +- Fixed test classes discovery by skipping interfaces + +- Include "optional" artifacts in dependency resolution if they exist + +- `out/{module_name}` now added as a content root in generated IntelliJ project ### 0.1.4 -- cgit v1.2.3 From 86ac46588beb2c6a29996ce8499165acd3bb357c Mon Sep 17 00:00:00 2001 From: rockjam <5min4eq.unity@gmail.com> Date: Tue, 13 Mar 2018 13:19:50 +0300 Subject: update readme and CI configuration to mill 0.1.5 --- .appveyor.yml | 2 +- .travis.yml | 4 ++-- docs/pages/1 - Intro to Mill.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 376d0ece..09b2d7da 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -30,7 +30,7 @@ cache: install: - cmd: SET PATH=%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH% - cmd: java -version - - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.4/0.1.4-22-95e6cb" + - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5" build_script: - bash -lc "cd /c/mill && mill -i all main.test scalajslib.test" diff --git a/.travis.yml b/.travis.yml index a7c66a8c..17487997 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,10 +36,10 @@ matrix: jdk: oraclejdk8 script: - - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.4/0.1.4-22-95e6cb && chmod +x ~/bin/mill + - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5 && chmod +x ~/bin/mill - export PATH=~/bin/mill:$PATH - "$CI_SCRIPT" cache: directories: - - $HOME/.coursier \ No newline at end of file + - $HOME/.coursier diff --git a/docs/pages/1 - Intro to Mill.md b/docs/pages/1 - Intro to Mill.md index d1e387b5..83de1eab 100644 --- a/docs/pages/1 - Intro to Mill.md +++ b/docs/pages/1 - Intro to Mill.md @@ -39,7 +39,7 @@ To get started, download Mill and install it into your system via the following `curl`/`chmod` command: ```bash -sudo curl -L -o /usr/local/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.4/0.1.4 && sudo chmod +x /usr/local/bin/mill +sudo curl -L -o /usr/local/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5 && sudo chmod +x /usr/local/bin/mill ``` ### Development Releases -- cgit v1.2.3 From ac7eedc2cc858a778a63a7e03ccd03bac2676871 Mon Sep 17 00:00:00 2001 From: Alexis Hernandez Date: Tue, 13 Mar 2018 10:16:43 -0600 Subject: Update readme.md to fix a typo (#223) * Update readme.md to fix a typo * Update readme.md --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 4a60a1c5..9c124fbd 100644 --- a/readme.md +++ b/readme.md @@ -107,7 +107,7 @@ mill bridges[2.12.4].publish --credentials foo --gpgPassphrase bar mill all main.test scalalib.test ``` -**Note**: don't forget to put `--all` flag when you run multiple commands, otherwise the only first command will be run, and subsequent commands will be passed as arguments to the first one. +**Note**: don't forget to put `all` flag when you run multiple commands, otherwise the only first command will be run, and subsequent commands will be passed as arguments to the first one. * Run multiple commands with arguments: ```bash @@ -165,7 +165,7 @@ mill all __.test mill all bridges[_].compile ``` -**Note**: When you run multiple targets with `--all` flag, they are not +**Note**: When you run multiple targets with `all` command, they are not guaranteed to run in that exact order. Mill will build task evaluation graph and run targets in correct order. -- cgit v1.2.3 From a9d4eea6f5b81cdbef84724e612bf07954e2673c Mon Sep 17 00:00:00 2001 From: Robby Date: Tue, 13 Mar 2018 11:41:43 -0500 Subject: Fixes for non-interactive (client/server) mode on Java 9 (#221) * Fixes for client/server mode on Java 9. * Upgraded ammonite to 1.0.5-4-c0cdbaf. --- build.sc | 3 ++- clientserver/src/mill/clientserver/Client.java | 19 ++++++++++++++----- core/src/mill/util/ClassLoader.scala | 11 +++++++++-- scalalib/src/mill/scalalib/ScalaModule.scala | 2 +- scalalib/src/mill/scalalib/ScalaWorkerApi.scala | 4 ++-- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/build.sc b/build.sc index 83dc5922..847296cb 100755 --- a/build.sc +++ b/build.sc @@ -69,6 +69,7 @@ trait MillModule extends MillPublishModule{ outer => object clientserver extends MillModule{ def ivyDeps = Agg( + ivy"com.lihaoyi:::ammonite:1.0.5-4-c0cdbaf", ivy"org.scala-sbt.ipcsocket:ipcsocket:1.0.0" ) val test = new Tests(implicitly) @@ -83,7 +84,7 @@ object core extends MillModule { def ivyDeps = Agg( ivy"com.lihaoyi::sourcecode:0.1.4", - ivy"com.lihaoyi:::ammonite:1.0.5-1-819bc80", + ivy"com.lihaoyi:::ammonite:1.0.5-4-c0cdbaf", ivy"jline:jline:2.14.5" ) diff --git a/clientserver/src/mill/clientserver/Client.java b/clientserver/src/mill/clientserver/Client.java index 1870c8a4..ed2fe6ad 100644 --- a/clientserver/src/mill/clientserver/Client.java +++ b/clientserver/src/mill/clientserver/Client.java @@ -1,29 +1,38 @@ package mill.clientserver; +import io.github.retronym.java9rtexport.Export; import org.scalasbt.ipcsocket.UnixDomainSocket; import java.io.*; import java.net.URL; import java.nio.channels.FileChannel; +import java.nio.file.Files; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.Properties; public class Client { static void initServer(String lockBase) throws IOException{ - StringBuilder selfJars = new java.lang.StringBuilder(); + ArrayList selfJars = new ArrayList(); ClassLoader current = Client.class.getClassLoader(); while(current != null){ if (current instanceof java.net.URLClassLoader) { URL[] urls = ((java.net.URLClassLoader) current).getURLs(); for (URL url: urls) { - if (selfJars.length() != 0) selfJars.append(':'); - selfJars.append(url); + selfJars.add(url.toString()); } } current = current.getParent(); } - + if (!System.getProperty("java.specification.version").startsWith("1.")) { + selfJars.addAll(Arrays.asList(System.getProperty("java.class.path").split(File.pathSeparator))); + File rtFile = new File(lockBase + "/rt-" + System.getProperty("java.version") + ".jar"); + if (!rtFile.exists()) { + Files.copy(Export.export().toPath(), rtFile.toPath()); + } + selfJars.add(rtFile.getCanonicalPath()); + } ArrayList l = new java.util.ArrayList(); l.add("java"); Properties props = System.getProperties(); @@ -33,7 +42,7 @@ public class Client { if (k.startsWith("MILL_")) l.add("-D" + k + "=" + props.getProperty(k)); } l.add("-cp"); - l.add(selfJars.toString()); + l.add(String.join(File.pathSeparator, selfJars)); l.add("mill.ServerMain"); l.add(lockBase); new java.lang.ProcessBuilder() diff --git a/core/src/mill/util/ClassLoader.scala b/core/src/mill/util/ClassLoader.scala index 7f4a9836..a1b42158 100644 --- a/core/src/mill/util/ClassLoader.scala +++ b/core/src/mill/util/ClassLoader.scala @@ -6,7 +6,14 @@ import io.github.retronym.java9rtexport.Export object ClassLoader { def create(urls: Seq[URL], parent: java.lang.ClassLoader): URLClassLoader = { - val rtOpt = if (ammonite.util.Util.java9OrAbove) Some(Export.export().toURI.toURL) else None - new URLClassLoader((urls ++ rtOpt).toArray, parent) + val cl = new URLClassLoader(urls.toArray, parent) + if (!ammonite.util.Util.java9OrAbove) return cl + try { + cl.loadClass("javax.script.ScriptEngineManager") + cl + } catch { + case _: ClassNotFoundException => + new URLClassLoader((urls ++ Some(Export.export().toURI.toURL)).toArray, parent) + } } } diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index 119d4d47..c06fb8f3 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -316,7 +316,7 @@ trait ScalaModule extends mill.Module with TaskModule { outer => } def ammoniteReplClasspath = T{ - resolveDeps(T.task{Agg(ivy"com.lihaoyi:::ammonite:1.0.3")})() + resolveDeps(T.task{Agg(ivy"com.lihaoyi:::ammonite:1.0.5-4-c0cdbaf")})() } def repl() = T.command{ if (T.ctx().log.inStream == DummyInputStream){ diff --git a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala index 2d04ac4e..91222524 100644 --- a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala +++ b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala @@ -31,8 +31,8 @@ trait ScalaWorkerModule extends mill.Module{ } } def worker: Worker[ScalaWorkerApi] = T.worker{ - val cl = new java.net.URLClassLoader( - classpath().map(_.toNIO.toUri.toURL).toArray, + val cl = mill.util.ClassLoader.create( + classpath().map(_.toNIO.toUri.toURL).toVector, getClass.getClassLoader ) val cls = cl.loadClass("mill.scalaworker.ScalaWorker") -- cgit v1.2.3 From 96f39c862ffdee6e8d6acd0f5341be6fa06b94d4 Mon Sep 17 00:00:00 2001 From: Robby Date: Tue, 13 Mar 2018 13:11:12 -0500 Subject: Changed some tests use non-interactive mode on travis Java 9. --- .travis.yml | 2 +- ci/test-mill-0.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 17487997..973f3a54 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,7 +36,7 @@ matrix: jdk: oraclejdk8 script: - - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5 && chmod +x ~/bin/mill + - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5-3-a9d4ee && chmod +x ~/bin/mill - export PATH=~/bin/mill:$PATH - "$CI_SCRIPT" diff --git a/ci/test-mill-0.sh b/ci/test-mill-0.sh index ee5b7213..3d1470f1 100755 --- a/ci/test-mill-0.sh +++ b/ci/test-mill-0.sh @@ -6,4 +6,4 @@ set -eux git clean -xdf # Run tests using Mill built using SBT -mill -i all {clientserver,main,scalalib,scalajslib}.test +mill all {clientserver,main,scalalib,scalajslib}.test -- cgit v1.2.3 From 4cfc9d2e71ae9651cbc921b061a2cf02ac08d132 Mon Sep 17 00:00:00 2001 From: rockjam <5min4eq.unity@gmail.com> Date: Tue, 13 Mar 2018 22:44:45 +0300 Subject: 0.1.6 --- readme.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/readme.md b/readme.md index 9c124fbd..a1dacc2c 100644 --- a/readme.md +++ b/readme.md @@ -328,6 +328,10 @@ rm -rf out/ ## Changelog +### 0.1.6 + +- Fixes for non-interactive (client/server) mode on Java 9 + ### 0.1.5 - Introduced the `mill plan foo.bar` command, which shows you what the execution -- cgit v1.2.3 From 6c0276eb0846158c3a08ba3d05419f690c28376d Mon Sep 17 00:00:00 2001 From: rockjam <5min4eq.unity@gmail.com> Date: Wed, 14 Mar 2018 00:03:23 +0300 Subject: update readme and CI to 0.1.6 --- .appveyor.yml | 2 +- .travis.yml | 2 +- docs/pages/1 - Intro to Mill.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 09b2d7da..73ca0542 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -30,7 +30,7 @@ cache: install: - cmd: SET PATH=%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH% - cmd: java -version - - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5" + - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6" build_script: - bash -lc "cd /c/mill && mill -i all main.test scalajslib.test" diff --git a/.travis.yml b/.travis.yml index 973f3a54..3898dbfa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -36,7 +36,7 @@ matrix: jdk: oraclejdk8 script: - - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5-3-a9d4ee && chmod +x ~/bin/mill + - curl -L -o ~/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6 && chmod +x ~/bin/mill - export PATH=~/bin/mill:$PATH - "$CI_SCRIPT" diff --git a/docs/pages/1 - Intro to Mill.md b/docs/pages/1 - Intro to Mill.md index 83de1eab..94ee4a4d 100644 --- a/docs/pages/1 - Intro to Mill.md +++ b/docs/pages/1 - Intro to Mill.md @@ -39,7 +39,7 @@ To get started, download Mill and install it into your system via the following `curl`/`chmod` command: ```bash -sudo curl -L -o /usr/local/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.5/0.1.5 && sudo chmod +x /usr/local/bin/mill +sudo curl -L -o /usr/local/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6 && sudo chmod +x /usr/local/bin/mill ``` ### Development Releases -- cgit v1.2.3 From 712f331d24d0934cd9c653a12be7e47e1fff1f5d Mon Sep 17 00:00:00 2001 From: Robby Date: Fri, 16 Mar 2018 05:09:36 -0500 Subject: Windows non-interactive (client/server) support, and fix assembly and posix file permission (#228) * Added support for non-interactive (client/server) mode on Windows * Fixed assembly URI path * Skip setting posix file permission on Windows --- build.sc | 12 ++++---- clientserver/src/mill/clientserver/Client.java | 32 +++++++++++++++------ .../src/mill/clientserver/ClientServer.java | 8 ++++++ clientserver/src/mill/clientserver/Server.scala | 33 +++++++++++++++++----- main/src/mill/modules/Jvm.scala | 26 +++++++++-------- main/test/src/mill/eval/JavaCompileJarTests.scala | 2 +- 6 files changed, 81 insertions(+), 32 deletions(-) diff --git a/build.sc b/build.sc index 847296cb..c012c77b 100755 --- a/build.sc +++ b/build.sc @@ -236,11 +236,13 @@ object dev extends MillModule{ write(outputPath, prependShellScript()) - val perms = java.nio.file.Files.getPosixFilePermissions(outputPath.toNIO) - perms.add(PosixFilePermission.GROUP_EXECUTE) - perms.add(PosixFilePermission.OWNER_EXECUTE) - perms.add(PosixFilePermission.OTHERS_EXECUTE) - java.nio.file.Files.setPosixFilePermissions(outputPath.toNIO, perms) + if (!scala.util.Properties.isWin) { + val perms = java.nio.file.Files.getPosixFilePermissions(outputPath.toNIO) + perms.add(PosixFilePermission.GROUP_EXECUTE) + perms.add(PosixFilePermission.OWNER_EXECUTE) + perms.add(PosixFilePermission.OTHERS_EXECUTE) + java.nio.file.Files.setPosixFilePermissions(outputPath.toNIO, perms) + } PathRef(outputPath) } diff --git a/clientserver/src/mill/clientserver/Client.java b/clientserver/src/mill/clientserver/Client.java index ed2fe6ad..248d3de1 100644 --- a/clientserver/src/mill/clientserver/Client.java +++ b/clientserver/src/mill/clientserver/Client.java @@ -1,9 +1,11 @@ package mill.clientserver; import io.github.retronym.java9rtexport.Export; -import org.scalasbt.ipcsocket.UnixDomainSocket; +import org.scalasbt.ipcsocket.*; import java.io.*; +import java.net.Socket; +import java.net.URISyntaxException; import java.net.URL; import java.nio.channels.FileChannel; import java.nio.file.Files; @@ -13,14 +15,15 @@ import java.util.Iterator; import java.util.Properties; public class Client { - static void initServer(String lockBase) throws IOException{ + + static void initServer(String lockBase) throws IOException,URISyntaxException{ ArrayList selfJars = new ArrayList(); ClassLoader current = Client.class.getClassLoader(); while(current != null){ if (current instanceof java.net.URLClassLoader) { URL[] urls = ((java.net.URLClassLoader) current).getURLs(); for (URL url: urls) { - selfJars.add(url.toString()); + selfJars.add(new File(url.toURI()).getCanonicalPath()); } } current = current.getParent(); @@ -71,7 +74,7 @@ public class Client { public void run() { try{ initServer(lockBase); - }catch(IOException e){ + }catch(Exception e){ throw new RuntimeException(e); } } @@ -100,16 +103,26 @@ public class Client { FileOutputStream f = new FileOutputStream(lockBase + "/run"); ClientServer.writeArgs(System.console() != null, args, f); f.close(); - if (locks.processLock.probe()) initServer.run(); + + boolean serverInit = false; + if (locks.processLock.probe()) { + serverInit = true; + initServer.run(); + } while(locks.processLock.probe()) Thread.sleep(3); + // Need to give sometime for Win32NamedPipeSocket to work + // if the server is just initialized + if (serverInit && ClientServer.isWindows) Thread.sleep(250); - UnixDomainSocket ioSocket = null; + Socket ioSocket = null; long retryStart = System.currentTimeMillis(); while(ioSocket == null && System.currentTimeMillis() - retryStart < 1000){ try{ - ioSocket = new UnixDomainSocket(lockBase + "/io"); + ioSocket = ClientServer.isWindows? + new Win32NamedPipeSocket(ClientServer.WIN32_PIPE_PREFIX + new File(lockBase).getName()) + : new UnixDomainSocket(lockBase + "/io"); }catch(Throwable e){ Thread.sleep(1); } @@ -187,7 +200,10 @@ class ClientOutputPumper implements Runnable{ } } }catch(IOException e){ - throw new RuntimeException(e); + // Win32NamedPipeSocket input stream somehow doesn't return -1, + // but throw IOException whose message contains "ReadFile()" with a ccode + if (ClientServer.isWindows && e.getMessage().contains("ReadFile()")) running = false; + else throw new RuntimeException(e); } } diff --git a/clientserver/src/mill/clientserver/ClientServer.java b/clientserver/src/mill/clientserver/ClientServer.java index a8692c61..7af5845b 100644 --- a/clientserver/src/mill/clientserver/ClientServer.java +++ b/clientserver/src/mill/clientserver/ClientServer.java @@ -6,6 +6,14 @@ import java.io.InputStream; import java.io.OutputStream; class ClientServer { + public static boolean isWindows = System.getProperty("os.name").toLowerCase().startsWith("windows"); + + // Windows named pipe prefix (see https://github.com/sbt/ipcsocket/blob/v1.0.0/README.md) + // Win32NamedPipeServerSocket automatically adds this as a prefix (if it is not already is prefixed), + // but Win32NamedPipeSocket does not + // https://github.com/sbt/ipcsocket/blob/v1.0.0/src/main/java/org/scalasbt/ipcsocket/Win32NamedPipeServerSocket.java#L36 + public static String WIN32_PIPE_PREFIX = "\\\\.\\pipe\\"; + public static String[] parseArgs(InputStream argStream) throws IOException { int argsLength = argStream.read(); diff --git a/clientserver/src/mill/clientserver/Server.scala b/clientserver/src/mill/clientserver/Server.scala index 27c43302..dde727df 100644 --- a/clientserver/src/mill/clientserver/Server.scala +++ b/clientserver/src/mill/clientserver/Server.scala @@ -3,7 +3,7 @@ package mill.clientserver import java.io._ import java.net.Socket -import org.scalasbt.ipcsocket.{UnixDomainServerSocket, UnixDomainSocket} +import org.scalasbt.ipcsocket._ trait ServerMain[T]{ def main(args0: Array[String]): Unit = { @@ -37,18 +37,28 @@ class Server[T](lockBase: String, var running = true while (running) { Server.lockBlock(locks.serverLock){ - new File(lockBase + "/io").delete() - val ioSocket = new UnixDomainServerSocket(lockBase + "/io") + val (serverSocket, socketClose) = if (ClientServer.isWindows) { + val socketName = ClientServer.WIN32_PIPE_PREFIX + new File(lockBase).getName + (new Win32NamedPipeServerSocket(socketName), () => new Win32NamedPipeSocket(socketName).close()) + } else { + val socketName = lockBase + "/io" + new File(socketName).delete() + (new UnixDomainServerSocket(socketName), () => new UnixDomainSocket(socketName).close()) + } + val sockOpt = Server.interruptWith( acceptTimeout, - new UnixDomainSocket(lockBase + "/io").close(), - ioSocket.accept() + socketClose(), + serverSocket.accept() ) sockOpt match{ case None => running = false case Some(sock) => - try handleRun(sock) + try { + handleRun(sock) + serverSocket.close() + } catch{case e: Throwable => e.printStackTrace(originalStdout) } } } @@ -106,7 +116,16 @@ class Server[T](lockBase: String, t.interrupt() t.stop() - clientSocket.close() + + if (ClientServer.isWindows) { + // Closing Win32NamedPipeSocket can often take ~5s + // It seems OK to exit the client early and subsequently + // start up mill client again (perhaps closing the server + // socket helps speed up the process). + val t = new Thread(() => clientSocket.close()) + t.setDaemon(true) + t.start() + } else clientSocket.close() } } object Server{ diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index dba3552d..291d4151 100644 --- a/main/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala @@ -241,7 +241,7 @@ object Jvm { (implicit ctx: Ctx.Dest) = { val tmp = ctx.dest / "out-tmp.jar" - val baseUri = "jar:file:" + tmp + val baseUri = "jar:" + tmp.toIO.getCanonicalFile.toURI.toASCIIString val hm = new java.util.HashMap[String, String]() base match{ @@ -278,11 +278,13 @@ object Jvm { IO.stream(read.getInputStream(tmp), outputStream) outputStream.close() - val perms = Files.getPosixFilePermissions(output.toNIO) - perms.add(PosixFilePermission.GROUP_EXECUTE) - perms.add(PosixFilePermission.OWNER_EXECUTE) - perms.add(PosixFilePermission.OTHERS_EXECUTE) - Files.setPosixFilePermissions(output.toNIO, perms) + if (!scala.util.Properties.isWin) { + val perms = Files.getPosixFilePermissions(output.toNIO) + perms.add(PosixFilePermission.GROUP_EXECUTE) + perms.add(PosixFilePermission.OWNER_EXECUTE) + perms.add(PosixFilePermission.OTHERS_EXECUTE) + Files.setPosixFilePermissions(output.toNIO, perms) + } } PathRef(output) @@ -328,11 +330,13 @@ object Jvm { write(outputPath, launcherShellScript(mainClass, classPath.map(_.toString), jvmArgs)) - val perms = Files.getPosixFilePermissions(outputPath.toNIO) - perms.add(PosixFilePermission.GROUP_EXECUTE) - perms.add(PosixFilePermission.OWNER_EXECUTE) - perms.add(PosixFilePermission.OTHERS_EXECUTE) - Files.setPosixFilePermissions(outputPath.toNIO, perms) + if (!scala.util.Properties.isWin) { + val perms = Files.getPosixFilePermissions(outputPath.toNIO) + perms.add(PosixFilePermission.GROUP_EXECUTE) + perms.add(PosixFilePermission.OWNER_EXECUTE) + perms.add(PosixFilePermission.OTHERS_EXECUTE) + Files.setPosixFilePermissions(outputPath.toNIO, perms) + } PathRef(outputPath) } diff --git a/main/test/src/mill/eval/JavaCompileJarTests.scala b/main/test/src/mill/eval/JavaCompileJarTests.scala index 78cf09a5..1ac00c79 100644 --- a/main/test/src/mill/eval/JavaCompileJarTests.scala +++ b/main/test/src/mill/eval/JavaCompileJarTests.scala @@ -114,7 +114,7 @@ object JavaCompileJarTests extends TestSuite{ |test/FooTwo.class |hello.txt |""".stripMargin - assert(jarContents == expectedJarContents) + assert(jarContents.lines.toSeq == expectedJarContents.lines.toSeq) val executed = %%('java, "-cp", evaluator.outPath/'jar/'dest/"out.jar", "test.Foo")(evaluator.outPath).out.string assert(executed == (31337 + 271828) + System.lineSeparator) -- cgit v1.2.3 From 43d23037c7f0d659ff6ad5e78dc71cfd3ed083ec Mon Sep 17 00:00:00 2001 From: Robby Date: Fri, 16 Mar 2018 11:04:33 -0500 Subject: Test mill (client/server) non-interactive on Windows and set jna.nosys=true as default (#229) * If unspecified, set the jna.nosys property to true on non-interactive (client/server) mode. * Run publishLocal and release (interactive) on AppVeyor and use the resulting mill to test mill (non-interactive). --- .appveyor.yml | 5 +++-- clientserver/src/mill/clientserver/Client.java | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 73ca0542..4af291c0 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -30,7 +30,8 @@ cache: install: - cmd: SET PATH=%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH% - cmd: java -version - - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6" + - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6-2-712f33" build_script: - - bash -lc "cd /c/mill && mill -i all main.test scalajslib.test" + - bash -lc "cd /c/mill && mill -i all __.publishLocal release" + - bash -lc "cd /c/mill && out/release/dest/mill all main.test scalajslib.test" \ No newline at end of file diff --git a/clientserver/src/mill/clientserver/Client.java b/clientserver/src/mill/clientserver/Client.java index 248d3de1..eab8c5b5 100644 --- a/clientserver/src/mill/clientserver/Client.java +++ b/clientserver/src/mill/clientserver/Client.java @@ -15,8 +15,7 @@ import java.util.Iterator; import java.util.Properties; public class Client { - - static void initServer(String lockBase) throws IOException,URISyntaxException{ + static void initServer(String lockBase, boolean setJnaNoSys) throws IOException,URISyntaxException{ ArrayList selfJars = new ArrayList(); ClassLoader current = Client.class.getClassLoader(); while(current != null){ @@ -44,6 +43,9 @@ public class Client { String k = keys.next(); if (k.startsWith("MILL_")) l.add("-D" + k + "=" + props.getProperty(k)); } + if (setJnaNoSys) { + l.add("-Djna.nosys=true"); + } l.add("-cp"); l.add(String.join(File.pathSeparator, selfJars)); l.add("mill.ServerMain"); @@ -55,6 +57,10 @@ public class Client { .start(); } public static void main(String[] args) throws Exception{ + boolean setJnaNoSys = System.getProperty("jna.nosys") == null; + if (setJnaNoSys) { + System.setProperty("jna.nosys", "true"); + } int index = 0; while (index < 5) { index += 1; @@ -73,7 +79,7 @@ public class Client { @Override public void run() { try{ - initServer(lockBase); + initServer(lockBase, setJnaNoSys); }catch(Exception e){ throw new RuntimeException(e); } -- cgit v1.2.3 From 7c2686513df15d4234aa325dbef8b94ee9c8ed89 Mon Sep 17 00:00:00 2001 From: Robby Date: Sat, 17 Mar 2018 06:35:29 -0500 Subject: Test mill on cygwin. --- .appveyor.yml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 4af291c0..9c55581b 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -10,28 +10,34 @@ clone_folder: c:\mill environment: matrix: - COMPILER: msys2 - PLATFORM: x64 MSYS2_ARCH: x86_64 MSYS2_DIR: msys64 MSYSTEM: MINGW64 - BIT: 64 JAVA_HOME: C:\Program Files\Java\jdk1.8.0 - COMPILER: msys2 - PLATFORM: x64 MSYS2_ARCH: x86_64 MSYS2_DIR: msys64 MSYSTEM: MINGW64 - BIT: 64 + JAVA_HOME: C:\Program Files\Java\jdk9 + - COMPILER: cygwin + CYGWIN_DIR: cygwin64 JAVA_HOME: C:\Program Files\Java\jdk9 cache: - '%LOCALAPPDATA%\Coursier\cache' + - '%USERPROFILE%\.coursier' install: - - cmd: SET PATH=%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH% - - cmd: java -version - - bash -lc "mkdir /c/bin && curl -Lo /c/bin/mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6-2-712f33" + - if [%COMPILER%]==[cygwin] SET "PATH=%JAVA_HOME%\bin;C:\bin;C:\%CYGWIN_DIR%\bin;C:\%CYGWIN_DIR%\usr\bin;%PATH%" + - if [%COMPILER%]==[msys2] SET "PATH=%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH%" + - java -version + - md C:\bin + - curl -Lo C:\bin\mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6-3-43d230 build_script: - - bash -lc "cd /c/mill && mill -i all __.publishLocal release" - - bash -lc "cd /c/mill && out/release/dest/mill all main.test scalajslib.test" \ No newline at end of file + - if [%COMPILER%]==[cygwin] ( + C:\%CYGWIN_DIR%\bin\bash -lc 'sed -i '"'"'0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}; 0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}'"'"' /cygdrive/c/bin/mill' && + C:\%CYGWIN_DIR%\bin\bash -lc "cd /cygdrive/c/mill && mill all main.test scalajslib.test") + - if [%COMPILER%]==[msys2] ( + C:\%MSYS2_DIR%\usr\bin\bash -lc "cd /c/mill && mill -i all __.publishLocal release" + C:\%MSYS2_DIR%\usr\bin\bash -lc "cd /c/mill && out/release/dest/mill all main.test scalajslib.test") -- cgit v1.2.3 From 2ac2203042e31e3695414737e0d52ef70cd11bd6 Mon Sep 17 00:00:00 2001 From: Robby Date: Sat, 17 Mar 2018 07:18:01 -0500 Subject: Updated changelog in readme.md. --- readme.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/readme.md b/readme.md index a1dacc2c..06e31e80 100644 --- a/readme.md +++ b/readme.md @@ -328,6 +328,18 @@ rm -rf out/ ## Changelog +### master + +- Support for non-interactive (client/server) mode on Windows. + + Running on Windows requires either [MSYS2](https://www.msys2.org) or [Cygwin](https://www.cygwin.com). + + On Cygwin, run the following after downloading mill: + + ```bash + sed -i '0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}; 0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}' + ``` + ### 0.1.6 - Fixes for non-interactive (client/server) mode on Java 9 -- cgit v1.2.3 From bc608cdf19720fe2111bb055bd57eedba24dc7ae Mon Sep 17 00:00:00 2001 From: Gabriele Petronella Date: Sun, 18 Mar 2018 01:35:57 +0900 Subject: Skip signature files in assembly (#232) --- main/src/mill/modules/Jvm.scala | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/main/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index 291d4151..d71cf75c 100644 --- a/main/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala @@ -258,13 +258,18 @@ object Jvm { manifest.write(manifestOut) manifestOut.close() + def isSignatureFile(mapping: String): Boolean = + Set("sf", "rsa", "dsa").exists(ext => mapping.toLowerCase.endsWith(s".$ext")) + for(v <- classpathIterator(inputPaths)){ val (file, mapping) = v val p = zipFs.getPath(mapping) if (p.getParent != null) Files.createDirectories(p.getParent) - val outputStream = newOutputStream(p) - IO.stream(file, outputStream) - outputStream.close() + if (!isSignatureFile(mapping)) { + val outputStream = newOutputStream(p) + IO.stream(file, outputStream) + outputStream.close() + } file.close() } zipFs.close() -- cgit v1.2.3 From 6aba4d619d11e3f7f2c5128aa34162df655af37b Mon Sep 17 00:00:00 2001 From: Gabriele Petronella Date: Sun, 18 Mar 2018 01:36:28 +0900 Subject: Rename 'describe' to 'inspect' in the docs, following 6336860 (#235) --- docs/pages/1 - Intro to Mill.md | 32 ++++++++++++++++---------------- docs/pages/6 - Extending Mill.md | 2 +- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/docs/pages/1 - Intro to Mill.md b/docs/pages/1 - Intro to Mill.md index 94ee4a4d..63b69601 100644 --- a/docs/pages/1 - Intro to Mill.md +++ b/docs/pages/1 - Intro to Mill.md @@ -46,7 +46,7 @@ sudo curl -L -o /usr/local/bin/mill https://github.com/lihaoyi/mill/releases/dow More recent, unstable versions of Mill are also [available](https://github.com/lihaoyi/mill/releases/tag/unstable), if you want -to try out the latest features and improvements that are currently in master. +to try out the latest features and improvements that are currently in master. Come by our [Gitter Channel](https://gitter.im/lihaoyi/mill) if you want to ask questions or say hi! @@ -105,7 +105,7 @@ $ mill foo.repl # start an Ammonite REPL within your project ``` You can run `mill resolve __` to see a full list of the different tasks that are -available, `mill resolve foo._` to see the tasks within `foo`, `mill describe +available, `mill resolve foo._` to see the tasks within `foo`, `mill inspect foo.compile` to see what an individual task depends on, or `mill show foo.scalaVersion` to inspect the output of any task. @@ -328,10 +328,10 @@ mill resolve __ # list every module or task recursively mill resolve foo.__ # list every task recursively within the foo module ``` -### describe +### inspect ```bash -$ mill describe core.run +$ mill inspect core.run core.run(ScalaModule.scala:211) Inputs: @@ -341,26 +341,26 @@ Inputs: core.forkEnv ``` -`describe` is a more verbose version of [resolve](#resolve). In addition to +`inspect` is a more verbose version of [resolve](#resolve). In addition to printing out the name of one-or-more tasks, it also display's it's source location and a list of input tasks. This is very useful for debugging and interactively exploring the structure of your build from the command line. -`describe` also works with the same `_`/`__` wildcard/query syntaxes that +`inspect` also works with the same `_`/`__` wildcard/query syntaxes that [all](#all)/[resolve](#resolve) do: ```bash -mill describe foo.compile -mill describe foo.{compile,run} -mill describe "foo.{compile,run}" -mill describe foo.compile foo.run -mill describe _.compile -mill describe __.compile -mill describe _ -mill describe foo._ -mill describe __ -mill describe foo._ +mill inspect foo.compile +mill inspect foo.{compile,run} +mill inspect "foo.{compile,run}" +mill inspect foo.compile foo.run +mill inspect _.compile +mill inspect __.compile +mill inspect _ +mill inspect foo._ +mill inspect __ +mill inspect foo._ ``` ### show diff --git a/docs/pages/6 - Extending Mill.md b/docs/pages/6 - Extending Mill.md index a6c096a6..135a63ed 100644 --- a/docs/pages/6 - Extending Mill.md +++ b/docs/pages/6 - Extending Mill.md @@ -177,7 +177,7 @@ def idea(ev: Evaluator[Any]) = T.command{ ``` Many built-in tools are implemented as custom evaluator commands: -[all](intro.html#all), [describe](intro.html#describe), +[all](intro.html#all), [inspect](intro.html#inspect), [resolve](intro.html#resolve), [show](intro.html#show). If you want a way to run Mill commands and programmatically manipulate the tasks and outputs, you do so with your own evaluator command. -- cgit v1.2.3 From fa14cde481561608476aadc62adc756961ab09bd Mon Sep 17 00:00:00 2001 From: Robby Date: Sat, 17 Mar 2018 16:25:55 -0500 Subject: Use mill interactive mode to test on cygwin and updated changelog in readme.md. --- .appveyor.yml | 33 +++++++++++++++++++-------------- readme.md | 11 +++++++++-- 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 9c55581b..a8c4da3a 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -9,6 +9,9 @@ clone_folder: c:\mill environment: matrix: + - COMPILER: cygwin + CYGWIN_DIR: cygwin64 + JAVA_HOME: C:\Program Files\Java\jdk9 - COMPILER: msys2 MSYS2_ARCH: x86_64 MSYS2_DIR: msys64 @@ -19,25 +22,27 @@ environment: MSYS2_DIR: msys64 MSYSTEM: MINGW64 JAVA_HOME: C:\Program Files\Java\jdk9 - - COMPILER: cygwin - CYGWIN_DIR: cygwin64 - JAVA_HOME: C:\Program Files\Java\jdk9 cache: - - '%LOCALAPPDATA%\Coursier\cache' - - '%USERPROFILE%\.coursier' + - build.sc -> '%LOCALAPPDATA%\Coursier\cache' install: - - if [%COMPILER%]==[cygwin] SET "PATH=%JAVA_HOME%\bin;C:\bin;C:\%CYGWIN_DIR%\bin;C:\%CYGWIN_DIR%\usr\bin;%PATH%" - - if [%COMPILER%]==[msys2] SET "PATH=%JAVA_HOME%\bin;C:\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH%" - - java -version - - md C:\bin - - curl -Lo C:\bin\mill https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6-3-43d230 + - SET MILL_URL=https://github.com/lihaoyi/mill/releases/download/0.1.6/0.1.6-3-43d230 build_script: - - if [%COMPILER%]==[cygwin] ( - C:\%CYGWIN_DIR%\bin\bash -lc 'sed -i '"'"'0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}; 0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}'"'"' /cygdrive/c/bin/mill' && - C:\%CYGWIN_DIR%\bin\bash -lc "cd /cygdrive/c/mill && mill all main.test scalajslib.test") - if [%COMPILER%]==[msys2] ( - C:\%MSYS2_DIR%\usr\bin\bash -lc "cd /c/mill && mill -i all __.publishLocal release" + SET "PATH=%JAVA_HOME%\bin;C:\%MSYS2_DIR%\%MSYSTEM%\bin;C:\%MSYS2_DIR%\usr\bin;%PATH%" && + C:\%MSYS2_DIR%\usr\bin\bash -lc 'mkdir -p /usr/local/bin' && + C:\%MSYS2_DIR%\usr\bin\bash -lc "curl -Lo /usr/local/bin/mill %MILL_URL%" && + C:\%MSYS2_DIR%\usr\bin\bash -lc 'chmod +x /usr/local/bin/mill' && + C:\%MSYS2_DIR%\usr\bin\bash -lc "cd /c/mill && mill -i all __.publishLocal release" && C:\%MSYS2_DIR%\usr\bin\bash -lc "cd /c/mill && out/release/dest/mill all main.test scalajslib.test") + - if [%COMPILER%]==[cygwin] ( + SET "PATH=%JAVA_HOME%\bin;C:\%CYGWIN_DIR%\bin;C:\%CYGWIN_DIR%\usr\bin;%PATH%" && + C:\%CYGWIN_DIR%\bin\bash -lc 'mkdir -p /usr/local/bin' && + C:\%CYGWIN_DIR%\bin\bash -lc "curl -Lo /usr/local/bin/mill %MILL_URL%" && + C:\%CYGWIN_DIR%\bin\bash -lc 'sed -i '"'"'0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}; 0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}'"'"' /usr/local/bin/mill' && + C:\%CYGWIN_DIR%\bin\bash -lc 'chmod +x /usr/local/bin/mill' && + C:\%CYGWIN_DIR%\bin\bash -lc "cd /cygdrive/c/mill && mill -i all main.test scalajslib.test") + +skip_branch_with_pr: true \ No newline at end of file diff --git a/readme.md b/readme.md index 06e31e80..2443eebf 100644 --- a/readme.md +++ b/readme.md @@ -332,14 +332,21 @@ rm -rf out/ - Support for non-interactive (client/server) mode on Windows. - Running on Windows requires either [MSYS2](https://www.msys2.org) or [Cygwin](https://www.cygwin.com). - + Mill requires an `sh` environment to run on Windows; + it is recommended to use [MSYS2](https://www.msys2.org) on Windows. + + [Cygwin](https://www.cygwin.com) can also be used, + but your mileage may vary when running mill on non-interactive (client/server) mode + (it failed intermittently in mill's AppVeyor tests). On Cygwin, run the following after downloading mill: ```bash sed -i '0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}; 0,/-cp "\$0"/{s/-cp "\$0"/-cp `cygpath -w "\$0"`/}' ``` + Mill also runs on [Git-Bash](https://gitforwindows.org) and [WSL](https://docs.microsoft.com/windows/wsl) + but only on interactive mode. + ### 0.1.6 - Fixes for non-interactive (client/server) mode on Java 9 -- cgit v1.2.3 From bd9f25de7273ee0bf3d3563802672af1779e96be Mon Sep 17 00:00:00 2001 From: Jisoo Park Date: Mon, 19 Mar 2018 00:00:05 +0900 Subject: Add closing backtick to `java.lang.Process` (#240) It deserves it. --- docs/pages/6 - Extending Mill.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/6 - Extending Mill.md b/docs/pages/6 - Extending Mill.md index 135a63ed..75b7643a 100644 --- a/docs/pages/6 - Extending Mill.md +++ b/docs/pages/6 - Extending Mill.md @@ -20,7 +20,7 @@ you're done. For subprocess/filesystem operations, you can use the [Ammonite-Ops](http://ammonite.io/#Ammonite-Ops) library that comes bundled with -Mill, or even plain `java.nio`/`java.lang.Process. Each target gets it's own +Mill, or even plain `java.nio`/`java.lang.Process`. Each target gets it's own [T.ctx().dest](http://www.lihaoyi.com/mill/page/tasks#millutilctxdestctx) folder that you can use to place files without worrying about colliding with other targets. -- cgit v1.2.3 From 0063444b422e317b9ee68c789f9b3224dcf28825 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 18 Mar 2018 08:13:41 -0700 Subject: Bump the server timeout to 5 minutes We can probably afford to keep it around a bit longer to avoid having to cold-start it so often... --- clientserver/src/mill/clientserver/Server.scala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/clientserver/src/mill/clientserver/Server.scala b/clientserver/src/mill/clientserver/Server.scala index dde727df..24827ac2 100644 --- a/clientserver/src/mill/clientserver/Server.scala +++ b/clientserver/src/mill/clientserver/Server.scala @@ -11,7 +11,7 @@ trait ServerMain[T]{ args0(0), this, () => System.exit(0), - 60000, + 300000, Locks.files(args0(0)) ).run() } @@ -180,4 +180,4 @@ class ProxyInputStream(x: => java.io.InputStream) extends java.io.InputStream{ override def read(b: Array[Byte], off: Int, len: Int) = x.read(b, off, len) override def read(b: Array[Byte]) = x.read(b) } -case class WatchInterrupted[T](stateCache: Option[T]) extends Exception \ No newline at end of file +case class WatchInterrupted[T](stateCache: Option[T]) extends Exception -- cgit v1.2.3