pekko/project/ProjectFileIgnoreSupport.scala

89 lines
2.5 KiB
Scala

/*
* Copyright (C) 2019 Lightbend Inc. <https://www.lightbend.com>
*/
package akka
import java.io.File
import com.typesafe.config.ConfigFactory
import sbt.file
import sbt.internal.sbtscalafix.Compat
trait ProjectFileIgnoreSupport {
protected val stdoutLogger = Compat.ConsoleLogger(System.out)
protected def ignoreConfigFileName: String
protected def descriptor: String
lazy val ignoredFiles: Set[String] = {
import scala.collection.JavaConverters._
val config = ConfigFactory.parseFile(file(ignoreConfigFileName))
stdoutLogger.info(s"Loading ignored-files from $ignoreConfigFileName:[${config.origin().url().toURI.getPath}]")
config
.getStringList("ignored-files")
.asScala
.toSet
}
lazy val ignoredPackages: Set[String] = {
import scala.collection.JavaConverters._
val config = ConfigFactory.parseFile(file(ignoreConfigFileName))
stdoutLogger.info(s"Loading ignored-packages from $ignoreConfigFileName:[${config.origin().url().toURI.getPath}]")
config
.getStringList("ignored-packages")
.asScala
.toSet
}
protected def isIgnoredByFile(file: File): Boolean = {
val ignoredByFile = ignoredFiles(file.getName)
if (ignoredByFile) {
stdoutLogger.info(s"$descriptor ignored file with file name:${file.getName} file:[${file.toPath}]")
}
ignoredByFile
}
protected def isIgnoredByPackages(file: File): Boolean = {
val ignoredByPackages = ignoredPackages.exists(pkg => {
getPackageName(file.toURI.toString) match {
case Some(packageName) =>
val ignored = packageName.startsWith(pkg)
if (ignored) {
stdoutLogger.info(s"$descriptor ignored file with pkg:$pkg file:[${file.toPath}] ")
}
ignored
case None => false
}
})
ignoredByPackages
}
protected def isIgnoredByFileOrPackages(file: File): Boolean = {
isIgnoredByFile(file) || isIgnoredByPackages(file)
}
protected def getPackageName(fileName: String): Option[String] = {
def getPackageName0(fileType: String): String = {
import java.io.{File => JFile}
fileName.split(JFile.separatorChar)
.dropWhile(part part != fileType)
.drop(1)
.dropRight(1)
.mkString(".")
}
fileName.split('.').lastOption match {
case Some(fileType)
fileType match {
case "java"
Option(getPackageName0("java"))
case "scala"
Option(getPackageName0("scala"))
case _ None
}
case None None
}
}
}