diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 115272c4..7d3b594d 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,3 +1,8 @@ +3.24.1: + +* `#541 `_ + routes.cache should be saved in tmpDir as configured in xitrum.conf + 3.24.0: * `#535 `_ diff --git a/build.sbt b/build.sbt index 3eba5db8..7f47cedc 100644 --- a/build.sbt +++ b/build.sbt @@ -6,7 +6,7 @@ crossScalaVersions := Seq("2.11.6", "2.10.5") // Run sbt mima-report-binary-issues to check for binary compatibility --------- // http://www.typesafe.com/community/core-tools/migration-manager -version := "3.24.0-SNAPSHOT" +version := "3.24.1-SNAPSHOT" com.typesafe.tools.mima.plugin.MimaPlugin.mimaDefaultSettings com.typesafe.tools.mima.plugin.MimaKeys.previousArtifact := Some("tv.cntt" % ("xitrum_" + scalaBinaryVersion.value) % "3.23") @@ -53,7 +53,7 @@ libraryDependencies += "tv.cntt" %% "glokka" % "2.3" libraryDependencies += "com.beachape.filemanagement" %% "schwatcher" % "0.1.8" // For scanning routes -libraryDependencies += "tv.cntt" %% "sclasner" % "1.6" +libraryDependencies += "tv.cntt" %% "sclasner" % "1.7.0" // For binary (de)serializing libraryDependencies += "com.twitter" %% "chill" % "0.6.0" diff --git a/src/main/resources/META-INF/resources/webjars/xitrum/3.24.0/metrics.js b/src/main/resources/META-INF/resources/webjars/xitrum/3.24.1/metrics.js similarity index 100% rename from src/main/resources/META-INF/resources/webjars/xitrum/3.24.0/metrics.js rename to src/main/resources/META-INF/resources/webjars/xitrum/3.24.1/metrics.js diff --git a/src/main/resources/META-INF/resources/webjars/xitrum/3.24.0/xitrum.css b/src/main/resources/META-INF/resources/webjars/xitrum/3.24.1/xitrum.css similarity index 100% rename from src/main/resources/META-INF/resources/webjars/xitrum/3.24.0/xitrum.css rename to src/main/resources/META-INF/resources/webjars/xitrum/3.24.1/xitrum.css diff --git a/src/main/scala-2.10/xitrum/routing/RouteCollector.scala b/src/main/scala-2.10/xitrum/routing/RouteCollector.scala index b189e38b..93de6b14 100644 --- a/src/main/scala-2.10/xitrum/routing/RouteCollector.scala +++ b/src/main/scala-2.10/xitrum/routing/RouteCollector.scala @@ -23,7 +23,7 @@ case class DiscoveredAcc( object RouteCollector { import ActionAnnotations._ - def deserializeCacheFileOrRecollect(cachedFileName: String, cl: ClassLoader): DiscoveredAcc = { + def deserializeCacheFileOrRecollect(cachedFile: File, cl: ClassLoader): DiscoveredAcc = { var acc = DiscoveredAcc( "", new SerializableRouteCollection, @@ -37,7 +37,7 @@ object RouteCollector { // is for the (Swagger) annotation inheritance feature. The traits/classes // are then loaded to get annotations. val xitrumVersion = xitrum.version.toString - val actionTreeBuilder = Scanner.foldLeft(cachedFileName, new ActionTreeBuilder(xitrumVersion), discovered(cl)) + val actionTreeBuilder = Scanner.foldLeft(cachedFile, new ActionTreeBuilder(xitrumVersion), discovered(cl) _) if (actionTreeBuilder.xitrumVersion != xitrumVersion) { // The caller should see that the Xitrum version is invalid and act properly diff --git a/src/main/scala-2.11/xitrum/routing/RouteCollector.scala b/src/main/scala-2.11/xitrum/routing/RouteCollector.scala index 953fe36f..ecc3982f 100644 --- a/src/main/scala-2.11/xitrum/routing/RouteCollector.scala +++ b/src/main/scala-2.11/xitrum/routing/RouteCollector.scala @@ -23,7 +23,7 @@ case class DiscoveredAcc( object RouteCollector { import ActionAnnotations._ - def deserializeCacheFileOrRecollect(cachedFileName: String, cl: ClassLoader): DiscoveredAcc = { + def deserializeCacheFileOrRecollect(cachedFile: File, cl: ClassLoader): DiscoveredAcc = { var acc = DiscoveredAcc( "", new SerializableRouteCollection, @@ -37,7 +37,7 @@ object RouteCollector { // is for the (Swagger) annotation inheritance feature. The traits/classes // are then loaded to get annotations. val xitrumVersion = xitrum.version.toString - val actionTreeBuilder = Scanner.foldLeft(cachedFileName, new ActionTreeBuilder(xitrumVersion), discovered(cl)) + val actionTreeBuilder = Scanner.foldLeft(cachedFile, new ActionTreeBuilder(xitrumVersion), discovered(cl) _) if (actionTreeBuilder.xitrumVersion != xitrumVersion) { // The caller should see that the Xitrum version is invalid and act properly diff --git a/src/main/scala/xitrum/Config.scala b/src/main/scala/xitrum/Config.scala index 7b4bb3b4..abc5119b 100644 --- a/src/main/scala/xitrum/Config.scala +++ b/src/main/scala/xitrum/Config.scala @@ -195,8 +195,9 @@ class XitrumConfig(val config: TConfig) { } dir } else { + // To create a temp directory, we File.createTempFile then + // delete the file and create a new directory there instead val f = File.createTempFile("xitrum-", "-tmp") - // Delete the file so we can make a new directory there instead f.delete() val ret = if (f.mkdirs()) { @@ -389,7 +390,7 @@ object Config { //---------------------------------------------------------------------------- - private[this] val ROUTES_CACHE = "tmp/routes.cache" + private[this] val ROUTES_CACHE = new File(xitrum.tmpDir, "routes.cache") var routes = loadRoutes(Thread.currentThread.getContextClassLoader, false) @@ -406,8 +407,7 @@ object Config { val discoveredAcc = RouteCollector.deserializeCacheFileOrRecollect(ROUTES_CACHE, cl) if (discoveredAcc.xitrumVersion != _root_.xitrum.version.toString) { Log.info(s"Xitrum version changed. Delete $ROUTES_CACHE and retry...") - val file = new File(ROUTES_CACHE) - file.delete() + ROUTES_CACHE.delete() loadRouteCacheFileOrRecollectWithRetry(cl, quiet, true) } else { val withSwagger = xitrum.swaggerApiVersion.isDefined @@ -420,8 +420,7 @@ object Config { throw e } else { Log.info(s"Could not load $ROUTES_CACHE, delete and retry...") - val file = new File(ROUTES_CACHE) - file.delete() + ROUTES_CACHE.delete() loadRouteCacheFileOrRecollectWithRetry(cl, quiet, true) } } diff --git a/src/main/scala/xitrum/handler/inbound/RouteReloader.scala b/src/main/scala/xitrum/handler/inbound/RouteReloader.scala index bfc97d4d..ba5988d4 100644 --- a/src/main/scala/xitrum/handler/inbound/RouteReloader.scala +++ b/src/main/scala/xitrum/handler/inbound/RouteReloader.scala @@ -8,7 +8,7 @@ import xitrum.util.{ClassFileLoader, FileMonitor} // In development mode, classes may be reloaded thus routes should also be // reloaded. private class RouteReloader { - private val CLASSES_DIRS = sclasner.Discoverer.files.filter(_.isDirectory).map(_.toPath) + private val CLASSES_DIRS = sclasner.Discoverer.containers.filter(_.isDirectory).map(_.toPath) CLASSES_DIRS.foreach(monitorClassesDir) private var shouldReloadOnNextRequest = false diff --git a/src/main/scala/xitrum/i18n/PoLoader.scala b/src/main/scala/xitrum/i18n/PoLoader.scala index e8eb31bb..0ee89156 100644 --- a/src/main/scala/xitrum/i18n/PoLoader.scala +++ b/src/main/scala/xitrum/i18n/PoLoader.scala @@ -84,7 +84,7 @@ object PoLoader { * (for development mode) to reload .po files automatically. */ private def watch() { - val searchDirs = Discoverer.files.filter(_.isDirectory) ++ Seq(new File(DEV_RESOURCES_DIR)) + val searchDirs = Discoverer.containers.filter(_.isDirectory) ++ Seq(new File(DEV_RESOURCES_DIR)) searchDirs.foreach { dir => val withI18n = new File(dir, "i18n") if (withI18n.exists && withI18n.isDirectory) { diff --git a/src/main/scala/xitrum/util/ClassFileLoader.scala b/src/main/scala/xitrum/util/ClassFileLoader.scala index 630079bd..75529a0d 100644 --- a/src/main/scala/xitrum/util/ClassFileLoader.scala +++ b/src/main/scala/xitrum/util/ClassFileLoader.scala @@ -8,11 +8,10 @@ import sclasner.Discoverer /** * This utility is useful for hot reloading .class files in defined directories * during development. - * - * @param searchDirs Directories to search for .class files, example: Seq("target/scala-2.11/classes") */ class ClassFileLoader extends ClassLoader { - private val searchDirs = Discoverer.files.filter(_.isDirectory).map(_.toPath) + // Directories to search for .class files, example: Seq("target/scala-2.11/classes") + private val searchDirs = Discoverer.containers.filter(_.isDirectory).map(_.toPath) // Need to cache because calling defineClass twice will cause exception protected val cache = MMap[String, Class[_]]()