diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2017-03-19 20:03:08 -0400 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2017-03-27 23:54:16 -0400 |
commit | 4185639097f8dc546c6474095c1fe853d43a1069 (patch) | |
tree | f69d90aac7f7fc3801f92e0511069f4239b9bf2e /stage1/resolver.scala | |
parent | d24aa27365015d024d5b11dbbfbbe5f3fceda4fb (diff) | |
download | cbt-4185639097f8dc546c6474095c1fe853d43a1069.tar.gz cbt-4185639097f8dc546c6474095c1fe853d43a1069.tar.bz2 cbt-4185639097f8dc546c6474095c1fe853d43a1069.zip |
performance tweak: cache results of parsed pom files in memory
Diffstat (limited to 'stage1/resolver.scala')
-rw-r--r-- | stage1/resolver.scala | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/stage1/resolver.scala b/stage1/resolver.scala index 6c31a98..1293a89 100644 --- a/stage1/resolver.scala +++ b/stage1/resolver.scala @@ -213,12 +213,19 @@ abstract class DependenciesProxy{ case class MavenDependency( groupId: String, artifactId: String, version: String, classifier: Classifier = Classifier.none, verifyHash: Boolean = true ){ - private[cbt] def serialize = groupId ++ ":" ++ artifactId ++ ":"++ version ++ classifier.name.map(":" ++ _).getOrElse("") + private[cbt] def serialize = // PERFORMANCE HOTSPOT + groupId + ":" + artifactId + ":" + version + ( if(classifier.name.nonEmpty) ":" + classifier.name.get else "" ) + private[cbt] def javafy: Array[String] = + Array(groupId,artifactId,version) ++ classifier.name } object MavenDependency{ private[cbt] def deserialize = (_:String).split(":") match { case col => MavenDependency( col(0), col(1), col(2), Classifier(col.lift(3)) ) } + private[cbt] def dejavafy = + ( cols:Array[Array[String]] ) => cols.map( + col => MavenDependency( col(0), col(1), col(2), Classifier(col.lift(3)) ) + ).toSeq } // FIXME: take MavenResolver instead of mavenCache and repositories separately case class BoundMavenDependency( @@ -338,8 +345,8 @@ case class BoundMavenDependency( if(classifier == Classifier.sources) Seq() else { lib.cacheOnDisk( - cbtLastModified, mavenCache ++ basePath(true) ++ ".pom.dependencies" - )( MavenDependency.deserialize )( _.serialize ){ + cbtLastModified, mavenCache ++ basePath(true) ++ ".pom.dependencies", classLoaderCache.hashMap + )( MavenDependency.deserialize )( _.serialize )( MavenDependency.dejavafy )( _.map(_.javafy).toArray ){ (pomXml \ "dependencies" \ "dependency").collect{ case xml if ( (xml \ "scope").text == "" || (xml \ "scope").text == "compile" ) && (xml \ "optional").text != "true" => val artifactId = lookup(xml,_ \ "artifactId").get |