mirror of https://github.com/sbt/sbt.git
46 lines
1.6 KiB
Scala
46 lines
1.6 KiB
Scala
package xsbt
|
|
|
|
import java.io.File
|
|
|
|
object Paths
|
|
{
|
|
implicit def stringToPath(s: String): Path = new Path(new File(s))
|
|
implicit def fileToPath(f: File): Path = new Path(f)
|
|
implicit def pathToFile(p: Path): File = p.asFile
|
|
implicit def filesToPaths(fs: Set[File]): Paths = new Paths(fs)
|
|
implicit def filesToPaths(fs: Iterable[File]): Paths =
|
|
fs match
|
|
{
|
|
case s: Set[File] => filesToPaths(s)
|
|
case _ => new Paths(Set(fs.toSeq : _*))
|
|
}
|
|
def normalize(path: String): String = path.replace('/', File.separatorChar).replace('\\', File.separatorChar)
|
|
}
|
|
|
|
import Paths._
|
|
trait PathBase extends NotNull
|
|
{
|
|
def files: Set[File]
|
|
def x(mapper: PathMapper): Iterable[(File,String)] = mapper(files)
|
|
def x(mapper: FileMapper): Iterable[(File,File)] = mapper(files)
|
|
def *(filter: java.io.FileFilter): Set[File] = files.flatMap(FileUtilities.listFiles(filter))
|
|
def **(filter: java.io.FileFilter): Set[File] = files.filter(filter.accept) ++ files.flatMap(_ * AllPassFilter ** filter)
|
|
def *** = **(AllPassFilter)
|
|
def abs = files.map(_.getAbsoluteFile)
|
|
def descendentsExcept(include: java.io.FileFilter, intermediateExclude: java.io.FileFilter): Set[File] =
|
|
(this ** include) -- (this ** intermediateExclude ** include)
|
|
}
|
|
|
|
final class Paths(val files: Set[File]) extends PathBase
|
|
{
|
|
def \(subPath: String) = /(subPath)
|
|
def /(subPath: String): Set[File] = files.flatMap(FileUtilities.listFiles)
|
|
}
|
|
final class Path(val asFile: File) extends PathBase
|
|
{
|
|
def files = Set(asFile)
|
|
def \(subPath: String) = /(subPath)
|
|
def /(subPath: String) = new File(asFile, normalize(subPath))
|
|
def ++(files: Set[File]) = files + asFile
|
|
def ++(file: File) = Set(file, asFile)
|
|
} |