Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

67 lines (63 sloc) 1.895 kb
/* sbt -- Simple Build Tool
* Copyright 2008, 2009 Mark Harrah
*/
package sbt
import java.io.File
import IO._
import Resources.error
object Resources
{
def apply(basePath: String) =
{
require(basePath.startsWith("/"))
val resource = getClass.getResource(basePath)
if(resource == null)
error("Resource base directory '" + basePath + "' not on classpath.")
else
{
val file = toFile(resource)
if(file.exists)
new Resources(file)
else
error("Resource base directory '" + basePath + "' does not exist.")
}
}
def error(msg: String) = throw new ResourcesException(msg)
private val LoadErrorPrefix = "Error loading initial project: "
}
class ResourcesException(msg: String) extends Exception(msg)
class Resources(val baseDirectory: File)
{
import Resources._
// The returned directory is not actually read-only, but it should be treated that way
def readOnlyResourceDirectory(group: String, name: String): File =
{
val groupDirectory = new File(baseDirectory, group)
if(groupDirectory.isDirectory)
{
val resourceDirectory = new File(groupDirectory, name)
if(resourceDirectory.isDirectory)
resourceDirectory
else
error("Resource directory '" + name + "' in group '" + group + "' not found.")
}
else
error("Group '" + group + "' not found.")
}
def readWriteResourceDirectory[T](group: String, name: String)(withDirectory: File => T): T =
{
val file = readOnlyResourceDirectory(group, name)
readWriteResourceDirectory(file)(withDirectory)
}
def readWriteResourceDirectory[T](readOnly: File)(withDirectory: File => T): T =
{
require(readOnly.isDirectory)
def readWrite(readOnly: File)(temporary: File): T =
{
val readWriteDirectory = new File(temporary, readOnly.getName)
copyDirectory(readOnly, readWriteDirectory)
withDirectory(readWriteDirectory)
}
withTemporaryDirectory(readWrite(readOnly))
}
}
Jump to Line
Something went wrong with that request. Please try again.