diff options
Diffstat (limited to 'stage1/cbt.scala')
-rw-r--r-- | stage1/cbt.scala | 32 |
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 |