diff options
-rwxr-xr-x | build.sc | 8 | ||||
-rw-r--r-- | core/src/mill/define/Task.scala | 46 | ||||
-rw-r--r-- | core/src/mill/eval/Evaluator.scala | 12 | ||||
-rw-r--r-- | core/src/mill/util/AggWrapper.scala | 7 | ||||
-rw-r--r-- | core/src/mill/util/JsonFormatters.scala | 20 | ||||
-rw-r--r-- | main/src/mill/main/MainModule.scala | 2 | ||||
-rw-r--r-- | main/src/mill/main/RunScript.scala | 2 | ||||
-rw-r--r-- | main/test/src/mill/main/JavaCompileJarTests.scala | 78 | ||||
-rw-r--r-- | main/test/src/mill/util/TestUtil.scala | 2 | ||||
-rw-r--r-- | scalajslib/src/mill/scalajslib/ScalaJSModule.scala | 6 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaModule.scala | 4 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/ScalaWorkerApi.scala | 6 | ||||
-rw-r--r-- | scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala | 8 |
13 files changed, 105 insertions, 96 deletions
@@ -50,6 +50,9 @@ trait MillModule extends MillPublishModule{ outer => val test = new Tests(implicitly) class Tests(ctx0: mill.define.Ctx) extends mill.Module()(ctx0) with super.Tests{ + def repositories = super.repositories ++ Seq( + MavenRepository("https://oss.sonatype.org/content/repositories/releases") + ) def forkArgs = T{ testArgs() } def moduleDeps = if (this == main.test) Seq(main) @@ -62,7 +65,7 @@ trait MillModule extends MillPublishModule{ outer => object clientserver extends MillModule{ def ivyDeps = Agg( - ivy"com.lihaoyi:::ammonite:1.0.5-7-f032887", + ivy"com.lihaoyi:::ammonite:1.1.0", ivy"org.scala-sbt.ipcsocket:ipcsocket:1.0.0" ) val test = new Tests(implicitly) @@ -77,8 +80,7 @@ object core extends MillModule { def ivyDeps = Agg( ivy"com.lihaoyi::sourcecode:0.1.4", - ivy"com.lihaoyi:::ammonite:1.0.5-7-f032887", - ivy"jline:jline:2.14.5" + ivy"com.lihaoyi:::ammonite:1.1.0", ) def generatedSources = T { diff --git a/core/src/mill/define/Task.scala b/core/src/mill/define/Task.scala index 17be54fe..63de11f6 100644 --- a/core/src/mill/define/Task.scala +++ b/core/src/mill/define/Task.scala @@ -57,34 +57,30 @@ trait Target[+T] extends NamedTask[T]{ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Result, mill.util.Ctx] { implicit def apply[T](t: T) - (implicit r: R[T], - w: W[T], + (implicit rw: RW[T], ctx: mill.define.Ctx): Target[T] = macro targetImpl[T] def targetImpl[T: c.WeakTypeTag](c: Context) (t: c.Expr[T]) - (r: c.Expr[R[T]], - w: c.Expr[W[T]], + (rw: c.Expr[RW[T]], ctx: c.Expr[mill.define.Ctx]): c.Expr[Target[T]] = { import c.universe._ val lhs = Applicative.impl0[Task, T, mill.util.Ctx](c)(reify(Result.Success(t.splice)).tree) mill.moduledefs.Cacher.impl0[TargetImpl[T]](c)( reify( - new TargetImpl[T](lhs.splice, ctx.splice, RW(w.splice.write, r.splice.read)) + new TargetImpl[T](lhs.splice, ctx.splice, rw.splice) ) ) } implicit def apply[T](t: Result[T]) - (implicit r: R[T], - w: W[T], + (implicit rw: RW[T], ctx: mill.define.Ctx): Target[T] = macro targetResultImpl[T] def targetResultImpl[T: c.WeakTypeTag](c: Context) (t: c.Expr[Result[T]]) - (r: c.Expr[R[T]], - w: c.Expr[W[T]], + (rw: c.Expr[RW[T]], ctx: c.Expr[mill.define.Ctx]): c.Expr[Target[T]] = { import c.universe._ mill.moduledefs.Cacher.impl0[Target[T]](c)( @@ -92,26 +88,24 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul new TargetImpl[T]( Applicative.impl0[Task, T, mill.util.Ctx](c)(t.tree).splice, ctx.splice, - RW(w.splice.write, r.splice.read) + rw.splice ) ) ) } def apply[T](t: Task[T]) - (implicit r: R[T], - w: W[T], + (implicit rw: RW[T], ctx: mill.define.Ctx): Target[T] = macro targetTaskImpl[T] def targetTaskImpl[T: c.WeakTypeTag](c: Context) (t: c.Expr[Task[T]]) - (r: c.Expr[R[T]], - w: c.Expr[W[T]], + (rw: c.Expr[RW[T]], ctx: c.Expr[mill.define.Ctx]): c.Expr[Target[T]] = { import c.universe._ mill.moduledefs.Cacher.impl0[Target[T]](c)( reify( - new TargetImpl[T](t.splice, ctx.splice, RW(w.splice.write, r.splice.read)) + new TargetImpl[T](t.splice, ctx.splice, rw.splice) ) ) } @@ -158,14 +152,12 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul ) } def input[T](value: Result[T]) - (implicit r: R[T], - w: W[T], + (implicit rw: RW[T], ctx: mill.define.Ctx): Input[T] = macro inputImpl[T] def inputImpl[T: c.WeakTypeTag](c: Context) (value: c.Expr[T]) - (r: c.Expr[R[T]], - w: c.Expr[W[T]], + (rw: c.Expr[RW[T]], ctx: c.Expr[mill.define.Ctx]): c.Expr[Input[T]] = { import c.universe._ @@ -174,7 +166,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul new Input[T]( Applicative.impl[Task, T, mill.util.Ctx](c)(value).splice, ctx.splice, - RW(w.splice.write, r.splice.read) + rw.splice ) ) ) @@ -229,14 +221,12 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul def task[T](t: Result[T]): Task[T] = macro Applicative.impl[Task, T, mill.util.Ctx] - def persistent[T](t: Result[T])(implicit r: R[T], - w: W[T], + def persistent[T](t: Result[T])(implicit rw: RW[T], ctx: mill.define.Ctx): Persistent[T] = macro persistentImpl[T] def persistentImpl[T: c.WeakTypeTag](c: Context) (t: c.Expr[T]) - (r: c.Expr[R[T]], - w: c.Expr[W[T]], + (rw: c.Expr[RW[T]], ctx: c.Expr[mill.define.Ctx]): c.Expr[Persistent[T]] = { import c.universe._ @@ -246,7 +236,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul new Persistent[T]( Applicative.impl[Task, T, mill.util.Ctx](c)(t).splice, ctx.splice, - RW(w.splice.write, r.splice.read) + rw.splice ) ) ) @@ -314,9 +304,9 @@ class Sources(t: Task[Seq[PathRef]], ctx0: mill.define.Ctx) extends Input[Seq[PathRef]]( t, ctx0, - RW( - upickle.default.SeqishW[PathRef, Seq].write, - upickle.default.SeqishR[Seq, PathRef].read + RW.join( + upickle.default.SeqLikeReader[Seq, PathRef], + upickle.default.SeqLikeWriter[Seq, PathRef] ) ) object Task { diff --git a/core/src/mill/eval/Evaluator.scala b/core/src/mill/eval/Evaluator.scala index 1e1b8b35..f8fecf38 100644 --- a/core/src/mill/eval/Evaluator.scala +++ b/core/src/mill/eval/Evaluator.scala @@ -128,11 +128,15 @@ case class Evaluator[T](home: Path, if (!exists(paths.out)) mkdir(paths.out) val cached = for{ - json <- scala.util.Try(upickle.json.read(paths.meta.toIO)).toOption - cached <- scala.util.Try(upickle.default.readJs[Evaluator.Cached](json)).toOption + cached <- + try Some(upickle.default.read[Evaluator.Cached](paths.meta.toIO)) + catch {case e: Throwable => None} + if cached.inputsHash == inputsHash reader <- labelledNamedTask.format - parsed <- reader.read.lift(cached.v) + parsed <- + try Some(upickle.default.read(cached.v)(reader)) + catch {case e: Throwable => None} } yield (parsed, cached.valueHash) val workerCached = labelledNamedTask.task.asWorker @@ -195,7 +199,7 @@ case class Evaluator[T](home: Path, val terminalResult = labelledNamedTask .writer .asInstanceOf[Option[upickle.default.Writer[Any]]] - .map(_.write(v) -> v) + .map(w => upickle.default.writeJs(v)(w) -> v) for((json, v) <- terminalResult){ write.over( diff --git a/core/src/mill/util/AggWrapper.scala b/core/src/mill/util/AggWrapper.scala index eefe6224..6c107875 100644 --- a/core/src/mill/util/AggWrapper.scala +++ b/core/src/mill/util/AggWrapper.scala @@ -30,10 +30,11 @@ sealed class AggWrapper(strictUniqueness: Boolean){ object Agg{ def empty[V]: Agg[V] = new Agg.Mutable[V] implicit def jsonFormat[T: upickle.default.ReadWriter]: upickle.default.ReadWriter[Agg[T]] = - upickle.default.ReadWriter[Agg[T]] ( - oset => upickle.default.writeJs(oset.toList), - {case json => Agg.from(upickle.default.readJs[Seq[T]](json))} + upickle.default.readwriter[Seq[T]].bimap[Agg[T]]( + _.toList, + Agg.from(_) ) + def apply[V](items: V*) = from(items) implicit def from[V](items: TraversableOnce[V]): Agg[V] = { diff --git a/core/src/mill/util/JsonFormatters.scala b/core/src/mill/util/JsonFormatters.scala index 00a40e7d..f92941f7 100644 --- a/core/src/mill/util/JsonFormatters.scala +++ b/core/src/mill/util/JsonFormatters.scala @@ -5,15 +5,17 @@ import upickle.Js import upickle.default.{ReadWriter => RW} object JsonFormatters extends JsonFormatters trait JsonFormatters { - implicit val pathReadWrite: RW[ammonite.ops.Path] = RW[ammonite.ops.Path]( - o => Js.Str(o.toString()), - {case Js.Str(json) => Path(json.toString)}, - ) + implicit val pathReadWrite: RW[ammonite.ops.Path] = upickle.default.readwriter[String] + .bimap[ammonite.ops.Path]( + _.toString, + Path(_) + ) - implicit val bytesReadWrite: RW[Bytes] = RW[Bytes]( - o => Js.Str(javax.xml.bind.DatatypeConverter.printBase64Binary(o.array)), - {case Js.Str(json) => new Bytes(javax.xml.bind.DatatypeConverter.parseBase64Binary(json.toString))} - ) + implicit val bytesReadWrite: RW[Bytes] = upickle.default.readwriter[String] + .bimap( + o => javax.xml.bind.DatatypeConverter.printBase64Binary(o.array), + str => new Bytes(javax.xml.bind.DatatypeConverter.parseBase64Binary(str)) + ) implicit lazy val crFormat: RW[ammonite.ops.CommandResult] = upickle.default.macroRW @@ -21,7 +23,7 @@ trait JsonFormatters { implicit lazy val modFormat: RW[coursier.Module] = upickle.default.macroRW implicit lazy val depFormat: RW[coursier.Dependency]= upickle.default.macroRW implicit lazy val attrFormat: RW[coursier.Attributes] = upickle.default.macroRW - implicit val stackTraceRW = upickle.default.ReadWriter[StackTraceElement]( + implicit val stackTraceRW = upickle.default.readwriter[Js.Obj].bimap[StackTraceElement]( ste => Js.Obj( "declaringClass" -> Js.Str(ste.getClassName), "methodName" -> Js.Str(ste.getMethodName), diff --git a/main/src/mill/main/MainModule.scala b/main/src/mill/main/MainModule.scala index 4b0a4354..7c84f74a 100644 --- a/main/src/mill/main/MainModule.scala +++ b/main/src/mill/main/MainModule.scala @@ -169,7 +169,7 @@ trait MainModule extends mill.Module{ multiSelect = false ) {res => for(json <- res.flatMap(_._2)){ - println(json) + println(json.render(indent = 4)) } } } diff --git a/main/src/mill/main/RunScript.scala b/main/src/mill/main/RunScript.scala index 4d8653fb..77930cc8 100644 --- a/main/src/mill/main/RunScript.scala +++ b/main/src/mill/main/RunScript.scala @@ -225,7 +225,7 @@ object RunScript{ val jsonFile = Evaluator .resolveDestPaths(evaluator.outPath, t.ctx.segments) .meta - val metadata = upickle.default.readJs[Evaluator.Cached](upickle.json.read(jsonFile.toIO)) + val metadata = upickle.default.readJs[Evaluator.Cached](ujson.read(jsonFile.toIO)) Some(metadata.v) case _ => None diff --git a/main/test/src/mill/main/JavaCompileJarTests.scala b/main/test/src/mill/main/JavaCompileJarTests.scala index 635ac3c5..6c45b454 100644 --- a/main/test/src/mill/main/JavaCompileJarTests.scala +++ b/main/test/src/mill/main/JavaCompileJarTests.scala @@ -10,56 +10,58 @@ object JavaCompileJarTests extends ScriptTestSuite(fork = false) { val tests = Tests{ initWorkspace() 'test - { - // Basic target evaluation works - assert(eval("classFiles")) - assert(eval("jar")) + if (!ammonite.util.Util.java9OrAbove) { + // Basic target evaluation works + assert(eval("classFiles")) + assert(eval("jar")) - val classFiles1 = meta("classFiles") - val jar1 = meta("jar") + val classFiles1 = meta("classFiles") + val jar1 = meta("jar") - assert(eval("classFiles")) - assert(eval("jar")) + assert(eval("classFiles")) + assert(eval("jar")) - // Repeated evaluation has the same results - val classFiles2 = meta("classFiles") - val jar2 = meta("jar") + // Repeated evaluation has the same results + val classFiles2 = meta("classFiles") + val jar2 = meta("jar") - assert( - jar1 == jar2, - classFiles1 == classFiles2 - ) + assert( + jar1 == jar2, + classFiles1 == classFiles2 + ) - // If we update resources, classFiles are unchanged but jar changes - for(scalaFile <- ls.rec(workspacePath).filter(_.ext == "txt")){ - write.append(scalaFile, "\n") - } + // If we update resources, classFiles are unchanged but jar changes + for(scalaFile <- ls.rec(workspacePath).filter(_.ext == "txt")){ + write.append(scalaFile, "\n") + } - assert(eval("classFiles")) - assert(eval("jar")) + assert(eval("classFiles")) + assert(eval("jar")) - val classFiles3 = meta("classFiles") - val jar3 = meta("jar") + val classFiles3 = meta("classFiles") + val jar3 = meta("jar") - assert( - jar2 != jar3, - classFiles2 == classFiles3 - ) + assert( + jar2 != jar3, + classFiles2 == classFiles3 + ) - // We can intentionally break the code, have the targets break, then - // fix the code and have them recover. - for(scalaFile <- ls.rec(workspacePath).filter(_.ext == "java")){ - write.append(scalaFile, "\n}") - } + // We can intentionally break the code, have the targets break, then + // fix the code and have them recover. + for(scalaFile <- ls.rec(workspacePath).filter(_.ext == "java")){ + write.append(scalaFile, "\n}") + } - assert(!eval("classFiles")) - assert(!eval("jar")) + assert(!eval("classFiles")) + assert(!eval("jar")) - for(scalaFile <- ls.rec(workspacePath).filter(_.ext == "java")){ - write.over(scalaFile, read(scalaFile).dropRight(2)) - } + for(scalaFile <- ls.rec(workspacePath).filter(_.ext == "java")){ + write.over(scalaFile, read(scalaFile).dropRight(2)) + } - assert(eval("classFiles")) - assert(eval("jar")) + assert(eval("classFiles")) + assert(eval("jar")) + } } } } diff --git a/main/test/src/mill/util/TestUtil.scala b/main/test/src/mill/util/TestUtil.scala index d0caade7..dede8bcf 100644 --- a/main/test/src/mill/util/TestUtil.scala +++ b/main/test/src/mill/util/TestUtil.scala @@ -65,7 +65,7 @@ object TestUtil { (implicit ctx0: mill.define.Ctx) extends Test(inputs) with Target[Int]{ val ctx = ctx0.copy(segments = ctx0.segments ++ Seq(ctx0.segment)) - val readWrite = upickle.default.IntRW + val readWrite = upickle.default.readwriter[Int] } diff --git a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala index 11b9eaf8..bddf894e 100644 --- a/scalajslib/src/mill/scalajslib/ScalaJSModule.scala +++ b/scalajslib/src/mill/scalajslib/ScalaJSModule.scala @@ -31,7 +31,11 @@ trait ScalaJSModule extends scalalib.ScalaModule { outer => if (jsBridgePath != null) Success( Agg(PathRef(Path(jsBridgePath), quick = true)) ) else resolveDependencies( - Seq(Cache.ivy2Local, MavenRepository("https://repo1.maven.org/maven2")), + Seq( + Cache.ivy2Local, + MavenRepository("https://repo1.maven.org/maven2"), + MavenRepository("https://oss.sonatype.org/content/repositories/releases") + ), "2.12.4", Seq( ivy"com.lihaoyi::mill-scalajslib-jsbridges-${scalaJSBridgeVersion()}:${sys.props("MILL_VERSION")}" diff --git a/scalalib/src/mill/scalalib/ScalaModule.scala b/scalalib/src/mill/scalalib/ScalaModule.scala index 7e4217e7..a2ca2214 100644 --- a/scalalib/src/mill/scalalib/ScalaModule.scala +++ b/scalalib/src/mill/scalalib/ScalaModule.scala @@ -398,7 +398,7 @@ trait TestModule extends ScalaModule with TaskModule { workingDir = forkWorkingDir ) - val jsonOutput = upickle.json.read(outputPath.toIO) + val jsonOutput = ujson.read(outputPath.toIO) val (doneMsg, results) = upickle.default.readJs[(String, Seq[TestRunner.Result])](jsonOutput) TestModule.handleResults(doneMsg, results) @@ -413,7 +413,7 @@ trait TestModule extends ScalaModule with TaskModule { args ) - val jsonOutput = upickle.json.read(outputPath.toIO) + val jsonOutput = ujson.read(outputPath.toIO) val (doneMsg, results) = upickle.default.readJs[(String, Seq[TestRunner.Result])](jsonOutput) TestModule.handleResults(doneMsg, results) diff --git a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala index a3760aed..9739089a 100644 --- a/scalalib/src/mill/scalalib/ScalaWorkerApi.scala +++ b/scalalib/src/mill/scalalib/ScalaWorkerApi.scala @@ -16,7 +16,11 @@ object ScalaWorkerModule extends mill.define.ExternalModule with ScalaWorkerModu lazy val millDiscover = Discover[this.type] } trait ScalaWorkerModule extends mill.Module{ - def repositories = Seq(Cache.ivy2Local, MavenRepository("https://repo1.maven.org/maven2")) + def repositories = Seq( + Cache.ivy2Local, + MavenRepository("https://repo1.maven.org/maven2"), + MavenRepository("https://oss.sonatype.org/content/repositories/releases") + ) def classpath = T{ val scalaWorkerJar = sys.props("MILL_SCALA_WORKER") diff --git a/scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala b/scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala index 0b5785a5..927d4515 100644 --- a/scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala +++ b/scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala @@ -2,7 +2,7 @@ package mill.scalalib.publish import java.util.Base64 -import upickle.json + import scala.concurrent.duration._ import scalaj.http.{BaseHttp, HttpOptions, HttpRequest, HttpResponse} @@ -33,7 +33,7 @@ class SonatypeHttpApi(uri: String, credentials: String) { .throwError val resourceUri = - json + ujson .read(response.body)("data") .arr .find(profile => profile("name").str == groupId) @@ -52,7 +52,7 @@ class SonatypeHttpApi(uri: String, credentials: String) { .asString .throwError - json.read(response.body)("type").str.toString + ujson.read(response.body)("type").str.toString } // https://oss.sonatype.org/nexus-staging-plugin/default/docs/path__staging_profiles_-profileIdKey-_start.html @@ -63,7 +63,7 @@ class SonatypeHttpApi(uri: String, credentials: String) { s"""{"data": {"description": "fresh staging profile for ${groupId}"}}""")) .throwError - json.read(response.body)("data")("stagedRepositoryId").str.toString + ujson.read(response.body)("data")("stagedRepositoryId").str.toString } // https://oss.sonatype.org/nexus-staging-plugin/default/docs/path__staging_profiles_-profileIdKey-_finish.html |