diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-09 00:14:47 -0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-02-09 08:17:47 -0800 |
commit | 8ddd2fa054bc8639c28db2e95b7903e2954fdb7d (patch) | |
tree | aa985f1e715f07eb279e6facad61de8a187e316c | |
parent | 90d0a3388d280554eaa51371f666d2f7a965a8af (diff) | |
download | mill-8ddd2fa054bc8639c28db2e95b7903e2954fdb7d.tar.gz mill-8ddd2fa054bc8639c28db2e95b7903e2954fdb7d.tar.bz2 mill-8ddd2fa054bc8639c28db2e95b7903e2954fdb7d.zip |
.
-rw-r--r-- | build.sbt | 21 | ||||
-rwxr-xr-x | build.sc | 22 | ||||
-rwxr-xr-x | ci/test-mill-built.sh | 2 | ||||
-rwxr-xr-x | ci/test-mill-release.sh | 2 | ||||
-rwxr-xr-x | ci/test-sbt-built.sh | 2 | ||||
-rwxr-xr-x | ci/test-sbt.sh | 2 | ||||
-rwxr-xr-x | ci/test_all.sh | 15 | ||||
-rw-r--r-- | core/src/mill/define/BaseModule.scala | 10 | ||||
-rw-r--r-- | core/src/mill/define/Ctx.scala | 13 | ||||
-rw-r--r-- | core/src/mill/define/Discover.scala | 7 | ||||
-rw-r--r-- | core/src/mill/define/Module.scala | 2 | ||||
-rw-r--r-- | core/src/mill/eval/Evaluator.scala | 8 | ||||
-rw-r--r-- | core/src/mill/main/MainModule.scala | 27 | ||||
-rw-r--r-- | core/src/mill/util/ParseArgs.scala (renamed from core/src/mill/main/ParseArgs.scala) | 3 | ||||
-rw-r--r-- | core/src/mill/util/Router.scala (renamed from core/src/mill/main/Router.scala) | 30 | ||||
-rw-r--r-- | core/src/mill/util/Scripts.scala (renamed from core/src/mill/main/Scripts.scala) | 6 | ||||
-rw-r--r-- | core/src/mill/util/Watched.scala | 8 | ||||
-rw-r--r-- | main/src/mill/Main.scala (renamed from core/src/mill/Main.scala) | 0 | ||||
-rw-r--r-- | main/src/mill/main/MagicScopt.scala (renamed from core/src/mill/main/MagicScopt.scala) | 15 | ||||
-rw-r--r-- | main/src/mill/main/MainModule.scala | 56 | ||||
-rw-r--r-- | main/src/mill/main/MainRunner.scala (renamed from core/src/mill/main/MainRunner.scala) | 1 | ||||
-rw-r--r-- | main/src/mill/main/ReplApplyHandler.scala (renamed from core/src/mill/main/ReplApplyHandler.scala) | 102 | ||||
-rw-r--r-- | main/src/mill/main/Resolve.scala (renamed from core/src/mill/main/Resolve.scala) | 9 | ||||
-rw-r--r-- | main/src/mill/main/RunScript.scala (renamed from core/src/mill/main/RunScript.scala) | 23 | ||||
-rw-r--r-- | main/src/mill/modules/Jvm.scala (renamed from core/src/mill/modules/Jvm.scala) | 0 | ||||
-rw-r--r-- | main/src/mill/modules/Util.scala (renamed from core/src/mill/modules/Util.scala) | 0 | ||||
-rw-r--r-- | main/src/mill/package.scala (renamed from core/src/mill/package.scala) | 0 | ||||
-rw-r--r-- | main/test/resources/examples/javac/build.sc (renamed from core/test/resources/examples/javac/build.sc) | 0 | ||||
-rw-r--r-- | main/test/resources/examples/javac/resources/hello.txt (renamed from core/test/resources/examples/javac/resources/hello.txt) | 0 | ||||
-rw-r--r-- | main/test/resources/examples/javac/src/Bar.java (renamed from core/test/resources/examples/javac/src/Bar.java) | 0 | ||||
-rw-r--r-- | main/test/resources/examples/javac/src/Foo.java (renamed from core/test/resources/examples/javac/src/Foo.java) | 0 | ||||
-rw-r--r-- | main/test/src/mill/TestMain.scala (renamed from core/test/src/mill/TestMain.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/UTestFramework.scala (renamed from core/test/src/mill/UTestFramework.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/define/ApplicativeTests.scala (renamed from core/test/src/mill/define/ApplicativeTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/define/BasePathTests.scala (renamed from core/test/src/mill/define/BasePathTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/define/CacherTests.scala (renamed from core/test/src/mill/define/CacherTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/define/DiscoverTests.scala (renamed from core/test/src/mill/define/DiscoverTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/define/GraphTests.scala (renamed from core/test/src/mill/define/GraphTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/define/MacroErrorTests.scala (renamed from core/test/src/mill/define/MacroErrorTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/eval/CrossTests.scala (renamed from core/test/src/mill/eval/CrossTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/eval/EvaluationTests.scala (renamed from core/test/src/mill/eval/EvaluationTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/eval/FailureTests.scala (renamed from core/test/src/mill/eval/FailureTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/eval/JavaCompileJarTests.scala (renamed from core/test/src/mill/eval/JavaCompileJarTests.scala) | 2 | ||||
-rw-r--r-- | main/test/src/mill/eval/ModuleTests.scala (renamed from core/test/src/mill/eval/ModuleTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/eval/TarjanTests.scala (renamed from core/test/src/mill/eval/TarjanTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/eval/TaskTests.scala (renamed from core/test/src/mill/eval/TaskTests.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/main/JavaCompileJarTests.scala (renamed from core/test/src/mill/main/JavaCompileJarTests.scala) | 2 | ||||
-rw-r--r-- | main/test/src/mill/main/MainTests.scala (renamed from core/test/src/mill/main/MainTests.scala) | 2 | ||||
-rw-r--r-- | main/test/src/mill/util/ParseArgsTest.scala (renamed from core/test/src/mill/main/ParseArgsTest.scala) | 2 | ||||
-rw-r--r-- | main/test/src/mill/util/ScriptTestSuite.scala (renamed from core/test/src/mill/util/ScriptTestSuite.scala) | 2 | ||||
-rw-r--r-- | main/test/src/mill/util/TestEvaluator.scala (renamed from core/test/src/mill/util/TestEvaluator.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/util/TestGraphs.scala (renamed from core/test/src/mill/util/TestGraphs.scala) | 0 | ||||
-rw-r--r-- | main/test/src/mill/util/TestUtil.scala (renamed from core/test/src/mill/util/TestUtil.scala) | 2 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/PublishModule.scala | 6 |
54 files changed, 239 insertions, 165 deletions
@@ -73,14 +73,24 @@ lazy val core = project libraryDependencies ++= Seq( "org.scala-lang" % "scala-reflect" % scalaVersion.value % "provided", "com.lihaoyi" %% "sourcecode" % "0.1.4", - "com.lihaoyi" %% "pprint" % "0.5.3", "com.lihaoyi" % "ammonite" % "1.0.3-21-05b5d32" cross CrossVersion.full ), sourceGenerators in Compile += { ammoniteRun(sourceManaged in Compile, List("shared.sc", "generateCoreSources", _)) .taskValue .map(x => (x ** "*.scala").get) - }, + } + ) + +lazy val main = project + .dependsOn(core) + .settings( + sharedSettings, + pluginSettings, + name := "mill-main", + libraryDependencies ++= Seq( + "org.scala-lang" % "scala-reflect" % scalaVersion.value % "provided" + ), sourceGenerators in Test += { ammoniteRun(sourceManaged in Test, List("shared.sc", "generateCoreTestSources", _)) @@ -105,7 +115,7 @@ lazy val scalaWorkerProps = Def.task{ } lazy val scalalib = project - .dependsOn(core % "compile->compile;test->test") + .dependsOn(main % "compile->compile;test->test") .settings( sharedSettings, pluginSettings, @@ -118,7 +128,7 @@ lazy val scalalib = project ) lazy val scalaworker: Project = project - .dependsOn(core, scalalib) + .dependsOn(main, scalalib) .settings( sharedSettings, pluginSettings, @@ -140,6 +150,7 @@ def genTask(m: Project) = Def.task{ ( genTask(moduledefs).value ++ genTask(core).value ++ + genTask(main).value ++ genTask(scalalib).value ++ genTask(scalajslib).value ).mkString(",") @@ -220,7 +231,7 @@ val testRepos = Map( ) lazy val integration = project - .dependsOn(core % "compile->compile;test->test", scalalib, scalajslib) + .dependsOn(main % "compile->compile;test->test", scalalib, scalajslib) .settings( sharedSettings, name := "integration", @@ -52,8 +52,8 @@ trait MillModule extends MillPublishModule{ outer => class Tests(ctx0: mill.define.Ctx) extends mill.Module()(ctx0) with super.Tests{ def forkArgs = T{ testArgs() } def moduleDeps = - if (this == core.test) Seq(core) - else Seq(outer, core.test) + if (this == main.test) Seq(main) + else Seq(outer, main.test) def ivyDeps = Agg(ivy"com.lihaoyi::utest:0.6.0") def testFramework = "mill.UTestFramework" def scalacPluginClasspath = super.scalacPluginClasspath() ++ Seq(moduledefs.jar()) @@ -69,13 +69,24 @@ object core extends MillModule { def ivyDeps = Agg( ivy"com.lihaoyi::sourcecode:0.1.4", - ivy"com.lihaoyi::pprint:0.5.3", ivy"com.lihaoyi:::ammonite:1.0.3-21-05b5d32" ) def generatedSources = T.sources { shared.generateCoreSources(T.ctx().dest) } +} + +object main extends MillModule { + def moduleDeps = Seq(core) + + def compileIvyDeps = Agg( + ivy"org.scala-lang:scala-reflect:${scalaVersion()}" + ) + + def generatedSources = T.sources { + shared.generateCoreSources(T.ctx().dest) + } val test = new Tests(implicitly) class Tests(ctx0: mill.define.Ctx) extends super.Tests(ctx0){ @@ -87,7 +98,7 @@ object core extends MillModule { object scalaworker extends MillModule{ - def moduleDeps = Seq(core, scalalib) + def moduleDeps = Seq(main, scalalib) def ivyDeps = Agg( ivy"org.scala-sbt::zinc:1.0.5" @@ -99,7 +110,7 @@ object scalaworker extends MillModule{ object scalalib extends MillModule { - def moduleDeps = Seq(core) + def moduleDeps = Seq(main) def ivyDeps = Agg( ivy"org.scala-sbt:test-interface:1.0" @@ -115,6 +126,7 @@ object scalalib extends MillModule { val genIdeaArgs = genTask(moduledefs)() ++ genTask(core)() ++ + genTask(main)() ++ genTask(scalalib)() ++ genTask(scalajslib)() diff --git a/ci/test-mill-built.sh b/ci/test-mill-built.sh index 52be8851..7a3e8e57 100755 --- a/ci/test-mill-built.sh +++ b/ci/test-mill-built.sh @@ -13,7 +13,7 @@ target/bin/mill devAssembly # Second build & run tests using Mill -out/devAssembly/dest/out.jar all {core,scalalib,scalajslib}.test devAssembly +out/devAssembly/dest/out.jar all {main,scalalib,scalajslib}.test devAssembly out/devAssembly/dest/out.jar integration.test mill.integration.AmmoniteTests out/devAssembly/dest/out.jar integration.test "mill.integration.{AcyclicTests,BetterFilesTests,JawnTests}" out/devAssembly/dest/out.jar devAssembly diff --git a/ci/test-mill-release.sh b/ci/test-mill-release.sh index e3755e93..6c38c764 100755 --- a/ci/test-mill-release.sh +++ b/ci/test-mill-release.sh @@ -17,7 +17,7 @@ git clean -xdf # Second build & run tests using Mill -~/mill-release all {core,scalalib,scalajslib}.test devAssembly +~/mill-release all {main,scalalib,scalajslib}.test devAssembly ~/mill-release integration.test mill.integration.AmmoniteTests ~/mill-release integration.test "mill.integration.{AcyclicTests,BetterFilesTests,JawnTests}" ~/mill-release devAssembly diff --git a/ci/test-sbt-built.sh b/ci/test-sbt-built.sh index 3a60cbd3..bafb5942 100755 --- a/ci/test-sbt-built.sh +++ b/ci/test-sbt-built.sh @@ -8,7 +8,7 @@ git clean -xdf sbt bin/test:assembly # Run tests using Mill built using SBT -target/bin/mill all {core,scalalib,scalajslib}.test devAssembly +target/bin/mill all {main,scalalib,scalajslib}.test devAssembly target/bin/mill integration.test mill.integration.AmmoniteTests target/bin/mill integration.test "mill.integration.{AcyclicTests,BetterFilesTests,JawnTests}" target/bin/mill devAssembly diff --git a/ci/test-sbt.sh b/ci/test-sbt.sh index f77456f7..79d93cf5 100755 --- a/ci/test-sbt.sh +++ b/ci/test-sbt.sh @@ -6,6 +6,6 @@ set -eux git clean -xdf # First build & run tests using SBT -sbt core/test scalalib/test scalajslib/test +sbt core/test main/test scalalib/test scalajslib/test sbt integration/test sbt bin/test:assembly diff --git a/ci/test_all.sh b/ci/test_all.sh deleted file mode 100755 index a04f7119..00000000 --- a/ci/test_all.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -set -eux - -# Starting from scratch... -git clean -xdf - -# First build & run tests using SBT -sbt core/test scalalib/test scalajslib/test integration/test bin/test:assembly - -# Run tests using Mill built using SBT -target/bin/mill all {core,scalalib,scalajslib,integration}.test devAssembly - -# Second build & run tests using Mill -out/devAssembly/dest/out.jar all {core,scalalib,scalajslib,integration}.test devAssembly
\ No newline at end of file diff --git a/core/src/mill/define/BaseModule.scala b/core/src/mill/define/BaseModule.scala index 5253e691..fccb19ae 100644 --- a/core/src/mill/define/BaseModule.scala +++ b/core/src/mill/define/BaseModule.scala @@ -1,8 +1,6 @@ package mill.define -import mill.main.Router.Overrides import ammonite.ops.Path -import mill.main.ParseArgs object BaseModule{ case class Implicit(value: BaseModule) @@ -11,7 +9,8 @@ object BaseModule{ abstract class BaseModule(millSourcePath0: Path, external0: Boolean = false) (implicit millModuleEnclosing0: sourcecode.Enclosing, millModuleLine0: sourcecode.Line, - millName0: sourcecode.Name) + millName0: sourcecode.Name, + millFile0: sourcecode.File) extends Module()( mill.define.Ctx.make( implicitly, @@ -19,8 +18,9 @@ abstract class BaseModule(millSourcePath0: Path, external0: Boolean = false) implicitly, BasePath(millSourcePath0), Segments(), - Overrides(0), - Ctx.External(external0) + mill.util.Router.Overrides(0), + Ctx.External(external0), + millFile0 ) ){ // A BaseModule should provide an empty Segments list to it's children, since diff --git a/core/src/mill/define/Ctx.scala b/core/src/mill/define/Ctx.scala index 11e9e1f5..6075b804 100644 --- a/core/src/mill/define/Ctx.scala +++ b/core/src/mill/define/Ctx.scala @@ -1,6 +1,6 @@ package mill.define -import mill.main.Router.Overrides + import ammonite.ops.{Path, RelPath} import scala.annotation.implicitNotFound @@ -57,7 +57,8 @@ case class Ctx(enclosing: String, millSourcePath: Path, segments: Segments, overrides: Int, - external: Boolean){ + external: Boolean, + fileName: String){ } object Ctx{ @@ -67,8 +68,9 @@ object Ctx{ millName0: sourcecode.Name, millModuleBasePath0: BasePath, segments0: Segments, - overrides0: mill.main.Router.Overrides, - external0: External): Ctx = { + overrides0: mill.util.Router.Overrides, + external0: External, + fileName: sourcecode.File): Ctx = { Ctx( millModuleEnclosing0.value, millModuleLine0.value, @@ -76,7 +78,8 @@ object Ctx{ millModuleBasePath0.value, segments0, overrides0.value, - external0.value + external0.value, + fileName.value ) } }
\ No newline at end of file diff --git a/core/src/mill/define/Discover.scala b/core/src/mill/define/Discover.scala index fd5bd449..1b6b002a 100644 --- a/core/src/mill/define/Discover.scala +++ b/core/src/mill/define/Discover.scala @@ -1,6 +1,7 @@ package mill.define +import mill.util.Router.EntryPoint + import language.experimental.macros -import mill.main.Router.{EntryPoint, Overrides} import sourcecode.Compat.Context import scala.collection.mutable @@ -41,7 +42,7 @@ object Discover { } rec(weakTypeOf[T]) - val router = new mill.main.Router(c) + val router = new mill.util.Router(c) val mapping = for{ discoveredModuleType <- seen val curCls = discoveredModuleType.asInstanceOf[router.c.Type] @@ -57,7 +58,7 @@ object Discover { val (overrides, routes) = overridesRoutes.unzip val lhs = q"classOf[${discoveredModuleType.typeSymbol.asClass}]" val clsType = discoveredModuleType.typeSymbol.asClass - val rhs = q"scala.Seq[(Int, mill.main.Router.EntryPoint[_])](..$overridesRoutes)" + val rhs = q"scala.Seq[(Int, mill.util.Router.EntryPoint[_])](..$overridesRoutes)" q"$lhs -> $rhs" } diff --git a/core/src/mill/define/Module.scala b/core/src/mill/define/Module.scala index a53ed345..bfc15191 100644 --- a/core/src/mill/define/Module.scala +++ b/core/src/mill/define/Module.scala @@ -2,12 +2,10 @@ package mill.define import java.lang.reflect.Modifier -import mill.main.Router.{EntryPoint, Overrides} import ammonite.ops.Path import scala.language.experimental.macros import scala.reflect.ClassTag -import scala.reflect.macros.blackbox /** * `Module` is a class meant to be extended by `trait`s *only*, in order to * propagate the implicit parameters forward to the final concrete diff --git a/core/src/mill/eval/Evaluator.scala b/core/src/mill/eval/Evaluator.scala index 347ad321..70fab152 100644 --- a/core/src/mill/eval/Evaluator.scala +++ b/core/src/mill/eval/Evaluator.scala @@ -2,7 +2,7 @@ package mill.eval import java.net.URLClassLoader -import mill.main.Router.EntryPoint +import mill.util.Router.EntryPoint import ammonite.ops._ import ammonite.runtime.SpecialClassLoader import mill.define.{Ctx => _, _} @@ -330,6 +330,12 @@ class Evaluator[T](val outPath: Path, object Evaluator{ + // This needs to be a ThreadLocal because we need to pass it into the body of + // the TargetScopt#read call, which does not accept additional parameters. + // Until we migrate our CLI parsing off of Scopt (so we can pass the BaseModule + // in directly) we are forced to pass it in via a ThreadLocal + val currentEvaluator = new ThreadLocal[mill.eval.Evaluator[_]] + case class Paths(out: Path, dest: Path, meta: Path, diff --git a/core/src/mill/main/MainModule.scala b/core/src/mill/main/MainModule.scala deleted file mode 100644 index fd46fb77..00000000 --- a/core/src/mill/main/MainModule.scala +++ /dev/null @@ -1,27 +0,0 @@ -package mill.main - -trait MainModule extends mill.Module{ - implicit def millDiscover: mill.define.Discover[_] - implicit def millScoptTargetReads[T] = new mill.main.TargetScopt[T]() - implicit def millScoptEvaluatorReads[T] = new mill.main.EvaluatorScopt[T]() - def resolve(targets: mill.main.MagicScopt.Tasks[Any]*) = mill.T.command{ - targets.flatMap(_.items).foreach(println) - } - def all(evaluator: mill.eval.Evaluator[Any], - targets: mill.main.MagicScopt.Tasks[Any]*) = mill.T.command{ - val (watched, res) = mill.main.RunScript.evaluate( - evaluator, - mill.util.Strict.Agg.from(targets.flatMap(_.items)) - ) - } - def show(evaluator: mill.eval.Evaluator[Any], - targets: mill.main.MagicScopt.Tasks[Any]*) = mill.T.command{ - val (watched, res) = mill.main.RunScript.evaluate( - evaluator, - mill.util.Strict.Agg.from(targets.flatMap(_.items)) - ) - for(json <- res.right.get.flatMap(_._2)){ - println(json) - } - } -} diff --git a/core/src/mill/main/ParseArgs.scala b/core/src/mill/util/ParseArgs.scala index bafcd907..315edabc 100644 --- a/core/src/mill/main/ParseArgs.scala +++ b/core/src/mill/util/ParseArgs.scala @@ -1,6 +1,5 @@ -package mill.main +package mill.util -import mill.util.EitherOps import fastparse.all._ import mill.define.{Segment, Segments} diff --git a/core/src/mill/main/Router.scala b/core/src/mill/util/Router.scala index 935ffc72..f628730b 100644 --- a/core/src/mill/main/Router.scala +++ b/core/src/mill/util/Router.scala @@ -1,12 +1,12 @@ -package mill.main - +package mill.util import ammonite.main.Compat +import language.experimental.macros import scala.annotation.StaticAnnotation import scala.collection.mutable -import scala.language.experimental.macros import scala.reflect.macros.blackbox.Context + /** * More or less a minimal version of Autowire's Server that lets you generate * a set of "routes" from the methods defined in an object, and call them @@ -24,7 +24,7 @@ object Router{ implicit def generate: Overrides = macro impl def impl(c: Context): c.Tree = { import c.universe._ - q"new _root_.mill.main.Router.Overrides(${c.internal.enclosingOwner.overrides.length})" + q"new _root_.mill.util.Router.Overrides(${c.internal.enclosingOwner.overrides.length})" } } @@ -262,8 +262,8 @@ object Router{ } def makeReadCall(dict: Map[String, String], - default: => Option[Any], - arg: ArgSig[_, _]) = { + default: => Option[Any], + arg: ArgSig[_, _]) = { read(dict, default, arg, arg.reads.reads(_)) } def makeReadVarargsCall(arg: ArgSig[_, _], values: Seq[String]) = { @@ -271,6 +271,7 @@ object Router{ } } + class Router [C <: Context](val c: C) { import c.universe._ def getValsOrMeths(curCls: Type): Iterable[MethodSymbol] = { @@ -365,7 +366,7 @@ class Router [C <: Context](val c: C) { } val argSig = q""" - mill.main.Router.ArgSig[$curCls, $docUnwrappedType]( + mill.util.Router.ArgSig[$curCls, $docUnwrappedType]( ${arg.name.toString}, ${docUnwrappedType.toString + (if(vararg) "*" else "")}, $docTree, @@ -375,12 +376,12 @@ class Router [C <: Context](val c: C) { val reader = if(vararg) q""" - mill.main.Router.makeReadVarargsCall( + mill.util.Router.makeReadVarargsCall( $argSig, $extrasSymbol ) """ else q""" - mill.main.Router.makeReadCall( + mill.util.Router.makeReadCall( $argListSymbol, $default, $argSig @@ -403,7 +404,7 @@ class Router [C <: Context](val c: C) { val res = q""" - mill.main.Router.EntryPoint[$curCls]( + mill.util.Router.EntryPoint[$curCls]( ${meth.name.toString}, scala.Seq(..$argSigs), ${methodDoc match{ @@ -412,12 +413,12 @@ class Router [C <: Context](val c: C) { }}, ${varargs.contains(true)}, ($baseArgSym: $curCls, $argListSymbol: Map[String, String], $extrasSymbol: Seq[String]) => - mill.main.Router.validate(Seq(..$readArgs)) match{ - case mill.main.Router.Result.Success(List(..$argNames)) => - mill.main.Router.Result.Success( + mill.util.Router.validate(Seq(..$readArgs)) match{ + case mill.util.Router.Result.Success(List(..$argNames)) => + mill.util.Router.Result.Success( $baseArgSym.${meth.name.toTermName}(..$argNameCasts) ) - case x: mill.main.Router.Result.Error => x + case x: mill.util.Router.Result.Error => x }, ammonite.main.Router.Overrides() ) @@ -439,4 +440,3 @@ class Router [C <: Context](val c: C) { } } } - diff --git a/core/src/mill/main/Scripts.scala b/core/src/mill/util/Scripts.scala index 334c610f..7dde8252 100644 --- a/core/src/mill/main/Scripts.scala +++ b/core/src/mill/util/Scripts.scala @@ -1,14 +1,14 @@ -package mill.main -import java.nio.file.NoSuchFileException +package mill.util +import java.nio.file.NoSuchFileException -import mill.main.Router.{ArgSig, EntryPoint} import ammonite.ops._ import ammonite.runtime.Evaluator.AmmoniteExit import ammonite.util.Name.backtickWrap import ammonite.util.Util.CodeSource import ammonite.util.{Name, Res, Util} import fastparse.utils.Utils._ +import mill.util.Router.{ArgSig, EntryPoint} /** * Logic around using Ammonite as a script-runner; invoking scripts via the diff --git a/core/src/mill/util/Watched.scala b/core/src/mill/util/Watched.scala new file mode 100644 index 00000000..f1ef4fee --- /dev/null +++ b/core/src/mill/util/Watched.scala @@ -0,0 +1,8 @@ +package mill.util + +import mill.eval.PathRef + +case class Watched[T](value: T, watched: Seq[PathRef]) +object Watched{ + implicit def readWrite[T: upickle.default.ReadWriter] = upickle.default.macroRW[Watched[T]] +} diff --git a/core/src/mill/Main.scala b/main/src/mill/Main.scala index 3025994c..3025994c 100644 --- a/core/src/mill/Main.scala +++ b/main/src/mill/Main.scala diff --git a/core/src/mill/main/MagicScopt.scala b/main/src/mill/main/MagicScopt.scala index acba57cb..e18816c8 100644 --- a/core/src/mill/main/MagicScopt.scala +++ b/main/src/mill/main/MagicScopt.scala @@ -1,28 +1,25 @@ package mill.main import mill.define.ExternalModule -import mill.main.ParseArgs +import mill.eval.{Evaluator, PathRef} +import mill.util.ParseArgs object MagicScopt{ - // This needs to be a ThreadLocal because we need to pass it into the body of - // the TargetScopt#read call, which does not accept additional parameters. - // Until we migrate our CLI parsing off of Scopt (so we can pass the BaseModule - // in directly) we are forced to pass it in via a ThreadLocal - val currentEvaluator = new ThreadLocal[mill.eval.Evaluator[_]] - case class Tasks[T](items: Seq[mill.define.NamedTask[T]]) + + case class Tasks[T](value: Seq[mill.define.NamedTask[T]]) } class EvaluatorScopt[T]() extends scopt.Read[mill.eval.Evaluator[T]]{ def arity = 0 def reads = s => try{ - MagicScopt.currentEvaluator.get.asInstanceOf[mill.eval.Evaluator[T]] + Evaluator.currentEvaluator.get.asInstanceOf[mill.eval.Evaluator[T]] } } class TargetScopt[T]() extends scopt.Read[MagicScopt.Tasks[T]]{ def arity = 0 def reads = s => { - val rootModule = MagicScopt.currentEvaluator.get.rootModule + val rootModule = Evaluator.currentEvaluator.get.rootModule val d = rootModule.millDiscover val (expanded, leftover) = ParseArgs(Seq(s)).fold(e => throw new Exception(e), identity) val resolved = expanded.map{ diff --git a/main/src/mill/main/MainModule.scala b/main/src/mill/main/MainModule.scala new file mode 100644 index 00000000..012ecce5 --- /dev/null +++ b/main/src/mill/main/MainModule.scala @@ -0,0 +1,56 @@ +package mill.main + +import mill.util +import mill.main.RunScript +import mill.util.Watched +import pprint.{Renderer, Truncated} + +trait MainModule extends mill.Module{ + + implicit def millDiscover: mill.define.Discover[_] + implicit def millScoptTargetReads[T] = new mill.main.TargetScopt[T]() + implicit def millScoptEvaluatorReads[T] = new mill.main.EvaluatorScopt[T]() + mill.define.Ctx.make + def resolve(targets: mill.main.MagicScopt.Tasks[Any]*) = mill.T.command{ + targets.flatMap(_.value).foreach(println) + } + def describe(evaluator: mill.eval.Evaluator[Any], + targets: mill.main.MagicScopt.Tasks[Any]*) = mill.T.command{ + for{ + t <- targets + target <- t.value + tree = ReplApplyHandler.pprintTask(target, evaluator) + val defaults = pprint.PPrinter() + val renderer = new Renderer( + defaults.defaultWidth, + defaults.colorApplyPrefix, + defaults.colorLiteral, + defaults.defaultIndent + ) + val rendered = renderer.rec(tree, 0, 0).iter + val truncated = new Truncated(rendered, defaults.defaultWidth, defaults.defaultHeight) + str <- truncated ++ Iterator("\n") + } { + print(str) + } + } + def all(evaluator: mill.eval.Evaluator[Any], + targets: mill.main.MagicScopt.Tasks[Any]*) = mill.T.command{ + val (watched, res) = RunScript.evaluate( + evaluator, + mill.util.Strict.Agg.from(targets.flatMap(_.value)) + ) + Watched((), watched) + } + def show(evaluator: mill.eval.Evaluator[Any], + targets: mill.main.MagicScopt.Tasks[Any]*) = mill.T.command{ + val (watched, res) = mill.main.RunScript.evaluate( + evaluator, + mill.util.Strict.Agg.from(targets.flatMap(_.value)) + ) + for(json <- res.right.get.flatMap(_._2)){ + println(json) + } + Watched((), watched) + } +} diff --git a/core/src/mill/main/MainRunner.scala b/main/src/mill/main/MainRunner.scala index 9004de39..c073e583 100644 --- a/core/src/mill/main/MainRunner.scala +++ b/main/src/mill/main/MainRunner.scala @@ -8,6 +8,7 @@ import ammonite.util._ import mill.define.Discover import mill.eval.{Evaluator, PathRef} import mill.util.PrintLogger +import mill.main.RunScript import upickle.Js /** diff --git a/core/src/mill/main/ReplApplyHandler.scala b/main/src/mill/main/ReplApplyHandler.scala index 0849f2c8..76ef354f 100644 --- a/core/src/mill/main/ReplApplyHandler.scala +++ b/main/src/mill/main/ReplApplyHandler.scala @@ -30,6 +30,60 @@ object ReplApplyHandler{ ) ) } + def pprintCross(c: mill.define.Cross[_], evaluator: Evaluator[_]) = { + pprint.Tree.Lazy( ctx => + Iterator(c.millOuterCtx.enclosing , ":", c.millOuterCtx.lineNum.toString, ctx.applyPrefixColor("\nChildren:").toString) ++ + c.items.iterator.map(x => + "\n (" + x._1.map(pprint.PPrinter.BlackWhite.apply(_)).mkString(", ") + ")" + ) + ) + } + def pprintModule(m: mill.define.Module, evaluator: Evaluator[_]) = { + pprint.Tree.Lazy( ctx => + Iterator(m.millInternal.millModuleEnclosing, ":", m.millInternal.millModuleLine.toString) ++ + (if (m.millInternal.reflect[mill.Module].isEmpty) Nil + else + ctx.applyPrefixColor("\nChildren:").toString +: + m.millInternal.reflect[mill.Module].map("\n ." + _.millOuterCtx.segment.pathSegments.mkString("."))) ++ + (evaluator.discover.value.get(m.getClass) match{ + case None => Nil + case Some(commands) => + ctx.applyPrefixColor("\nCommands:").toString +: commands.map{c => + "\n ." + c._2.name + "(" + + c._2.argSignatures.map(s => s.name + ": " + s.typeString).mkString(", ") + + ")()" + } + }) ++ + (if (m.millInternal.reflect[Target[_]].isEmpty) Nil + else { + Seq(ctx.applyPrefixColor("\nTargets:").toString) ++ + m.millInternal.reflect[Target[_]].sortBy(_.label).map(t => + "\n ." + t.label + "()" + ) + }) + + ) + } + def pprintTask(t: NamedTask[_], evaluator: Evaluator[_]) = { + val seen = mutable.Set.empty[Task[_]] + def rec(t: Task[_]): Seq[Segments] = { + if (seen(t)) Nil // do nothing + else t match { + case t: Target[_] if evaluator.rootModule.millInternal.targets.contains(t) => + Seq(t.ctx.segments) + case _ => + seen.add(t) + t.inputs.flatMap(rec) + } + } + pprint.Tree.Lazy(ctx => + Iterator( + t.toString, "(", t.ctx.fileName, ":", t.ctx.lineNum.toString, ")", + t.ctx.lineNum.toString, "\n", ctx.applyPrefixColor("Inputs:").toString + ) ++ t.inputs.iterator.flatMap(rec).map("\n " + _.render) + ) + } + } class ReplApplyHandler(pprinter0: pprint.PPrinter, evaluator: Evaluator[_]) extends ApplyHandler[Task] { @@ -70,53 +124,11 @@ class ReplApplyHandler(pprinter0: pprint.PPrinter, val millHandlers: PartialFunction[Any, pprint.Tree] = { case c: Cross[_] => - pprint.Tree.Lazy( ctx => - Iterator(c.millOuterCtx.enclosing , ":", c.millOuterCtx.lineNum.toString, ctx.applyPrefixColor("\nChildren:").toString) ++ - c.items.iterator.map(x => - "\n (" + x._1.map(pprint.PPrinter.BlackWhite.apply(_)).mkString(", ") + ")" - ) - ) + ReplApplyHandler.pprintCross(c, evaluator) case m: mill.Module if evaluator.rootModule.millInternal.modules.contains(m) => - pprint.Tree.Lazy( ctx => - Iterator(m.millInternal.millModuleEnclosing, ":", m.millInternal.millModuleLine.toString) ++ - (if (m.millInternal.reflect[mill.Module].isEmpty) Nil - else - ctx.applyPrefixColor("\nChildren:").toString +: - m.millInternal.reflect[mill.Module].map("\n ." + _.millOuterCtx.segment.pathSegments.mkString("."))) ++ - (evaluator.discover.value.get(m.getClass) match{ - case None => Nil - case Some(commands) => - ctx.applyPrefixColor("\nCommands:").toString +: commands.map{c => - "\n ." + c._2.name + "(" + - c._2.argSignatures.map(s => s.name + ": " + s.typeString).mkString(", ") + - ")()" - } - }) ++ - (if (m.millInternal.reflect[Target[_]].isEmpty) Nil - else { - Seq(ctx.applyPrefixColor("\nTargets:").toString) ++ - m.millInternal.reflect[Target[_]].sortBy(_.label).map(t => - "\n ." + t.label + "()" - ) - }) - - ) + ReplApplyHandler.pprintModule(m, evaluator) case t: mill.define.Target[_] if evaluator.rootModule.millInternal.targets.contains(t) => - val seen = mutable.Set.empty[Task[_]] - def rec(t: Task[_]): Seq[Segments] = { - if (seen(t)) Nil // do nothing - else t match { - case t: Target[_] if evaluator.rootModule.millInternal.targets.contains(t) => - Seq(t.ctx.segments) - case _ => - seen.add(t) - t.inputs.flatMap(rec) - } - } - pprint.Tree.Lazy(ctx => - Iterator(t.ctx.enclosing, ":", t.ctx.lineNum.toString, "\n", ctx.applyPrefixColor("Inputs:").toString) ++ - t.inputs.iterator.flatMap(rec).map("\n " + _.render) - ) + ReplApplyHandler.pprintTask(t, evaluator) } val pprinter = pprinter0.copy( diff --git a/core/src/mill/main/Resolve.scala b/main/src/mill/main/Resolve.scala index 1932c241..c134d70d 100644 --- a/core/src/mill/main/Resolve.scala +++ b/main/src/mill/main/Resolve.scala @@ -2,8 +2,9 @@ package mill.main import mill.define._ import mill.define.TaskModule -import mill.main.Router.EntryPoint -import ammonite.util.{Res} +import ammonite.util.Res +import mill.util.Router.EntryPoint +import mill.util.Scripts object Resolve { def resolve[T, V](remainingSelector: List[Segment], @@ -23,7 +24,7 @@ object Resolve { .find(_.label == last) .map(Right(_)) - def shimArgsig[T](a: mill.main.Router.ArgSig[T, _]) = { + def shimArgsig[T](a: mill.util.Router.ArgSig[T, _]) = { ammonite.main.Router.ArgSig[T]( a.name, a.typeString, @@ -36,7 +37,7 @@ object Resolve { if cls.isAssignableFrom(target.getClass) ep <- entryPoints if ep._2.name == name - } yield mill.main.Scripts.runMainMethod( + } yield Scripts.runMainMethod( target, ep._2.asInstanceOf[EntryPoint[mill.Module]], ammonite.main.Scripts.groupArgs(rest.toList) diff --git a/core/src/mill/main/RunScript.scala b/main/src/mill/main/RunScript.scala index 17d520e7..bd21a821 100644 --- a/core/src/mill/main/RunScript.scala +++ b/main/src/mill/main/RunScript.scala @@ -7,10 +7,10 @@ import ammonite.ops.{Path, read} import ammonite.runtime.SpecialClassLoader import ammonite.util.Util.CodeSource import ammonite.util.{Name, Res, Util} -import mill.{PathRef, define} +import mill.define import mill.define.{Discover, ExternalModule, Segment, Task} -import mill.eval.{Evaluator, Result} -import mill.util.{EitherOps, Logger} +import mill.eval.{Evaluator, PathRef, Result} +import mill.util.{EitherOps, Logger, ParseArgs, Watched} import mill.util.Strict.Agg import upickle.Js @@ -155,23 +155,32 @@ object RunScript{ // module we still want you to be able to resolve targets from your // main build. Resolving targets from external builds as CLI arguments // is not currently supported - mill.main.MagicScopt.currentEvaluator.set(evaluator) + mill.eval.Evaluator.currentEvaluator.set(evaluator) mill.main.Resolve.resolve( sel.value.toList, rootModule, discover, args, crossSelectors.toList, Nil ) } finally{ - mill.main.MagicScopt.currentEvaluator.set(null) + mill.eval.Evaluator.currentEvaluator.set(null) } } EitherOps.sequence(selected) } - (watched, res) = evaluate( + } yield { + val (watched, res) = evaluate( evaluator, Agg.from(targets.flatten.distinct) ) - } yield (watched, res) + + val watched2 = for{ + x <- res.right.toSeq + (Watched(_, extraWatched), _) <- x + w <- extraWatched + } yield w + + (watched ++ watched2, res) + } } def evaluate(evaluator: Evaluator[_], diff --git a/core/src/mill/modules/Jvm.scala b/main/src/mill/modules/Jvm.scala index 297dcf1f..297dcf1f 100644 --- a/core/src/mill/modules/Jvm.scala +++ b/main/src/mill/modules/Jvm.scala diff --git a/core/src/mill/modules/Util.scala b/main/src/mill/modules/Util.scala index cef11859..cef11859 100644 --- a/core/src/mill/modules/Util.scala +++ b/main/src/mill/modules/Util.scala diff --git a/core/src/mill/package.scala b/main/src/mill/package.scala index 93916c8b..93916c8b 100644 --- a/core/src/mill/package.scala +++ b/main/src/mill/package.scala diff --git a/core/test/resources/examples/javac/build.sc b/main/test/resources/examples/javac/build.sc index 0783ac17..0783ac17 100644 --- a/core/test/resources/examples/javac/build.sc +++ b/main/test/resources/examples/javac/build.sc diff --git a/core/test/resources/examples/javac/resources/hello.txt b/main/test/resources/examples/javac/resources/hello.txt index 5e1c309d..5e1c309d 100644 --- a/core/test/resources/examples/javac/resources/hello.txt +++ b/main/test/resources/examples/javac/resources/hello.txt diff --git a/core/test/resources/examples/javac/src/Bar.java b/main/test/resources/examples/javac/src/Bar.java index 4e30c89b..4e30c89b 100644 --- a/core/test/resources/examples/javac/src/Bar.java +++ b/main/test/resources/examples/javac/src/Bar.java diff --git a/core/test/resources/examples/javac/src/Foo.java b/main/test/resources/examples/javac/src/Foo.java index e694f9fa..e694f9fa 100644 --- a/core/test/resources/examples/javac/src/Foo.java +++ b/main/test/resources/examples/javac/src/Foo.java diff --git a/core/test/src/mill/TestMain.scala b/main/test/src/mill/TestMain.scala index 80e7e627..80e7e627 100644 --- a/core/test/src/mill/TestMain.scala +++ b/main/test/src/mill/TestMain.scala diff --git a/core/test/src/mill/UTestFramework.scala b/main/test/src/mill/UTestFramework.scala index 6c0d5191..6c0d5191 100644 --- a/core/test/src/mill/UTestFramework.scala +++ b/main/test/src/mill/UTestFramework.scala diff --git a/core/test/src/mill/define/ApplicativeTests.scala b/main/test/src/mill/define/ApplicativeTests.scala index 72b715bb..72b715bb 100644 --- a/core/test/src/mill/define/ApplicativeTests.scala +++ b/main/test/src/mill/define/ApplicativeTests.scala diff --git a/core/test/src/mill/define/BasePathTests.scala b/main/test/src/mill/define/BasePathTests.scala index 1f5b4037..1f5b4037 100644 --- a/core/test/src/mill/define/BasePathTests.scala +++ b/main/test/src/mill/define/BasePathTests.scala diff --git a/core/test/src/mill/define/CacherTests.scala b/main/test/src/mill/define/CacherTests.scala index 606de846..606de846 100644 --- a/core/test/src/mill/define/CacherTests.scala +++ b/main/test/src/mill/define/CacherTests.scala diff --git a/core/test/src/mill/define/DiscoverTests.scala b/main/test/src/mill/define/DiscoverTests.scala index 7621169a..7621169a 100644 --- a/core/test/src/mill/define/DiscoverTests.scala +++ b/main/test/src/mill/define/DiscoverTests.scala diff --git a/core/test/src/mill/define/GraphTests.scala b/main/test/src/mill/define/GraphTests.scala index 7e6680be..7e6680be 100644 --- a/core/test/src/mill/define/GraphTests.scala +++ b/main/test/src/mill/define/GraphTests.scala diff --git a/core/test/src/mill/define/MacroErrorTests.scala b/main/test/src/mill/define/MacroErrorTests.scala index a389feaa..a389feaa 100644 --- a/core/test/src/mill/define/MacroErrorTests.scala +++ b/main/test/src/mill/define/MacroErrorTests.scala diff --git a/core/test/src/mill/eval/CrossTests.scala b/main/test/src/mill/eval/CrossTests.scala index aa12e180..aa12e180 100644 --- a/core/test/src/mill/eval/CrossTests.scala +++ b/main/test/src/mill/eval/CrossTests.scala diff --git a/core/test/src/mill/eval/EvaluationTests.scala b/main/test/src/mill/eval/EvaluationTests.scala index e5f0e57d..e5f0e57d 100644 --- a/core/test/src/mill/eval/EvaluationTests.scala +++ b/main/test/src/mill/eval/EvaluationTests.scala diff --git a/core/test/src/mill/eval/FailureTests.scala b/main/test/src/mill/eval/FailureTests.scala index 90cff686..90cff686 100644 --- a/core/test/src/mill/eval/FailureTests.scala +++ b/main/test/src/mill/eval/FailureTests.scala diff --git a/core/test/src/mill/eval/JavaCompileJarTests.scala b/main/test/src/mill/eval/JavaCompileJarTests.scala index 71feebda..966c272f 100644 --- a/core/test/src/mill/eval/JavaCompileJarTests.scala +++ b/main/test/src/mill/eval/JavaCompileJarTests.scala @@ -21,7 +21,7 @@ object JavaCompileJarTests extends TestSuite{ val tests = Tests{ 'javac { - val javacSrcPath = pwd / 'core / 'test / 'resources / 'examples / 'javac + val javacSrcPath = pwd / 'main / 'test / 'resources / 'examples / 'javac val javacDestPath = TestUtil.getOutPath() / 'src mkdir(javacDestPath / up) diff --git a/core/test/src/mill/eval/ModuleTests.scala b/main/test/src/mill/eval/ModuleTests.scala index c6125b32..c6125b32 100644 --- a/core/test/src/mill/eval/ModuleTests.scala +++ b/main/test/src/mill/eval/ModuleTests.scala diff --git a/core/test/src/mill/eval/TarjanTests.scala b/main/test/src/mill/eval/TarjanTests.scala index 2f9d0a4d..2f9d0a4d 100644 --- a/core/test/src/mill/eval/TarjanTests.scala +++ b/main/test/src/mill/eval/TarjanTests.scala diff --git a/core/test/src/mill/eval/TaskTests.scala b/main/test/src/mill/eval/TaskTests.scala index 114a2910..114a2910 100644 --- a/core/test/src/mill/eval/TaskTests.scala +++ b/main/test/src/mill/eval/TaskTests.scala diff --git a/core/test/src/mill/main/JavaCompileJarTests.scala b/main/test/src/mill/main/JavaCompileJarTests.scala index a4c9fafe..fb047675 100644 --- a/core/test/src/mill/main/JavaCompileJarTests.scala +++ b/main/test/src/mill/main/JavaCompileJarTests.scala @@ -6,7 +6,7 @@ import utest._ object JavaCompileJarTests extends ScriptTestSuite { def workspaceSlug = "java-compile-jar" - def scriptSourcePath = pwd / 'core / 'test / 'resources / 'examples / 'javac + def scriptSourcePath = pwd / 'main / 'test / 'resources / 'examples / 'javac val tests = Tests{ initWorkspace() 'test - { diff --git a/core/test/src/mill/main/MainTests.scala b/main/test/src/mill/main/MainTests.scala index 22f93ae0..157fff6f 100644 --- a/core/test/src/mill/main/MainTests.scala +++ b/main/test/src/mill/main/MainTests.scala @@ -13,7 +13,7 @@ object MainTests extends TestSuite{ val expected = expected0.map(_.map(_(module))) val resolved = for{ - selectors <- mill.main.ParseArgs(Seq(selectorString)).map(_._1.head) + selectors <- mill.util.ParseArgs(Seq(selectorString)).map(_._1.head) val crossSelectors = selectors._2.value.map{case Segment.Cross(x) => x.toList.map(_.toString) case _ => Nil} task <- mill.main.Resolve.resolve( selectors._2.value.toList, module, discover, Nil, crossSelectors.toList, Nil diff --git a/core/test/src/mill/main/ParseArgsTest.scala b/main/test/src/mill/util/ParseArgsTest.scala index 6678f12c..9121bca5 100644 --- a/core/test/src/mill/main/ParseArgsTest.scala +++ b/main/test/src/mill/util/ParseArgsTest.scala @@ -1,4 +1,4 @@ -package mill.main +package mill.util import mill.define.Segment import mill.define.Segment.{Cross, Label} diff --git a/core/test/src/mill/util/ScriptTestSuite.scala b/main/test/src/mill/util/ScriptTestSuite.scala index 1aa74de1..916d3af6 100644 --- a/core/test/src/mill/util/ScriptTestSuite.scala +++ b/main/test/src/mill/util/ScriptTestSuite.scala @@ -3,7 +3,7 @@ package mill.util import java.io.{ByteArrayInputStream, ByteArrayOutputStream, PrintStream} import ammonite.ops._ -import mill.main.ParseArgs +import mill.util.ParseArgs import utest._ abstract class ScriptTestSuite extends TestSuite{ diff --git a/core/test/src/mill/util/TestEvaluator.scala b/main/test/src/mill/util/TestEvaluator.scala index a5be0488..a5be0488 100644 --- a/core/test/src/mill/util/TestEvaluator.scala +++ b/main/test/src/mill/util/TestEvaluator.scala diff --git a/core/test/src/mill/util/TestGraphs.scala b/main/test/src/mill/util/TestGraphs.scala index 581d5e0a..581d5e0a 100644 --- a/core/test/src/mill/util/TestGraphs.scala +++ b/main/test/src/mill/util/TestGraphs.scala diff --git a/core/test/src/mill/util/TestUtil.scala b/main/test/src/mill/util/TestUtil.scala index 7ef43943..b30d5d51 100644 --- a/core/test/src/mill/util/TestUtil.scala +++ b/main/test/src/mill/util/TestUtil.scala @@ -1,6 +1,6 @@ package mill.util -import mill.main.Router.Overrides +import mill.util.Router.Overrides import ammonite.ops.pwd import mill.define._ import mill.eval.Result diff --git a/scalalib/src/mill/scalalib/PublishModule.scala b/scalalib/src/mill/scalalib/PublishModule.scala index e7f36609..a6835dad 100644 --- a/scalalib/src/mill/scalalib/PublishModule.scala +++ b/scalalib/src/mill/scalalib/PublishModule.scala @@ -85,13 +85,14 @@ trait PublishModule extends ScalaModule { outer => ).publish(artifacts.map{case (a, b) => (a.path, b)}, artifactInfo) } } + object PublishModule extends ExternalModule{ def publishAll(sonatypeCreds: String, gpgPassphrase: String, publishArtifacts: mill.main.MagicScopt.Tasks[(mill.scalalib.publish.Artifact, Seq[(PathRef, String)])], sonatypeUri: String = "https://oss.sonatype.org/service/local", sonatypeSnapshotUri: String = "https://oss.sonatype.org/content/repositories/snapshots") = T.command{ - val x: Seq[(Seq[(Path, String)], Artifact)] = Task.sequence(publishArtifacts.items)().map{ + val x: Seq[(Seq[(Path, String)], Artifact)] = Task.sequence(publishArtifacts.value)().map{ case (a, s) => (s.map{case (p, f) => (p.path, f)}, a) } new SonatypePublisher( @@ -104,7 +105,8 @@ object PublishModule extends ExternalModule{ x:_* ) } - implicit def millScoptTargetReads[T] = new mill.main.MagicScopt[T]() + + implicit def millScoptTargetReads[T] = new mill.main.TargetScopt[T]() def millDiscover: mill.define.Discover[this.type] = mill.define.Discover[this.type] }
\ No newline at end of file |