use current project's logLevel for command logging

This commit is contained in:
Mark Harrah 2011-06-10 23:40:25 -04:00
parent 36d2394208
commit be1bdbb350
3 changed files with 19 additions and 13 deletions

View File

@ -294,15 +294,21 @@ object BuiltinCommands
s s
} }
def lastGrep = Command(LastGrepCommand, lastGrepBrief, lastGrepDetailed)(lastGrepParser) { case (s,(pattern,sk)) => def lastGrep = Command(LastGrepCommand, lastGrepBrief, lastGrepDetailed)(lastGrepParser) { case (s,(pattern,sk)) =>
Output.lastGrep(sk, Project.structure(s).streams, pattern) val (str, ref) = extractLast(s)
Output.lastGrep(sk, str, pattern, ref)
s s
} }
def extractLast(s: State) = {
val ext = Project.extract(s)
(ext.structure.streams, Select(ext.currentRef))
}
def inspectParser = (s: State) => token((Space ~> ("actual" ^^^ true)) ?? false) ~ spacedKeyParser(s) def inspectParser = (s: State) => token((Space ~> ("actual" ^^^ true)) ?? false) ~ spacedKeyParser(s)
val spacedKeyParser = (s: State) => Act.requireSession(s, token(Space) ~> Act.scopedKeyParser(s)) val spacedKeyParser = (s: State) => Act.requireSession(s, token(Space) ~> Act.scopedKeyParser(s))
val optSpacedKeyParser = (s: State) => spacedKeyParser(s).? val optSpacedKeyParser = (s: State) => spacedKeyParser(s).?
def lastGrepParser(s: State) = Act.requireSession(s, (token(Space) ~> token(NotSpace, "<pattern>")) ~ optSpacedKeyParser(s)) def lastGrepParser(s: State) = Act.requireSession(s, (token(Space) ~> token(NotSpace, "<pattern>")) ~ optSpacedKeyParser(s))
def last = Command(LastCommand, lastBrief, lastDetailed)(optSpacedKeyParser) { (s,sk) => def last = Command(LastCommand, lastBrief, lastDetailed)(optSpacedKeyParser) { (s,sk) =>
Output.last(sk, Project.structure(s).streams) val (str, ref) = extractLast(s)
Output.last(sk, str, ref)
s s
} }

View File

@ -23,16 +23,16 @@ object Output
None None
} }
def last(key: Option[ScopedKey[_]], mgr: Streams): Unit = def last(key: Option[ScopedKey[_]], mgr: Streams, ref: ScopeAxis[ProjectRef]): Unit =
printLines(lastLines(key, mgr)) printLines(lastLines(key, mgr, ref))
def printLines(lines: Seq[String]) = lines foreach println def printLines(lines: Seq[String]) = lines foreach println
def lastGrep(key: Option[ScopedKey[_]], mgr: Streams, patternString: String) def lastGrep(key: Option[ScopedKey[_]], mgr: Streams, patternString: String, ref: ScopeAxis[ProjectRef])
{ {
val pattern = Pattern.compile(patternString) val pattern = Pattern.compile(patternString)
printLines(lastLines(key, mgr).flatMap(showMatches(pattern)) ) printLines(lastLines(key, mgr, ref).flatMap(showMatches(pattern)) )
} }
def lastLines(key: Option[ScopedKey[_]], mgr: Streams): Seq[String] = def lastLines(key: Option[ScopedKey[_]], mgr: Streams, ref: ScopeAxis[ProjectRef]): Seq[String] =
lastLines(key getOrElse Project.globalLoggerKey, mgr) lastLines(key getOrElse Project.globalLoggerKey(ref), mgr)
def lastLines(key: ScopedKey[_], mgr: Streams): Seq[String] = def lastLines(key: ScopedKey[_], mgr: Streams): Seq[String] =
mgr.use(key) { s => IO.readLines(s.readText( Project.fillTaskAxis(key) )) } mgr.use(key) { s => IO.readLines(s.readText( Project.fillTaskAxis(key) )) }
} }

View File

@ -143,8 +143,8 @@ object Project extends Init[Scope] with ProjectExtra
def updateCurrent(s0: State): State = def updateCurrent(s0: State): State =
{ {
val structure = Project.structure(s0) val structure = Project.structure(s0)
val s = installGlobalLogger(s0, structure) val ref = Project.current(s0)
val ref = Project.current(s) val s = installGlobalLogger(s0, structure, ref)
val project = Load.getProject(structure.units, ref.build, ref.project) val project = Load.getProject(structure.units, ref.build, ref.project)
logger(s).info("Set current project to " + ref.project + " (in build " + ref.build +")") logger(s).info("Set current project to " + ref.project + " (in build " + ref.build +")")
def get[T](k: SettingKey[T]): Option[T] = k in ref get structure.data def get[T](k: SettingKey[T]): Option[T] = k in ref get structure.data
@ -290,10 +290,10 @@ object Project extends Init[Scope] with ProjectExtra
val extracted = Project.extract(state) val extracted = Project.extract(state)
EvaluateTask.evaluateTask(extracted.structure, taskKey, state, extracted.currentRef, checkCycles, maxWorkers) EvaluateTask.evaluateTask(extracted.structure, taskKey, state, extracted.currentRef, checkCycles, maxWorkers)
} }
def globalLoggerKey = fillTaskAxis(ScopedKey(GlobalScope, streams.key)) def globalLoggerKey(ref: ScopeAxis[ResolvedReference]) = fillTaskAxis(ScopedKey(GlobalScope.copy(project = ref), streams.key))
def installGlobalLogger(s: State, structure: BuildStructure): State = def installGlobalLogger(s: State, structure: BuildStructure, ref: ProjectRef): State =
{ {
val str = structure.streams(globalLoggerKey) val str = structure.streams(globalLoggerKey(Select(ref)))
str.open() str.open()
s.put(logged, str.log).addExitHook { str.close() } s.put(logged, str.log).addExitHook { str.close() }
} }