aboutsummaryrefslogtreecommitdiff
path: root/stage1/cbt.scala
diff options
context:
space:
mode:
Diffstat (limited to 'stage1/cbt.scala')
-rw-r--r--stage1/cbt.scala32
1 files changed, 32 insertions, 0 deletions
diff --git a/stage1/cbt.scala b/stage1/cbt.scala
index 4caa085..bc0e944 100644
--- a/stage1/cbt.scala
+++ b/stage1/cbt.scala
@@ -28,6 +28,28 @@ object `package`{
def /(s: String): File = new File( file, s )
def parent = lib.realpath(file ++ "/..")
def string = file.toString
+ /* recursively deletes folders*/
+ def deleteRecursive: Unit = {
+ val s = file.string
+ // some desperate attempts to keep people from accidentally deleting their hard drive
+ assert( file == file.getCanonicalFile, "deleteRecursive requires previous .getCanonicalFile" )
+ assert( file.isAbsolute, "deleteRecursive requires absolute path" )
+ assert( file.string != "", "deleteRecursive requires non-empty file path" )
+ assert( s.split("/").size > 4, "deleteRecursive requires absolute path of at least depth 4" )
+ assert( s.split("\\").size > 4, "deleteRecursive requires absolute path of at least depth 4" )
+ assert( !listRecursive.exists(_.isHidden), "deleteRecursive requires no files to be hidden" )
+ assert( listRecursive.forall(_.canWrite), "deleteRecursive requires all files to be writable" )
+ if( file.isDirectory ){
+ file.listFiles.map(_.deleteRecursive)
+ }
+ //file.delete
+ }
+
+ def listRecursive: Seq[File] = {
+ file +: (
+ if( file.isDirectory ) file.listFiles.flatMap(_.listRecursive).toVector else Seq[File]()
+ )
+ }
}
implicit class URLExtensionMethods( url: URL ){
def ++( s: String ): URL = new URL( url.toString ++ s )
@@ -38,6 +60,16 @@ object `package`{
case e:java.lang.UnsupportedOperationException if e.getMessage === "empty.max" => None
}
}
+ implicit class ClassLoaderExtensions(classLoader: ClassLoader){
+ def canLoad(className: String) = {
+ try{
+ classLoader.loadClass(className)
+ true
+ } catch {
+ case e: ClassNotFoundException => false
+ }
+ }
+ }
implicit class BuildInterfaceExtensions(build: BuildInterface){
import build._
// TODO: if every build has a method triggers a callback if files change