diff --git a/main/src/main/scala/sbt/Defaults.scala b/main/src/main/scala/sbt/Defaults.scala index b593c05ae..5427f4f04 100755 --- a/main/src/main/scala/sbt/Defaults.scala +++ b/main/src/main/scala/sbt/Defaults.scala @@ -1242,15 +1242,12 @@ object Defaults extends BuildCommon { } def collectFiles( dirs: ScopedTaskable[Seq[File]], - include: ScopedTaskable[FileFilter], - exclude: ScopedTaskable[FileFilter] - ): Initialize[Task[Seq[File]]] = Def.task { - val filter = include.toTask.value -- exclude.toTask.value - val view = fileTreeView.value - view.list(dirs.toTask.value.map(f => Globs(f.toPath, recursive = true, filter))).collect { - case (p, a) if !a.isDirectory => p.toFile + filter: ScopedTaskable[FileFilter], + excludes: ScopedTaskable[FileFilter] + ): Initialize[Task[Seq[File]]] = + Def.task { + dirs.toTask.value.descendantsExcept(filter.toTask.value, excludes.toTask.value).get } - } def artifactPathSetting(art: SettingKey[Artifact]): Initialize[File] = Def.setting { val f = artifactName.value diff --git a/sbt/src/sbt-test/plugins/twirl/build.sbt b/sbt/src/sbt-test/plugins/twirl/build.sbt new file mode 100644 index 000000000..bee7bb4cf --- /dev/null +++ b/sbt/src/sbt-test/plugins/twirl/build.sbt @@ -0,0 +1,12 @@ + +lazy val check = taskKey[Unit]("") + +lazy val root = (project in file(".")) + .enablePlugins(TwirlPlugin) + .settings( + check := { + val templates = (Compile / twirlCompileTemplates / sources).value + assert(templates.nonEmpty) + assert(!templates.exists(_.toString.contains("hidden"))) + } + ) diff --git a/sbt/src/sbt-test/plugins/twirl/project/TwirlPlugin.scala b/sbt/src/sbt-test/plugins/twirl/project/TwirlPlugin.scala new file mode 100644 index 000000000..5911cdfcc --- /dev/null +++ b/sbt/src/sbt-test/plugins/twirl/project/TwirlPlugin.scala @@ -0,0 +1,29 @@ +import sbt._ +import Keys._ + +object TwirlPlugin extends AutoPlugin { + override def requires = sbt.plugins.JvmPlugin + override def trigger = noTrigger + + object autoImport { + val twirlCompileTemplates = taskKey[Seq[File]]("Compile twirl templates into scala source files") + } + + override def projectSettings: Seq[Setting[_]] = + inConfig(Compile)(twirlSettings) ++ + inConfig(Test)(twirlSettings) + + import autoImport._ + + def twirlSettings: Seq[Setting[_]] = Seq( + twirlCompileTemplates / includeFilter := "*.scala.*", + twirlCompileTemplates / excludeFilter := HiddenFileFilter, + twirlCompileTemplates / sourceDirectories := Seq(sourceDirectory.value / "twirl"), + + twirlCompileTemplates / sources := Defaults.collectFiles( + twirlCompileTemplates / sourceDirectories, + twirlCompileTemplates / includeFilter, + twirlCompileTemplates / excludeFilter + ).value + ) +} diff --git a/sbt/src/sbt-test/plugins/twirl/src/main/twirl/.hidden/fake.scala.twirl b/sbt/src/sbt-test/plugins/twirl/src/main/twirl/.hidden/fake.scala.twirl new file mode 100644 index 000000000..e69de29bb diff --git a/sbt/src/sbt-test/plugins/twirl/src/main/twirl/play/routes/forwardsRouter.scala.twirl b/sbt/src/sbt-test/plugins/twirl/src/main/twirl/play/routes/forwardsRouter.scala.twirl new file mode 100644 index 000000000..8db5bd943 --- /dev/null +++ b/sbt/src/sbt-test/plugins/twirl/src/main/twirl/play/routes/forwardsRouter.scala.twirl @@ -0,0 +1,3 @@ +@import play.routes.compiler._ +@import play.routes.compiler.templates._ +@import InjectedRoutesGenerator.Dependency diff --git a/sbt/src/sbt-test/plugins/twirl/test b/sbt/src/sbt-test/plugins/twirl/test new file mode 100644 index 000000000..15675b169 --- /dev/null +++ b/sbt/src/sbt-test/plugins/twirl/test @@ -0,0 +1 @@ +> check