Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/main/scala-sbt-0.13/Compat.scala
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ import sbt._
import Keys._

object Compat {
private val boilerplateSource = settingKey[File]("Default directory containing boilerplate template sources.")
private val boilerplateSourceDirectories = settingKey[Seq[File]]("Directories containing boilerplate template sources.")
private val inputFilter = "*.template"

def allPaths(f: File) = f.***

def watchSourceSettings = Def.settings {
Seq(watchSources in Defaults.ConfigGlobal ++= ((boilerplateSource.value ** inputFilter) --- (boilerplateSource.value ** excludeFilter.value ** inputFilter)).get)
Seq(watchSources in Defaults.ConfigGlobal ++= ((boilerplateSourceDirectories.value ** inputFilter) --- (boilerplateSourceDirectories.value ** excludeFilter.value ** inputFilter)).get)
}
}
7 changes: 4 additions & 3 deletions src/main/scala-sbt-1.0/Compat.scala
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,21 @@ import Keys._
import sbt.internal.io.Source

object Compat {
private val boilerplateSource = settingKey[File]("Default directory containing boilerplate template sources.")
private val boilerplateSourceDirectories = settingKey[Seq[File]]("Directories containing boilerplate template sources.")
private val inputFilter = """.*\.template""".r

def allPaths(f: File) = f.allPaths

def watchSourceSettings = Def.settings {
Seq(
watchSources in Defaults.ConfigGlobal +=
watchSources in Defaults.ConfigGlobal ++= boilerplateSourceDirectories.value map { dir =>
new Source(
boilerplateSource.value,
dir,
new NameFilter {
override def accept(name: String): Boolean = inputFilter.pattern.matcher(name).matches()
},
NothingFilter)
}
)
}
}
38 changes: 23 additions & 15 deletions src/main/scala/spray/boilerplate/BoilerplatePlugin.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ object BoilerplatePlugin extends AutoPlugin {

object autoImport {
val boilerplateGenerate = taskKey[Seq[File]]("Generates boilerplate from template files")
val boilerplateSourceDirectories = settingKey[Seq[File]]("Directories containing boilerplate template sources.")
@deprecated("Use boilerplateSourceDirectories instead.", "0.7.0")
val boilerplateSource = settingKey[File]("Default directory containing boilerplate template sources.")
val boilerplateSignature = settingKey[String](
"Function that creates signature string to prepend to the generated file (given an input file name). " +
Expand All @@ -34,27 +36,33 @@ object BoilerplatePlugin extends AutoPlugin {
Compat.watchSourceSettings ++
Seq(
boilerplateSource := sourceDirectory.value / "boilerplate",
boilerplateGenerate := generateFromTemplates(streams.value, boilerplateSignature.value, boilerplateSource.value, sourceManaged.value),
boilerplateSourceDirectories := Seq(boilerplateSource.value),
boilerplateGenerate :=
generateFromTemplates(streams.value, boilerplateSignature.value, boilerplateSourceDirectories.value, sourceManaged.value),
mappings in packageSrc ++= managedSources.value pair (Path.relativeTo(sourceManaged.value) | Path.flat),
sourceGenerators += boilerplateGenerate)
}

def generateFromTemplates(streams: TaskStreams, signature: String, sourceDir: File, targetDir: File): Seq[File] = {
val files = sourceDir ** "*.template"
streams.log.debug(s"Found ${files.get.size} template files in $sourceDir.")

def changeExtension(f: File): File = {
val (_, name) = f.getName.reverse.span(_ != '.')
val strippedName = name.drop(1).reverse.toString
val newName =
if (!strippedName.contains(".")) s"$strippedName.scala"
else strippedName
new File(f.getParent, newName)
def generateFromTemplates(streams: TaskStreams, signature: String, sourceDirs: Seq[File], targetDir: File): Seq[File] = {
def generate(sourceDir: File): Seq[(File, File)] = {
val files = sourceDir ** "*.template"
streams.log.debug(s"Found ${files.get.size} template files in $sourceDir.")

def changeExtension(f: File): File = {
val (_, name) = f.getName.reverse.span(_ != '.')
val strippedName = name.drop(1).reverse.toString
val newName =
if (!strippedName.contains(".")) s"$strippedName.scala"
else strippedName
new File(f.getParent, newName)
}

(files pair Path.rebase(sourceDir, targetDir)).map {
case (orig, target) ⇒ (orig, changeExtension(target))
}
}

val mapping = (files pair Path.rebase(sourceDir, targetDir)).map {
case (orig, target) ⇒ (orig, changeExtension(target))
}
val mapping = sourceDirs.flatMap(generate)

val newFiles = mapping.map(_._2)
clearTargetDir(streams, targetDir, signature, newFiles)
Expand Down