Include projects without defined settings in KeyIndex.

This commit is contained in:
Mark Harrah 2013-06-28 00:01:19 -04:00
parent 9f75ab31cc
commit ca9f32c7d1
3 changed files with 21 additions and 10 deletions

View File

@ -11,10 +11,19 @@ package sbt
object KeyIndex
{
def empty: ExtendableKeyIndex = new KeyIndex0(emptyBuildIndex)
def apply(known: Iterable[ScopedKey[_]]): ExtendableKeyIndex =
(empty /: known) { _ add _ }
def aggregate(known: Iterable[ScopedKey[_]], extra: BuildUtil[_]): ExtendableKeyIndex =
(empty /: known) { (index, key) => index.addAggregated(key, extra) }
def apply(known: Iterable[ScopedKey[_]], projects: Map[URI, Set[String]]): ExtendableKeyIndex =
(base(projects) /: known) { _ add _ }
def aggregate(known: Iterable[ScopedKey[_]], extra: BuildUtil[_], projects: Map[URI, Set[String]]): ExtendableKeyIndex =
(base(projects) /: known) { (index, key) => index.addAggregated(key, extra) }
private[this] def base(projects: Map[URI, Set[String]]): ExtendableKeyIndex =
{
val data = for( (uri, ids) <- projects) yield {
val data = ids.map(id => Option(id) -> new ConfigIndex(Map.empty))
Option(uri) -> new ProjectIndex(data.toMap)
}
new KeyIndex0(new BuildIndex(data.toMap))
}
def combine(indices: Seq[KeyIndex]): KeyIndex = new KeyIndex {
def buildURIs = concat(_.buildURIs)

View File

@ -140,7 +140,7 @@ object Load
val delegates = config.delegates(loaded)
val data = Def.make(settings)(delegates, config.scopeLocal, Project.showLoadingKey( loaded ) )
Project.checkTargets(data) foreach error
val index = structureIndex(data, settings, loaded.extra(data))
val index = structureIndex(data, settings, loaded.extra(data), projects)
val streams = mkStreams(projects, loaded.root, data)
(rootEval, new sbt.BuildStructure(projects, loaded.root, settings, data, index, streams, delegates, config.scopeLocal))
}
@ -174,13 +174,14 @@ object Load
def setDefinitionKey[T](tk: Task[T], key: ScopedKey[_]): Task[T] =
if(isDummy(tk)) tk else Task(tk.info.set(Keys.taskDefinitionKey, key), tk.work)
def structureIndex(data: Settings[Scope], settings: Seq[Setting[_]], extra: KeyIndex => BuildUtil[_]): sbt.StructureIndex =
def structureIndex(data: Settings[Scope], settings: Seq[Setting[_]], extra: KeyIndex => BuildUtil[_], projects: Map[URI, LoadedBuildUnit]): sbt.StructureIndex =
{
val keys = Index.allKeys(settings)
val attributeKeys = Index.attributeKeys(data) ++ keys.map(_.key)
val scopedKeys = keys ++ data.allKeys( (s,k) => ScopedKey(s,k))
val keyIndex = KeyIndex(scopedKeys)
val aggIndex = KeyIndex.aggregate(scopedKeys, extra(keyIndex))
val projectsMap = projects.mapValues(_.defined.keySet)
val keyIndex = KeyIndex(scopedKeys, projectsMap)
val aggIndex = KeyIndex.aggregate(scopedKeys, extra(keyIndex), projectsMap)
new sbt.StructureIndex(Index.stringToKeyMap(attributeKeys), Index.taskToKeyMap(data), Index.triggers(data), keyIndex, aggIndex)
}
@ -189,7 +190,7 @@ object Load
{
val transformed = finalTransforms(newSettings)
val newData = makeSettings(transformed, structure.delegates, structure.scopeLocal)
val newIndex = structureIndex(newData, transformed, index => BuildUtil(structure.root, structure.units, index, newData))
val newIndex = structureIndex(newData, transformed, index => BuildUtil(structure.root, structure.units, index, newData), structure.units)
val newStreams = mkStreams(structure.units, structure.root, newData)
new sbt.BuildStructure(units = structure.units, root = structure.root, settings = transformed, data = newData, index = newIndex, streams = newStreams, delegates = structure.delegates, scopeLocal = structure.scopeLocal)
}

View File

@ -188,7 +188,8 @@ object TestBuild
val data = Def.make(settings)(env.delegates, const(Nil), display)
val keys = data.allKeys( (s, key) => ScopedKey(s, key))
val keyMap = keys.map(k => (k.key.label, k.key)).toMap[String, AttributeKey[_]]
new Structure(env, current, data, KeyIndex(keys), keyMap)
val projectsMap = env.builds.map(b => (b.uri, b.projects.map(_.id).toSet)).toMap
new Structure(env, current, data, KeyIndex(keys, projectsMap), keyMap)
}
implicit lazy val mkEnv: Gen[Env] =