Permalink
Browse files

inject 'log' method to State as convenience for CommandSupport.logger

  • Loading branch information...
1 parent ed4935f commit ddd70fcc7706eea45e929fda856947e335f58cc8 @harrah committed Oct 16, 2011
View
@@ -3,7 +3,6 @@
*/
package sbt
- import CommandSupport.logger
import Project.ScopedKey
import Load.BuildStructure
import Keys.{aggregate, showSuccess, showTiming, timingFormat}
@@ -83,7 +82,7 @@ final object Aggregation
val start = System.currentTimeMillis
val (newS, result) = withStreams(structure){ str => runTask(toRun, s,str, structure.index.triggers, maxWorkers = workers)(nodeView(s, str, extra.tasks, extra.values)) }
val stop = System.currentTimeMillis
- val log = logger(newS)
+ val log = newS.log
val success = result match { case Value(_) => true; case Inc(_) => false }
try { onResult(result, log) { results => if(show) printSettings(results, log) } }
@@ -148,7 +147,7 @@ final object Aggregation
case xs @ KeyValue(_, _: InputStatic[t]) :: _ => applyTasks(s, structure, maps(xs.asInstanceOf[Values[InputStatic[t]]])(_.parser(s)), show)
case xs @ KeyValue(_, _: InputDynamic[t]) :: _ => applyDynamicTasks(s, structure, xs.asInstanceOf[Values[InputDynamic[t]]], show)
case xs @ KeyValue(_, _: Task[t]) :: _ => applyTasks(s, structure, maps(xs.asInstanceOf[Values[Task[t]]])(x => success(x)), show)
- case xs => success(() => { printSettings(xs, logger(s)); s} )
+ case xs => success(() => { printSettings(xs, s.log); s} )
}
private[this] def maps[T, S](vs: Values[T])(f: T => S): Values[S] =
vs map { case KeyValue(k,v) => KeyValue(k, f(v)) }
View
@@ -5,7 +5,6 @@ package sbt
import java.io.File
import complete.{DefaultParsers, EditDistance, Parser}
- import CommandSupport.logger
sealed trait Command {
def help: Seq[Help]
@@ -92,7 +91,7 @@ object Command
case Left(failures) =>
val (msgs,pos) = failures()
val errMsg = commandError(command, msgs, pos)
- logger(state).error(errMsg)
+ state.log.error(errMsg)
state.fail
}
}
View
@@ -42,7 +42,7 @@ object GlobalPlugin
val p: Scope = Scope.GlobalScope in ProjectRef(root, rootProject(root))
val taskInit = (projectID, projectDependencies, projectDescriptors, resolvers, fullClasspath in Runtime, internalDependencyClasspath in Runtime, exportedProducts in Runtime, ivyModule) map {
(pid, pdeps, pdescs, rs, cp, intcp, prods, mod) =>
- val depMap = pdescs + mod.dependencyMapping(log(state))
+ val depMap = pdescs + mod.dependencyMapping(state.log)
GlobalPluginData(pid, pdeps, depMap, rs, cp, prods ++ intcp)
}
val task = taskInit mapReferenced Project.mapScope(Scope replaceThis p) evaluate data
@@ -54,10 +54,9 @@ object GlobalPlugin
withStreams(structure) { str =>
val nv = nodeView(state, str)
val (newS, result) = runTask(t, state, str, structure.index.triggers)(nv)
- (newS, processResult(result, log(newS)))
+ (newS, processResult(result, newS.log))
}
}
- private[this] def log(s: State) = CommandSupport.logger(s)
val globalPluginSettings = inScope(Scope.GlobalScope in LocalRootProject)(Seq(
organization := "org.scala-tools.sbt",
onLoadMessage <<= Keys.baseDirectory("Loading global plugins from " + _),
View
@@ -13,11 +13,11 @@ object IvyConsole
final val Name = "ivy-console"
lazy val command =
Command.command(Name) { state =>
- val Dependencies(managed, repos, unmanaged) = parseDependencies(state.remainingCommands, CommandSupport.logger(state))
+ val Dependencies(managed, repos, unmanaged) = parseDependencies(state.remainingCommands, state.log)
val base = new File(CommandSupport.bootDirectory(state), Name)
IO.createDirectory(base)
- val (eval, structure) = Load.defaultLoad(state, base, CommandSupport.logger(state))
+ val (eval, structure) = Load.defaultLoad(state, base, state.log)
val session = Load.initialSession(structure, eval)
val extracted = Project.extract(session, structure)
import extracted._
View
@@ -310,7 +310,7 @@ object BuiltinCommands
def history = Command.custom(historyParser, historyHelp)
def historyParser(s: State): Parser[() => State] =
Command.applyEffect(HistoryCommands.actionParser) { histFun =>
- val logError = (msg: String) => CommandSupport.logger(s).error(msg)
+ val logError = (msg: String) => s.log.error(msg)
val hp = s get historyPath.key getOrElse None
val lines = hp.toList.flatMap( p => IO.readLines(p) ).toIndexedSeq
histFun( complete.History(lines, hp, logError) ) match
View
@@ -9,7 +9,6 @@ package sbt
import Keys.{appConfiguration, stateBuildStructure, commands, configuration, historyPath, projectCommand, sessionSettings, sessionVars, shellPrompt, thisProject, thisProjectRef, watch}
import Scope.{GlobalScope,ThisScope}
import Load.BuildStructure
- import CommandSupport.logger
import Types.{idFun, Id}
sealed trait ProjectDefinition[PR <: ProjectReference]
@@ -79,7 +78,7 @@ final case class Extracted(structure: BuildStructure, session: SessionSettings,
val rkey = Project.mapScope(Scope.resolveScope(GlobalScope, currentRef.build, rootProject) )( key.scopedKey )
val value: Option[(State, Result[T])] = apply(structure, key.task.scopedKey, state, currentRef)
val (newS, result) = getOrError(rkey.scope, rkey.key, value)
- (newS, processResult(result, logger(newS)))
+ (newS, processResult(result, newS.log))
}
private def getOrError[T](scope: Scope, key: AttributeKey[_], value: Option[T])(implicit display: Show[ScopedKey[_]]): T =
value getOrElse error(display(ScopedKey(scope, key)) + " is undefined.")
@@ -179,7 +178,7 @@ object Project extends Init[Scope] with ProjectExtra
val ref = Project.current(s)
val project = Load.getProject(structure.units, ref.build, ref.project)
val msg = Keys.onLoadMessage in ref get structure.data getOrElse ""
- if(!msg.isEmpty) logger(s).info(msg)
+ if(!msg.isEmpty) s.log.info(msg)
def get[T](k: SettingKey[T]): Option[T] = k in ref get structure.data
def commandsIn(axis: ResolvedReference) = commands in axis get structure.data toList ;
@@ -6,7 +6,6 @@ package sbt
import ProjectNavigation._
import Project.updateCurrent
import Keys.sessionSettings
- import CommandSupport.logger
import complete.{DefaultParsers, Parser}
import DefaultParsers._
import java.net.URI
@@ -39,7 +38,7 @@ final class ProjectNavigation(s: State)
if(to.length > 1) gotoParent(to.length - 1, nav, s) else s */ // semantics currently undefined
}
- def show(): Unit = logger(s).info(currentRef.project + " (in build " + currentRef.build + ")")
+ def show(): Unit = s.log.info(currentRef.project + " (in build " + currentRef.build + ")")
def selectProject(uri: URI, to: String): State =
if( structure.units(uri).defined.contains(to) )
setProject(uri, to)
@@ -54,7 +53,7 @@ final class ProjectNavigation(s: State)
def fail(msg: String): State =
{
- logger(s).error(msg)
+ s.log.error(msg)
s.fail
}
View
@@ -19,7 +19,7 @@ object Script
val base = new File(CommandSupport.bootDirectory(state), hash)
IO.createDirectory(base)
- val (eval, structure) = Load.defaultLoad(state, base, CommandSupport.logger(state))
+ val (eval, structure) = Load.defaultLoad(state, base, state.log)
val session = Load.initialSession(structure, eval)
val extracted = Project.extract(session, structure)
import extracted._
@@ -7,7 +7,6 @@ package sbt
import java.net.URI
import Project._
import Types.Endo
- import CommandSupport.logger
import compiler.Eval
import SessionSettings._
@@ -47,7 +46,7 @@ object SessionSettings
import extracted._
if(session.append.isEmpty)
{
- logger(s).info("No session settings defined.")
+ s.log.info("No session settings defined.")
s
}
else
@@ -59,7 +58,7 @@ object SessionSettings
{
val oldSettings = (oldState get Keys.sessionSettings).toList.flatMap(_.append).flatMap(_._2)
if(newSession.append.isEmpty && !oldSettings.isEmpty)
- logger(oldState).warn("Discarding " + pluralize(oldSettings.size, " session setting") + ". Use 'session save' to persist session settings.")
+ oldState.log.warn("Discarding " + pluralize(oldSettings.size, " session setting") + ". Use 'session save' to persist session settings.")
}
def removeRanges[T](in: Seq[T], ranges: Seq[(Int,Int)]): Seq[T] =
{
View
@@ -5,7 +5,7 @@ package sbt
import java.io.File
import java.util.concurrent.Callable
- import CommandSupport.FailureWall
+ import CommandSupport.{FailureWall, logger}
final case class State(
configuration: xsbti.AppConfiguration,
@@ -43,6 +43,7 @@ trait StateOps {
def update[T](key: AttributeKey[T])(f: Option[T] => T): State
def has(key: AttributeKey[_]): Boolean
def baseDir: File
+ def log: Logger
def locked[T](file: File)(t: => T): T
def runExitHooks(): State
def addExitHook(f: => Unit): State
@@ -77,6 +78,7 @@ object State
def update[T](key: AttributeKey[T])(f: Option[T] => T): State = put(key, f(get(key)))
def has(key: AttributeKey[_]) = s.attributes contains key
def remove(key: AttributeKey[_]) = s.copy(attributes = s.attributes remove key)
+ def log = CommandSupport.logger(s)
def fail =
{
val remaining = s.remainingCommands.dropWhile(_ != FailureWall)
View
@@ -143,7 +143,7 @@ object Scoped
}
final class RichInitialize[S](init: Initialize[S])
{
- @deprecated("A call to 'identity' is no longer necessary and can be removed.")
+ @deprecated("A call to 'identity' is no longer necessary and can be removed.", "0.11.0")
final def identity: Initialize[S] = init
def map[T](f: S => T): Initialize[Task[T]] = init(s => mktask(f(s)) )
def flatMap[T](f: S => Task[T]): Initialize[Task[T]] = init(f)
@@ -162,7 +162,7 @@ object Scoped
def task: SettingKey[Task[S]] = scopedSetting(scope, key)
def get(settings: Settings[Scope]): Option[Task[S]] = settings.get(scope, key)
- @deprecated("A call to 'identity' is no longer necessary and can be removed.")
+ @deprecated("A call to 'identity' is no longer necessary and can be removed.", "0.11.0")
def identity: Initialize[Task[S]] = this
def ? : Initialize[Task[Option[S]]] = Project.optional(scopedKey) { case None => mktask { None }; case Some(t) => t map some.fn }
View
@@ -61,7 +61,7 @@ object Watched
(triggered, newWatchState, s)
}
catch { case e: Exception =>
- val log = CommandSupport.logger(s)
+ val log = s.log
log.error("Error occurred obtaining files to watch. Terminating continuous execution...")
BuiltinCommands.handleException(e, s, log)
(false, watchState, s.fail)

0 comments on commit ddd70fc

Please sign in to comment.