in project/Protobuf.scala [139:168]
private def transformDirectory(
sourceDir: File,
targetDir: File,
transformable: File => Boolean,
transform: (File, File) => Unit,
cache: File,
log: Logger): File = {
val runTransform = FileFunction.cached(CacheStoreFactory(cache), FilesInfo.hash, FilesInfo.exists) {
(in: ChangeReport[File], out: ChangeReport[File]) =>
val map = Path.rebase(sourceDir, targetDir)
if (in.removed.nonEmpty || in.modified.nonEmpty) {
log.info("Preprocessing directory %s...".format(sourceDir))
for (source <- in.removed; target <- map(source)) {
IO.delete(target)
}
val updated = for (source <- in.modified; target <- map(source)) yield {
if (source.isFile) {
if (transformable(source)) transform(source, target)
else IO.copyFile(source, target)
}
target
}
log.info("Directory preprocessed: " + targetDir)
updated
} else Set.empty
}
val sources = sourceDir.allPaths.get.toSet
runTransform(sources)
targetDir
}