From d01be91844b9a053bd73ff05c725e27a929a1309 Mon Sep 17 00:00:00 2001 From: Mark Harrah Date: Fri, 29 Jan 2010 20:29:23 -0500 Subject: [PATCH] fix GlobalLock behavior when lock file's directory does not exist --- launch/Locks.scala | 7 ++++++- launch/src/test/scala/LocksTest.scala | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 launch/src/test/scala/LocksTest.scala 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