Skip to content

Commit e875c9c

Browse files
joderskymkurz
authored andcommitted
Add support for multiple boilerplate source directories
1 parent b718678 commit e875c9c

File tree

3 files changed

+29
-20
lines changed

3 files changed

+29
-20
lines changed

src/main/scala-sbt-0.13/Compat.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ import sbt._
1010
import Keys._
1111

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

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

1818
def watchSourceSettings = Def.settings {
19-
Seq(watchSources in Defaults.ConfigGlobal ++= ((boilerplateSource.value ** inputFilter) --- (boilerplateSource.value ** excludeFilter.value ** inputFilter)).get)
19+
Seq(watchSources in Defaults.ConfigGlobal ++= ((boilerplateSourceDirectories.value ** inputFilter) --- (boilerplateSourceDirectories.value ** excludeFilter.value ** inputFilter)).get)
2020
}
2121
}

src/main/scala-sbt-1.0/Compat.scala

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,21 @@ import Keys._
1111
import sbt.internal.io.Source
1212

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

1717
def allPaths(f: File) = f.allPaths
1818

1919
def watchSourceSettings = Def.settings {
2020
Seq(
21-
watchSources in Defaults.ConfigGlobal +=
21+
watchSources in Defaults.ConfigGlobal ++= boilerplateSourceDirectories.value map { dir =>
2222
new Source(
23-
boilerplateSource.value,
23+
dir,
2424
new NameFilter {
2525
override def accept(name: String): Boolean = inputFilter.pattern.matcher(name).matches()
2626
},
2727
NothingFilter)
28+
}
2829
)
2930
}
3031
}

src/main/scala/spray/boilerplate/BoilerplatePlugin.scala

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ object BoilerplatePlugin extends AutoPlugin {
1818

1919
object autoImport {
2020
val boilerplateGenerate = taskKey[Seq[File]]("Generates boilerplate from template files")
21+
val boilerplateSourceDirectories = settingKey[Seq[File]]("Directories containing boilerplate template sources.")
22+
@deprecated("Use boilerplateSourceDirectories instead.", "0.7.0")
2123
val boilerplateSource = settingKey[File]("Default directory containing boilerplate template sources.")
2224
val boilerplateSignature = settingKey[String](
2325
"Function that creates signature string to prepend to the generated file (given an input file name). " +
@@ -34,27 +36,33 @@ object BoilerplatePlugin extends AutoPlugin {
3436
Compat.watchSourceSettings ++
3537
Seq(
3638
boilerplateSource := sourceDirectory.value / "boilerplate",
37-
boilerplateGenerate := generateFromTemplates(streams.value, boilerplateSignature.value, boilerplateSource.value, sourceManaged.value),
39+
boilerplateSourceDirectories := Seq(boilerplateSource.value),
40+
boilerplateGenerate :=
41+
generateFromTemplates(streams.value, boilerplateSignature.value, boilerplateSourceDirectories.value, sourceManaged.value),
3842
mappings in packageSrc ++= managedSources.value pair (Path.relativeTo(sourceManaged.value) | Path.flat),
3943
sourceGenerators += boilerplateGenerate)
4044
}
4145

42-
def generateFromTemplates(streams: TaskStreams, signature: String, sourceDir: File, targetDir: File): Seq[File] = {
43-
val files = sourceDir ** "*.template"
44-
streams.log.debug(s"Found ${files.get.size} template files in $sourceDir.")
45-
46-
def changeExtension(f: File): File = {
47-
val (_, name) = f.getName.reverse.span(_ != '.')
48-
val strippedName = name.drop(1).reverse.toString
49-
val newName =
50-
if (!strippedName.contains(".")) s"$strippedName.scala"
51-
else strippedName
52-
new File(f.getParent, newName)
46+
def generateFromTemplates(streams: TaskStreams, signature: String, sourceDirs: Seq[File], targetDir: File): Seq[File] = {
47+
def generate(sourceDir: File): Seq[(File, File)] = {
48+
val files = sourceDir ** "*.template"
49+
streams.log.debug(s"Found ${files.get.size} template files in $sourceDir.")
50+
51+
def changeExtension(f: File): File = {
52+
val (_, name) = f.getName.reverse.span(_ != '.')
53+
val strippedName = name.drop(1).reverse.toString
54+
val newName =
55+
if (!strippedName.contains(".")) s"$strippedName.scala"
56+
else strippedName
57+
new File(f.getParent, newName)
58+
}
59+
60+
(files pair Path.rebase(sourceDir, targetDir)).map {
61+
case (orig, target) (orig, changeExtension(target))
62+
}
5363
}
5464

55-
val mapping = (files pair Path.rebase(sourceDir, targetDir)).map {
56-
case (orig, target) (orig, changeExtension(target))
57-
}
65+
val mapping = sourceDirs.flatMap(generate)
5866

5967
val newFiles = mapping.map(_._2)
6068
clearTargetDir(streams, targetDir, signature, newFiles)

0 commit comments

Comments
 (0)