From 8f1768d6a8ec65bb1f4e128d7cbaa01fcf4fc012 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Sat, 4 Sep 2010 08:45:34 -0400 Subject: [PATCH] add Logger to Streams --- main/SingleProject.scala | 2 +- tasks/standard/Streams.scala | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/main/SingleProject.scala b/main/SingleProject.scala index 8c4ed5d13..2d72095ee 100644 --- a/main/SingleProject.scala +++ b/main/SingleProject.scala @@ -26,7 +26,7 @@ trait SingleProject extends Tasked with PrintTask with TaskExtra with Types val context = ReflectiveContext(this, (x: SingleProject) => Some("project")) // TODO: project names val dummies = new Transform.Dummies(In, State, Streams) def name(t: Task[_]): String = context.staticName(t) getOrElse std.Streams.name(t) - val injected = new Transform.Injected( input, state, std.Streams(t => streamBase / name(t)) ) + val injected = new Transform.Injected( input, state, std.Streams(t => streamBase / name(t), (t, writer) => ConsoleLogger() ) ) context.forName(input.name) map { t => (t.merge.map(_ => state), Transform(dummies, injected, context) ) } } diff --git a/tasks/standard/Streams.scala b/tasks/standard/Streams.scala index bb02aaf17..af9818581 100644 --- a/tasks/standard/Streams.scala +++ b/tasks/standard/Streams.scala @@ -29,8 +29,8 @@ sealed trait TaskStreams def binary(sid: String = default): BufferedOutputStream // default logger - /*val log: Logger - def log(sid: String): Logger*/ + final lazy val log: Logger = log(default) + def log(sid: String): Logger private[this] def getID(s: Option[String]) = s getOrElse default } @@ -48,13 +48,13 @@ object Streams { private[this] val closeQuietly = (_: Closeable).close() - def multi[Owner](bases: Owner => File, taskOwner: Task[_] => Option[Owner]): Streams = + def multi[Owner](bases: Owner => File, taskOwner: Task[_] => Option[Owner], mkLogger: (Task[_], PrintWriter) => Logger): Streams = { val taskDirectory = (t: Task[_]) => taskOwner(t) map bases getOrElse error("Cannot get streams for task '" + name(t) + "' with no owner.") - apply(taskDirectory) + apply(taskDirectory, mkLogger) } - def apply(taskDirectory: Task[_] => File): Streams = new Streams { streams => + def apply(taskDirectory: Task[_] => File, mkLogger: (Task[_], PrintWriter) => Logger): Streams = new Streams { streams => def apply(a: Task[_], update: Boolean): ManagedTaskStreams = new ManagedTaskStreams { private[this] var opened: List[Closeable] = Nil @@ -72,6 +72,8 @@ object Streams def binary(sid: String = default): BufferedOutputStream = make(a, sid)(f => new BufferedOutputStream(new FileOutputStream(f))) + def log(sid: String): Logger = mkLogger(a, text(sid)) + def make[T <: Closeable](a: Task[_], sid: String)(f: File => T): T = synchronized { checkOpen() val file = taskDirectory(a) / sid