summaryrefslogtreecommitdiff
path: root/main/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'main/core/src')
-rw-r--r--main/core/src/mill/define/Applicative.scala4
-rw-r--r--main/core/src/mill/define/Task.scala44
-rw-r--r--main/core/src/mill/eval/Evaluator.scala2
-rw-r--r--main/core/src/mill/eval/PathRef.scala69
-rw-r--r--main/core/src/mill/eval/Result.scala36
-rw-r--r--main/core/src/mill/eval/package.scala12
-rw-r--r--main/core/src/mill/util/ClassLoader.scala62
-rw-r--r--main/core/src/mill/util/Ctx.scala55
-rw-r--r--main/core/src/mill/util/IO.scala32
-rw-r--r--main/core/src/mill/util/JsonFormatters.scala43
-rw-r--r--main/core/src/mill/util/Loggers.scala (renamed from main/core/src/mill/util/Logger.scala)43
-rw-r--r--main/core/src/mill/util/Watched.scala2
-rw-r--r--main/core/src/mill/util/package.scala7
13 files changed, 49 insertions, 362 deletions
diff --git a/main/core/src/mill/define/Applicative.scala b/main/core/src/mill/define/Applicative.scala
index 69c506f7..5e63b1cc 100644
--- a/main/core/src/mill/define/Applicative.scala
+++ b/main/core/src/mill/define/Applicative.scala
@@ -25,7 +25,7 @@ object Applicative {
def self: M[T]
def apply()(implicit handler: ApplyHandler[M]): T = handler(self)
}
- class ImplicitStub extends StaticAnnotation
+
type Id[+T] = T
trait Applyer[W[_], T[_], Z[_], Ctx] extends ApplyerGenerated[T, Z, Ctx] {
@@ -81,7 +81,7 @@ object Applicative {
tempIdent
case (t, api)
if t.symbol != null
- && t.symbol.annotations.exists(_.tree.tpe =:= typeOf[ImplicitStub]) =>
+ && t.symbol.annotations.exists(_.tree.tpe =:= typeOf[mill.api.Ctx.ImplicitStub]) =>
val tempIdent = Ident(ctxSym)
c.internal.setType(tempIdent, t.tpe)
diff --git a/main/core/src/mill/define/Task.scala b/main/core/src/mill/define/Task.scala
index 07576724..a464bf18 100644
--- a/main/core/src/mill/define/Task.scala
+++ b/main/core/src/mill/define/Task.scala
@@ -27,7 +27,7 @@ abstract class Task[+T] extends Task.Ops[T] with Applyable[Task, T]{
/**
* Evaluate this target
*/
- def evaluate(args: mill.util.Ctx): Result[T]
+ def evaluate(args: mill.api.Ctx): Result[T]
/**
* Even if this target's inputs did not change, does it need to re-evaluate
@@ -53,7 +53,7 @@ trait Target[+T] extends NamedTask[T]{
def readWrite: RW[_]
}
-object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Result, mill.util.Ctx] {
+object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Result, mill.api.Ctx] {
implicit def apply[T](t: T)
(implicit rw: RW[T],
@@ -64,7 +64,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
(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)
+ val lhs = Applicative.impl0[Task, T, mill.api.Ctx](c)(reify(Result.Success(t.splice)).tree)
mill.moduledefs.Cacher.impl0[TargetImpl[T]](c)(
reify(
@@ -85,7 +85,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
mill.moduledefs.Cacher.impl0[Target[T]](c)(
reify(
new TargetImpl[T](
- Applicative.impl0[Task, T, mill.util.Ctx](c)(t.tree).splice,
+ Applicative.impl0[Task, T, mill.api.Ctx](c)(t.tree).splice,
ctx.splice,
rw.splice
)
@@ -118,7 +118,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
import c.universe._
val wrapped =
for (value <- values.toList)
- yield Applicative.impl0[Task, PathRef, mill.util.Ctx](c)(
+ yield Applicative.impl0[Task, PathRef, mill.api.Ctx](c)(
reify(value.splice.map(PathRef(_))).tree
).tree
@@ -144,7 +144,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
mill.moduledefs.Cacher.impl0[Sources](c)(
reify(
new Sources(
- Applicative.impl0[Task, Seq[PathRef], mill.util.Ctx](c)(values.tree).splice,
+ Applicative.impl0[Task, Seq[PathRef], mill.api.Ctx](c)(values.tree).splice,
ctx.splice
)
)
@@ -163,7 +163,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
mill.moduledefs.Cacher.impl0[Input[T]](c)(
reify(
new Input[T](
- Applicative.impl[Task, T, mill.util.Ctx](c)(value).splice,
+ Applicative.impl[Task, T, mill.api.Ctx](c)(value).splice,
ctx.splice,
rw.splice
)
@@ -194,7 +194,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
import c.universe._
reify(
new Command[T](
- Applicative.impl[Task, T, mill.util.Ctx](c)(t).splice,
+ Applicative.impl[Task, T, mill.api.Ctx](c)(t).splice,
ctx.splice,
w.splice,
cls.splice.value,
@@ -214,11 +214,11 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
(ctx: c.Expr[mill.define.Ctx]): c.Expr[Worker[T]] = {
import c.universe._
reify(
- new Worker[T](Applicative.impl[Task, T, mill.util.Ctx](c)(t).splice, ctx.splice)
+ new Worker[T](Applicative.impl[Task, T, mill.api.Ctx](c)(t).splice, ctx.splice)
)
}
- def task[T](t: Result[T]): Task[T] = macro Applicative.impl[Task, T, mill.util.Ctx]
+ def task[T](t: Result[T]): Task[T] = macro Applicative.impl[Task, T, mill.api.Ctx]
def persistent[T](t: Result[T])(implicit rw: RW[T],
ctx: mill.define.Ctx): Persistent[T] = macro persistentImpl[T]
@@ -233,7 +233,7 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
mill.moduledefs.Cacher.impl0[Persistent[T]](c)(
reify(
new Persistent[T](
- Applicative.impl[Task, T, mill.util.Ctx](c)(t).splice,
+ Applicative.impl[Task, T, mill.api.Ctx](c)(t).splice,
ctx.splice,
rw.splice
)
@@ -242,20 +242,20 @@ object Target extends TargetGenerated with Applicative.Applyer[Task, Task, Resul
}
type TT[+X] = Task[X]
- def makeT[X](inputs0: Seq[TT[_]], evaluate0: mill.util.Ctx => Result[X]) = new Task[X] {
+ def makeT[X](inputs0: Seq[TT[_]], evaluate0: mill.api.Ctx => Result[X]) = new Task[X] {
val inputs = inputs0
- def evaluate(x: mill.util.Ctx) = evaluate0(x)
+ def evaluate(x: mill.api.Ctx) = evaluate0(x)
}
def underlying[A](v: Task[A]) = v
- def mapCtx[A, B](t: Task[A])(f: (A, mill.util.Ctx) => Result[B]) = t.mapDest(f)
+ def mapCtx[A, B](t: Task[A])(f: (A, mill.api.Ctx) => Result[B]) = t.mapDest(f)
def zip() = new Task.Task0(())
def zip[A](a: Task[A]) = a.map(Tuple1(_))
def zip[A, B](a: Task[A], b: Task[B]) = a.zip(b)
}
abstract class NamedTaskImpl[+T](ctx0: mill.define.Ctx, t: Task[T]) extends NamedTask[T]{
- def evaluate(args: mill.util.Ctx) = args[T](0)
+ def evaluate(args: mill.api.Ctx) = args[T](0)
val ctx = ctx0.copy(segments = ctx0.segments ++ Seq(ctx0.segment))
val inputs = Seq(t)
}
@@ -303,12 +303,12 @@ object Task {
class Task0[T](t: T) extends Task[T]{
lazy val t0 = t
val inputs = Nil
- def evaluate(args: mill.util.Ctx) = t0
+ def evaluate(args: mill.api.Ctx) = t0
}
abstract class Ops[+T]{ this: Task[T] =>
def map[V](f: T => V) = new Task.Mapped(this, f)
- def mapDest[V](f: (T, mill.util.Ctx) => Result[V]) = new Task.MappedDest(this, f)
+ def mapDest[V](f: (T, mill.api.Ctx) => Result[V]) = new Task.MappedDest(this, f)
def filter(f: T => Boolean) = this
def withFilter(f: T => Boolean) = this
@@ -323,22 +323,22 @@ object Task {
class Sequence[+T](inputs0: Seq[Task[T]]) extends Task[Seq[T]]{
val inputs = inputs0
- def evaluate(args: mill.util.Ctx) = {
+ def evaluate(args: mill.api.Ctx) = {
for (i <- 0 until args.length)
yield args(i).asInstanceOf[T]
}
}
class Mapped[+T, +V](source: Task[T], f: T => V) extends Task[V]{
- def evaluate(args: mill.util.Ctx) = f(args(0))
+ def evaluate(args: mill.api.Ctx) = f(args(0))
val inputs = List(source)
}
- class MappedDest[+T, +V](source: Task[T], f: (T, mill.util.Ctx) => Result[V]) extends Task[V]{
- def evaluate(args: mill.util.Ctx) = f(args(0), args)
+ class MappedDest[+T, +V](source: Task[T], f: (T, mill.api.Ctx) => Result[V]) extends Task[V]{
+ def evaluate(args: mill.api.Ctx) = f(args(0), args)
val inputs = List(source)
}
class Zipped[+T, +V](source1: Task[T], source2: Task[V]) extends Task[(T, V)]{
- def evaluate(args: mill.util.Ctx) = (args(0), args(1))
+ def evaluate(args: mill.api.Ctx) = (args(0), args(1))
val inputs = List(source1, source2)
}
}
diff --git a/main/core/src/mill/eval/Evaluator.scala b/main/core/src/mill/eval/Evaluator.scala
index 2aafdb7a..8709064e 100644
--- a/main/core/src/mill/eval/Evaluator.scala
+++ b/main/core/src/mill/eval/Evaluator.scala
@@ -7,7 +7,7 @@ import scala.collection.JavaConverters._
import mill.util.Router.EntryPoint
import ammonite.runtime.SpecialClassLoader
import mill.define.{Ctx => _, _}
-import mill.eval.Result.OuterStack
+import mill.api.Result.OuterStack
import mill.util
import mill.util._
import mill.util.Strict.Agg
diff --git a/main/core/src/mill/eval/PathRef.scala b/main/core/src/mill/eval/PathRef.scala
deleted file mode 100644
index 92ef8d24..00000000
--- a/main/core/src/mill/eval/PathRef.scala
+++ /dev/null
@@ -1,69 +0,0 @@
-package mill.eval
-
-import java.io.IOException
-import java.nio.file.attribute.BasicFileAttributes
-import java.nio.file.{FileVisitResult, FileVisitor}
-import java.nio.{file => jnio}
-import java.security.{DigestOutputStream, MessageDigest}
-
-import upickle.default.{ReadWriter => RW}
-import mill.util.{DummyOutputStream, IO, JsonFormatters}
-
-
-/**
- * A wrapper around `os.Path` that calculates it's hashcode based
- * on the contents of the filesystem underneath it. Used to ensure filesystem
- * changes can bust caches which are keyed off hashcodes.
- */
-case class PathRef(path: os.Path, quick: Boolean, sig: Int){
- override def hashCode() = sig
-}
-
-object PathRef{
- def apply(path: os.Path, quick: Boolean = false) = {
- val sig = {
- val digest = MessageDigest.getInstance("MD5")
- val digestOut = new DigestOutputStream(DummyOutputStream, digest)
- if (os.exists(path)){
- for((path, attrs) <- os.walk.attrs(path, includeTarget = true, followLinks = true)){
- digest.update(path.toString.getBytes)
- if (!attrs.isDir) {
- if (quick){
- val value = (attrs.mtime, attrs.size).hashCode()
- digest.update((value >>> 24).toByte)
- digest.update((value >>> 16).toByte)
- digest.update((value >>> 8).toByte)
- digest.update(value.toByte)
- } else if (jnio.Files.isReadable(path.toNIO)) {
- val is = os.read.inputStream(path)
- IO.stream(is, digestOut)
- is.close()
- }
- }
- }
- }
-
- java.util.Arrays.hashCode(digest.digest())
-
- }
- new PathRef(path, quick, sig)
- }
-
- implicit def jsonFormatter: RW[PathRef] = upickle.default.readwriter[String].bimap[PathRef](
- p => {
- (if (p.quick) "qref" else "ref") + ":" +
- String.format("%08x", p.sig: Integer) + ":" +
- p.path.toString()
- },
- s => {
- val Array(prefix, hex, path) = s.split(":", 3)
- PathRef(
- os.Path(path),
- prefix match{ case "qref" => true case "ref" => false},
- // Parsing to a long and casting to an int is the only way to make
- // round-trip handling of negative numbers work =(
- java.lang.Long.parseLong(hex, 16).toInt
- )
- }
- )
-}
diff --git a/main/core/src/mill/eval/Result.scala b/main/core/src/mill/eval/Result.scala
deleted file mode 100644
index d0400599..00000000
--- a/main/core/src/mill/eval/Result.scala
+++ /dev/null
@@ -1,36 +0,0 @@
-package mill.eval
-
-sealed trait Result[+T]{
- def map[V](f: T => V): Result[V]
- def asSuccess: Option[Result.Success[T]] = None
-}
-object Result{
- implicit def create[T](t: => T): Result[T] = {
- try Success(t)
- catch { case e: Throwable => Exception(e, new OuterStack(new java.lang.Exception().getStackTrace)) }
- }
- case class Success[+T](value: T) extends Result[T]{
- def map[V](f: T => V) = Result.Success(f(value))
- override def asSuccess = Some(this)
- }
- case object Skipped extends Result[Nothing]{
- def map[V](f: Nothing => V) = this
- }
- sealed trait Failing[+T] extends Result[T]{
- def map[V](f: T => V): Failing[V]
- }
- case class Failure[T](msg: String, value: Option[T] = None) extends Failing[T]{
- def map[V](f: T => V) = Result.Failure(msg, value.map(f(_)))
- }
- case class Exception(throwable: Throwable, outerStack: OuterStack) extends Failing[Nothing]{
- def map[V](f: Nothing => V) = this
- }
- class OuterStack(val value: Seq[StackTraceElement]){
- override def hashCode() = value.hashCode()
-
- override def equals(obj: scala.Any) = obj match{
- case o: OuterStack => value.equals(o.value)
- case _ => false
- }
- }
-} \ No newline at end of file
diff --git a/main/core/src/mill/eval/package.scala b/main/core/src/mill/eval/package.scala
new file mode 100644
index 00000000..433f9074
--- /dev/null
+++ b/main/core/src/mill/eval/package.scala
@@ -0,0 +1,12 @@
+package mill
+
+package object eval {
+ // Backwards compatibility forwarders
+ val Result = mill.api.Result
+ type Result[+T] = mill.api.Result[T]
+
+ val PathRef = mill.api.PathRef
+ type PathRef = mill.api.PathRef
+
+ type Logger = mill.api.Logger
+}
diff --git a/main/core/src/mill/util/ClassLoader.scala b/main/core/src/mill/util/ClassLoader.scala
deleted file mode 100644
index 07ab1ca9..00000000
--- a/main/core/src/mill/util/ClassLoader.scala
+++ /dev/null
@@ -1,62 +0,0 @@
-package mill.util
-
-import java.net.{URL, URLClassLoader}
-
-
-import io.github.retronym.java9rtexport.Export
-
-import scala.util.Try
-
-object ClassLoader {
- def create(urls: Seq[URL],
- parent: java.lang.ClassLoader)
- (implicit ctx: Ctx.Home): URLClassLoader = {
- create(urls, parent, _ => None)
- }
- def create(urls: Seq[URL],
- parent: java.lang.ClassLoader,
- customFindClass: String => Option[Class[_]])
- (implicit ctx: Ctx.Home): URLClassLoader = {
- new URLClassLoader(
- makeUrls(urls).toArray,
- refinePlatformParent(parent)
- ) {
- override def findClass(name: String): Class[_] = {
- if (name.startsWith("com.sun.jna")) getClass.getClassLoader.loadClass(name)
- else customFindClass(name).getOrElse(super.findClass(name))
- }
- }
- }
-
-
- /**
- * Return `ClassLoader.getPlatformClassLoader` for java 9 and above, if parent class loader is null,
- * otherwise return same parent class loader.
- * More details: https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-A868D0B9-026F-4D46-B979-901834343F9E
- *
- * `ClassLoader.getPlatformClassLoader` call is implemented via runtime reflection, cause otherwise
- * mill could be compiled only with jdk 9 or above. We don't want to introduce this restriction now.
- */
- private def refinePlatformParent(parent: java.lang.ClassLoader): ClassLoader = {
- if (!ammonite.util.Util.java9OrAbove || parent != null) parent
- else {
- // Make sure when `parent == null`, we only delegate java.* classes
- // to the parent getPlatformClassLoader. This is necessary because
- // in Java 9+, somehow the getPlatformClassLoader ends up with all
- // sorts of other non-java stuff on it's classpath, which is not what
- // we want for an "isolated" classloader!
- classOf[ClassLoader]
- .getMethod("getPlatformClassLoader")
- .invoke(null)
- .asInstanceOf[ClassLoader]
- }
- }
-
- private def makeUrls(urls: Seq[URL])(implicit ctx: Ctx.Home): Seq[URL] = {
- if (ammonite.util.Util.java9OrAbove) {
- urls :+ Export.rtAt(ctx.home.toIO).toURI.toURL
- } else {
- urls
- }
- }
-}
diff --git a/main/core/src/mill/util/Ctx.scala b/main/core/src/mill/util/Ctx.scala
deleted file mode 100644
index bbc243b7..00000000
--- a/main/core/src/mill/util/Ctx.scala
+++ /dev/null
@@ -1,55 +0,0 @@
-package mill.util
-
-import mill.define.Applicative.ImplicitStub
-
-import scala.annotation.compileTimeOnly
-import scala.language.implicitConversions
-
-object Ctx{
- @compileTimeOnly("Target.ctx() can only be used with a T{...} block")
- @ImplicitStub
- implicit def taskCtx: Ctx = ???
-
- object Dest {
- implicit def pathToCtx(path: os.Path): Dest = new Dest { def dest = path }
- }
- trait Dest{
- def dest: os.Path
- }
- trait Log{
- def log: Logger
- }
- trait Home{
- def home: os.Path
- }
- trait Env{
- def env: Map[String, String]
- }
- object Log{
- implicit def logToCtx(l: Logger): Log = new Log { def log = l }
- }
- trait Args{
- def args: IndexedSeq[_]
- }
-
- def defaultHome = ammonite.ops.home / ".mill" / "ammonite"
-
-}
-class Ctx(val args: IndexedSeq[_],
- dest0: () => os.Path,
- val log: Logger,
- val home: os.Path,
- val env : Map[String, String])
- extends Ctx.Dest
- with Ctx.Log
- with Ctx.Args
- with Ctx.Home
- with Ctx.Env {
-
- def dest = dest0()
- def length = args.length
- def apply[T](index: Int): T = {
- if (index >= 0 && index < args.length) args(index).asInstanceOf[T]
- else throw new IndexOutOfBoundsException(s"Index $index outside of range 0 - ${args.length}")
- }
-}
diff --git a/main/core/src/mill/util/IO.scala b/main/core/src/mill/util/IO.scala
deleted file mode 100644
index 833e52c7..00000000
--- a/main/core/src/mill/util/IO.scala
+++ /dev/null
@@ -1,32 +0,0 @@
-package mill.util
-
-import java.io.{InputStream, OutputStream}
-
-import scala.tools.nsc.interpreter.OutputStream
-
-/**
- * Misc IO utilities, eventually probably should be pushed upstream into
- * ammonite-ops
- */
-object IO {
- def stream(src: InputStream, dest: OutputStream) = {
- val buffer = new Array[Byte](4096)
- while ( {
- src.read(buffer) match {
- case -1 => false
- case n =>
- dest.write(buffer, 0, n)
- true
- }
- }) ()
- }
-}
-
-import java.io.{ByteArrayInputStream, OutputStream}
-
-object DummyInputStream extends ByteArrayInputStream(Array())
-object DummyOutputStream extends OutputStream{
- override def write(b: Int) = ()
- override def write(b: Array[Byte]) = ()
- override def write(b: Array[Byte], off: Int, len: Int) = ()
-}
diff --git a/main/core/src/mill/util/JsonFormatters.scala b/main/core/src/mill/util/JsonFormatters.scala
index dba599f7..830782c6 100644
--- a/main/core/src/mill/util/JsonFormatters.scala
+++ b/main/core/src/mill/util/JsonFormatters.scala
@@ -1,49 +1,10 @@
package mill.util
import upickle.default.{ReadWriter => RW}
-import scala.util.matching.Regex
-object JsonFormatters extends JsonFormatters
-trait JsonFormatters {
- implicit val pathReadWrite: RW[os.Path] = upickle.default.readwriter[String]
- .bimap[os.Path](
- _.toString,
- os.Path(_)
- )
-
- implicit val regexReadWrite: RW[Regex] = upickle.default.readwriter[String]
- .bimap[Regex](
- _.pattern.toString,
- _.r
- )
-
- implicit val bytesReadWrite: RW[os.Bytes] = upickle.default.readwriter[String]
- .bimap(
- o => java.util.Base64.getEncoder.encodeToString(o.array),
- str => new os.Bytes(java.util.Base64.getDecoder.decode(str))
- )
-
-
- implicit lazy val crFormat: RW[os.CommandResult] = upickle.default.macroRW
+trait JsonFormatters extends mill.api.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[ujson.Obj].bimap[StackTraceElement](
- ste => ujson.Obj(
- "declaringClass" -> ujson.Str(ste.getClassName),
- "methodName" -> ujson.Str(ste.getMethodName),
- "fileName" -> ujson.Str(ste.getFileName),
- "lineNumber" -> ujson.Num(ste.getLineNumber)
- ),
- {case json: ujson.Obj =>
- new StackTraceElement(
- json("declaringClass").str.toString,
- json("methodName").str.toString,
- json("fileName").str.toString,
- json("lineNumber").num.toInt
- )
- }
- )
-
-
}
+object JsonFormatters extends JsonFormatters
diff --git a/main/core/src/mill/util/Logger.scala b/main/core/src/mill/util/Loggers.scala
index 4857953d..aab1a324 100644
--- a/main/core/src/mill/util/Logger.scala
+++ b/main/core/src/mill/util/Loggers.scala
@@ -1,46 +1,7 @@
package mill.util
import java.io._
-
-import ammonite.util.Colors
-
-/**
- * The standard logging interface of the Mill build tool.
- *
- * Contains these primary logging methods, in order of increasing importance:
- *
- * - `debug` : internal debug messages normally not shown to the user;
- * mostly useful when debugging issues
- *
- * - `ticker`: short-lived logging output where consecutive lines over-write
- * each other; useful for information which is transient and disposable
- *
- * - `info`: miscellaneous logging output which isn't part of the main output
- * a user is looking for, but useful to provide context on what Mill is doing
- *
- * - `error`: logging output which represents problems the user should care
- * about
- *
- *
- * Also contains the two forwarded stdout and stderr streams, for code executed
- * by Mill to use directly. Typically these correspond to the stdout and stderr,
- * but when `show` is used both are forwarded to stderr and stdout is only
- * used to display the final `show` output for easy piping.
- */
-trait Logger {
- def colored: Boolean
-
- val errorStream: PrintStream
- val outputStream: PrintStream
- val inStream: InputStream
-
- def info(s: String): Unit
- def error(s: String): Unit
- def ticker(s: String): Unit
- def debug(s: String): Unit
-
- def close(): Unit = ()
-}
+import mill.api.Logger
object DummyLogger extends Logger {
def colored = false
@@ -160,7 +121,7 @@ case class FileLogger(colored: Boolean, file: os.Path, debugEnabled: Boolean) ex
def error(s: String) = outputStream.println(s)
def ticker(s: String) = outputStream.println(s)
def debug(s: String) = if (debugEnabled) outputStream.println(s)
- val inStream: InputStream = DummyInputStream
+ val inStream: InputStream = mill.api.DummyInputStream
override def close() = {
if (outputStreamUsed)
outputStream.close()
diff --git a/main/core/src/mill/util/Watched.scala b/main/core/src/mill/util/Watched.scala
index f1ef4fee..29be53c3 100644
--- a/main/core/src/mill/util/Watched.scala
+++ b/main/core/src/mill/util/Watched.scala
@@ -1,6 +1,6 @@
package mill.util
-import mill.eval.PathRef
+import mill.api.PathRef
case class Watched[T](value: T, watched: Seq[PathRef])
object Watched{
diff --git a/main/core/src/mill/util/package.scala b/main/core/src/mill/util/package.scala
new file mode 100644
index 00000000..ec5d2efc
--- /dev/null
+++ b/main/core/src/mill/util/package.scala
@@ -0,0 +1,7 @@
+package mill
+
+package object util {
+ // Backwards compat stubs
+ val Ctx = mill.api.Ctx
+ type Ctx = mill.api.Ctx
+}