summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbuild.sc8
-rw-r--r--core/src/mill/define/Task.scala46
-rw-r--r--core/src/mill/eval/Evaluator.scala12
-rw-r--r--core/src/mill/util/AggWrapper.scala7
-rw-r--r--core/src/mill/util/JsonFormatters.scala20
-rw-r--r--main/src/mill/main/MainModule.scala2
-rw-r--r--main/src/mill/main/RunScript.scala2
-rw-r--r--main/test/src/mill/main/JavaCompileJarTests.scala78
-rw-r--r--main/test/src/mill/util/TestUtil.scala2
-rw-r--r--scalajslib/src/mill/scalajslib/ScalaJSModule.scala6
-rw-r--r--scalalib/src/mill/scalalib/ScalaModule.scala4
-rw-r--r--scalalib/src/mill/scalalib/ScalaWorkerApi.scala6
-rw-r--r--scalalib/src/mill/scalalib/publish/SonatypeHttpApi.scala8
13 files changed, 105 insertions, 96 deletions
diff --git a/build.sc b/build.sc
index a0e563c3..e40b8511 100755
--- a/build.sc
+++ b/build.sc
@@ -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