diff --git a/launch/Locks.scala b/launch/Locks.scala index 431860ca4..5d87c2160 100644 --- a/launch/Locks.scala +++ b/launch/Locks.scala @@ -9,7 +9,12 @@ object Locks extends xsbti.GlobalLock { private[this] val locks = new Cache[File, GlobalLock](new GlobalLock(_)) def apply[T](file: File, action: Callable[T]): T = - synchronized { locks(file.getCanonicalFile).withLock(action) } + synchronized + { + file.getParentFile.mkdirs() + file.createNewFile() + locks(file.getCanonicalFile).withLock(action) + } private[this] class GlobalLock(file: File) { diff --git a/launch/src/test/scala/LocksTest.scala b/launch/src/test/scala/LocksTest.scala new file mode 100644 index 000000000..626df0bbc --- /dev/null +++ b/launch/src/test/scala/LocksTest.scala @@ -0,0 +1,14 @@ +package xsbt.boot + +import org.scalacheck._ +import Prop._ +import java.io.File + +object LocksTest extends Properties("Locks") +{ + property("Lock in nonexisting directory") = + FileUtilities.withTemporaryDirectory { dir => + val lockFile = new File(dir, "doesntexist/lock") + Locks(lockFile, new java.util.concurrent.Callable[Boolean] { def call = true }) + } +} \ No newline at end of file