aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala
diff options
context:
space:
mode:
authorJohannes Rudolph <johannes_rudolph@gmx.de>2012-10-10 12:29:01 +0200
committerJohannes Rudolph <johannes_rudolph@gmx.de>2012-10-10 12:29:01 +0200
commit3fb580276af6bc12861de42c0115c04549c98177 (patch)
treeac358d8d558474c965020572196897e3a3e37b98 /src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala
parent7ccabd803ca26cde46c970c7fea45d59b7c54b3d (diff)
downloadsbt-boilerplate-3fb580276af6bc12861de42c0115c04549c98177.tar.gz
sbt-boilerplate-3fb580276af6bc12861de42c0115c04549c98177.tar.bz2
sbt-boilerplate-3fb580276af6bc12861de42c0115c04549c98177.zip
simplified syntax and provide a proper parser
Diffstat (limited to 'src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala')
-rw-r--r--src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala b/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala
index 0d8b9c3..df50691 100644
--- a/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala
+++ b/src/main/scala/cc/spray/boilerplate/BoilerplatePlugin.scala
@@ -12,7 +12,7 @@ object BoilerplatePlugin extends Plugin {
target in boilerplateGenerate <<= (sourceManaged in Compile),
- boilerplateGenerate <<= (streams, sourceDirectory in boilerplateGenerate, target in boilerplateGenerate) map Generator.generateFromTemplates,
+ boilerplateGenerate <<= (streams, sourceDirectory in boilerplateGenerate, target in boilerplateGenerate) map generateFromTemplates,
(sourceGenerators in Compile) <+= boilerplateGenerate,
(managedSourceDirectories in Compile) <+= target in boilerplateGenerate,
@@ -33,5 +33,30 @@ object BoilerplatePlugin extends Plugin {
watchSources <++= (sourceDirKey, filterKey, excludeKey) map descendents
def descendents(sourceDir: File, filt: FileFilter, excl: FileFilter) =
sourceDir.descendantsExcept(filt, excl).get
+
+ def generateFromTemplates(streams: TaskStreams, sourceDir: File, targetDir: File): Seq[File] = {
+ val files = sourceDir ** "*.template"
+
+ def changeExtension(f: File): File = {
+ val (ext, name) = f.getName.reverse.span(_ != '.')
+ new File(f.getParent, name.drop(1).reverse.toString)
+ }
+
+ val mapping = (files x rebase(sourceDir, targetDir)).map {
+ case (orig, target) => (orig, changeExtension(target))
+ }
+
+ mapping foreach {
+ case (templateFile, target) =>
+ if (templateFile.lastModified > target.lastModified) {
+ streams.log.info("Generating '%s'" format target.getName)
+ val template = IO.read(templateFile)
+ IO.write(target, Generator.generateFromTemplate(template, 22))
+ } else
+ streams.log.debug("Template '%s' older than target. Ignoring." format templateFile.getName)
+ }
+
+ mapping.map(_._2)
+ }
}
}