Additional convenience methods on Project for configuring the .sbt files processed.

The Project.setSbtFiles and addSbtFiles methods combined with the current sbt version
available from ComponentMangaer.version (suggestions for a better location are welcome),
should make it straightforward to load different .sbt files based on the sbt version.

Fixes #467.
This commit is contained in:
Mark Harrah 2013-01-11 16:01:30 -05:00
parent 36a3203226
commit a48ee68d17
2 changed files with 31 additions and 0 deletions

View File

@ -34,5 +34,28 @@ object AddSettings
def seq(autos: AddSettings*): AddSettings = new Sequence(autos)
val allDefaults: AddSettings = seq(userSettings, allPlugins, defaultSbtFiles)
/** Combines two automatic setting configurations. */
def append(a: AddSettings, b: AddSettings): AddSettings = (a,b) match {
case (sa: Sequence, sb: Sequence) => seq(sa.sequence ++ sb.sequence : _*)
case (sa: Sequence, _) => seq(sa.sequence :+ b : _*)
case (_, sb: Sequence) => seq(a +: sb.sequence : _*)
case _ => seq(a,b)
}
def clearSbtFiles(a: AddSettings): AddSettings = tx(a) {
case _: DefaultSbtFiles | _: SbtFiles => None
case x => Some(x)
} getOrElse seq()
private[sbt] def tx(a: AddSettings)(f: AddSettings => Option[AddSettings]): Option[AddSettings] = a match {
case s: Sequence =>
s.sequence.flatMap { b => tx(b)(f) } match {
case Seq() => None
case Seq(x) => Some(x)
case ss => Some(new Sequence(ss))
}
case x => f(x)
}
}

View File

@ -107,6 +107,14 @@ sealed trait Project extends ProjectDefinition[ProjectReference]
/** Configures how settings from other sources, such as .sbt files, are appended to the explicitly specified settings for this project. */
def autoSettings(select: AddSettings*): Project = copy(auto = AddSettings.seq(select : _*))
/** Adds a list of .sbt files whose settings will be appended to the settings of this project.
* They will be appended after the explicit settings and already defined automatic settings sources. */
def addSbtFiles(files: File*): Project = copy(auto = AddSettings.append(auto, AddSettings.sbtFiles(files: _*)) )
/** Sets the list of .sbt files to parse for settings to be appended to this project's settings.
* Any configured .sbt files are removed from this project's list.*/
def setSbtFiles(files: File*): Project = copy(auto = AddSettings.append( AddSettings.clearSbtFiles(auto), AddSettings.sbtFiles(files: _*)) )
}
sealed trait ResolvedProject extends ProjectDefinition[ProjectRef]