From 273024a238c8ae0f56907e2cf2c4c8498d87317c Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Wed, 4 Jun 2014 11:06:49 -0400 Subject: [PATCH] Add special hook to diagnose travis failing test. --- .../src/main/scala/sbt/classpath/ClassLoaderCache.scala | 8 +++++--- .../src/test/scala/sbt/classpath/ConcurrentCache.scala | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/util/classpath/src/main/scala/sbt/classpath/ClassLoaderCache.scala b/util/classpath/src/main/scala/sbt/classpath/ClassLoaderCache.scala index 3886fe4d5..645f45747 100644 --- a/util/classpath/src/main/scala/sbt/classpath/ClassLoaderCache.scala +++ b/util/classpath/src/main/scala/sbt/classpath/ClassLoaderCache.scala @@ -5,7 +5,8 @@ import java.io.File import java.net.URLClassLoader import java.util.HashMap -private[sbt] final class ClassLoaderCache(val commonParent: ClassLoader) { +// Hack for testing only +private[sbt] final class ClassLoaderCache(val commonParent: ClassLoader, errorEvicted: Boolean = false) { private[this] val delegate = new HashMap[List[File], Reference[CachedClassLoader]] /** @@ -25,9 +26,10 @@ private[sbt] final class ClassLoaderCache(val commonParent: ClassLoader) { get(files, stamps, existingRef.get) private[this] def get(files: List[File], stamps: List[Long], existing: CachedClassLoader): ClassLoader = - if (existing == null || stamps != existing.timestamps) + if (existing == null || stamps != existing.timestamps) { + if (existing == null && errorEvicted) sys.error(s"Evicted classloader for [${files mkString ", "}]!!!! Not allowed, Travis!") newEntry(files, stamps) - else + } else existing.loader private[this] def newEntry(files: List[File], stamps: List[Long]): ClassLoader = diff --git a/util/classpath/src/test/scala/sbt/classpath/ConcurrentCache.scala b/util/classpath/src/test/scala/sbt/classpath/ConcurrentCache.scala index 8ff943b8d..9ac26af5c 100644 --- a/util/classpath/src/test/scala/sbt/classpath/ConcurrentCache.scala +++ b/util/classpath/src/test/scala/sbt/classpath/ConcurrentCache.scala @@ -22,7 +22,7 @@ object ConcurrentCache extends Properties("ClassLoaderCache concurrent access") property("Same class loader for same classpaths concurrently processed") = forAll { (names: List[String], concurrent: Int) => withcp(names.distinct) { files => - val cache = new ClassLoaderCache(null) + val cache = new ClassLoaderCache(null, errorEvicted = true) val loaders = (1 to concurrent).par.map(_ => cache(files)).toList loaders match { case DifferentClassloader(left, right) => false :| s"${showCp(left)} != ${showCp(right)}" @@ -32,7 +32,7 @@ object ConcurrentCache extends Properties("ClassLoaderCache concurrent access") } private[this] def withcp[T](names: List[String])(f: List[File] => T): T = IO.withTemporaryDirectory { tmp => - val files = names.map { name => + val files = names.sorted.map { name => val file = new File(tmp, name) IO.touch(file) file