diff options
Diffstat (limited to 'stage1/resolver.scala')
-rw-r--r-- | stage1/resolver.scala | 86 |
1 files changed, 45 insertions, 41 deletions
diff --git a/stage1/resolver.scala b/stage1/resolver.scala index 880289c..9b3276b 100644 --- a/stage1/resolver.scala +++ b/stage1/resolver.scala @@ -10,7 +10,7 @@ private final class Tree( val root: Dependency, computeChildren: => Seq[Tree] ){ lazy val children = computeChildren def linearize: Seq[Dependency] = root +: children.flatMap(_.linearize) def show(indent: Int = 0): Stream[Char] = { - (" " * indent + root.show + "\n").toStream #::: children.map(_.show(indent+1)).foldLeft(Stream.empty[Char])(_ #::: _) + (" " * indent ++ root.show ++ "\n").toStream #::: children.map(_.show(indent+1)).foldLeft(Stream.empty[Char])(_ #::: _) } } @@ -20,9 +20,11 @@ trait ArtifactInfo extends Dependency{ def version: String protected def str = s"$groupId:$artifactId:$version" - override def show = super.show + s"($str)" + override def show = super.show ++ s"($str)" } abstract class Dependency{ + implicit def logger: Logger + protected def lib = new Stage1Lib(logger) def updated: Boolean //def cacheClassLoader: Boolean = false @@ -49,11 +51,10 @@ abstract class Dependency{ ).par.map(_.exportedClasspath).seq.sortBy(_.string) ) if(cacheDependencyClassLoader){ - val mavenClassPathKey = mavenClassPath.strings.sorted.mkString(":") new URLClassLoader( exportedClasspath ++ buildClassPath, ClassLoaderCache.classLoader( - mavenClassPathKey, new URLClassLoader( mavenClassPath, ClassLoader.getSystemClassLoader ) + mavenClassPath, new URLClassLoader( mavenClassPath, ClassLoader.getSystemClassLoader ) ) ) } else { @@ -85,11 +86,13 @@ abstract class Dependency{ def show: String = this.getClass.getSimpleName // ========== debug ========== def dependencyTree: String = dependencyTreeRecursion() - def logger: Logger - protected def lib = new Stage1Lib(logger) - private def dependencyTreeRecursion(indent: Int = 0): String = ( " " * indent ) + (if(updated) lib.red(show) else show) + dependencies.map(_.dependencyTreeRecursion(indent + 1)).map("\n"+_).mkString("") - - private object cacheDependencyClassLoaderBasicBuild extends Cache[ClassLoader] + private def dependencyTreeRecursion(indent: Int = 0): String = ( + ( " " * indent ) + ++ (if(updated) lib.red(show) else show) + ++ dependencies.map( + _.dependencyTreeRecursion(indent + 1) + ).map( "\n" ++ _.toString ).mkString("") + ) } // TODO: all this hard codes the scala version, needs more flexibility @@ -140,16 +143,18 @@ case class MavenDependency( groupId: String, artifactId: String, version: String def updated = false private val groupPath = groupId.split("\\.").mkString("/") - def basePath = s"/$groupPath/$artifactId/$version/$artifactId-$version"+(if(sources) "-sources" else "") + def basePath = s"/$groupPath/$artifactId/$version/$artifactId-$version"++(if(sources) "-sources" else "") - private def resolverUrl = if(version.endsWith("-SNAPSHOT")) "https://oss.sonatype.org/content/repositories/snapshots" else "https://repo1.maven.org/maven2" - private def baseUrl = resolverUrl + basePath - private def baseFile = mavenCache + basePath - private def pomFile = baseFile+".pom" - private def jarFile = baseFile+".jar" - //private def coursierJarFile = userHome+"/.coursier/cache/v1/https/repo1.maven.org/maven2"+basePath+".jar" - private def pomUrl = baseUrl+".pom" - private def jarUrl = baseUrl+".jar" + private def resolverUrl:URL = new URL( + if(version.endsWith("-SNAPSHOT")) "https://oss.sonatype.org/content/repositories/snapshots" else "https://repo1.maven.org/maven2" + ) + private def baseUrl: URL = resolverUrl ++ basePath + private def baseFile: File = mavenCache ++ basePath + private def pomFile: File = baseFile ++ ".pom" + private def jarFile: File = baseFile ++ ".jar" + //private def coursierJarFile = userHome++"/.coursier/cache/v1/https/repo1.maven.org/maven2"++basePath++".jar" + private def pomUrl: URL = baseUrl ++ ".pom" + private def jarUrl: URL = baseUrl ++ ".jar" def exportedJars = Seq( jar ) def exportedClasspath = ClassPath( exportedJars ) @@ -157,33 +162,32 @@ case class MavenDependency( groupId: String, artifactId: String, version: String import scala.collection.JavaConversions._ def jarSha1 = { - val file = jarFile+".sha1" - def url = jarUrl+".sha1" + val file = jarFile ++ ".sha1" scala.util.Try{ - lib.download( new URL(url), Paths.get(file), None ) + lib.download( jarUrl ++ ".sha1" , file, None ) // split(" ") here so checksum file contents in this format work: df7f15de037a1ee4d57d2ed779739089f560338c jna-3.2.2.pom - Files.readAllLines(Paths.get(file)).mkString("\n").split(" ").head.trim - }.toOption // FIXME: .toOption is a temporary solution to ignore if libs don't have one + Files.readAllLines(Paths.get(file.string)).mkString("\n").split(" ").head.trim + }.toOption // FIXME: .toOption is a temporary solution to ignore if libs don't have one (not sure that's even possible) } + def pomSha1 = { - val file = pomFile+".sha1" - def url = pomUrl+".sha1" + val file = pomFile++".sha1" scala.util.Try{ - lib.download( new URL(url), Paths.get(file), None ) + lib.download( pomUrl++".sha1" , file, None ) // split(" ") here so checksum file contents in this format work: df7f15de037a1ee4d57d2ed779739089f560338c jna-3.2.2.pom - Files.readAllLines(Paths.get(file)).mkString("\n").split(" ").head.trim - }.toOption // FIXME: .toOption is a temporary solution to ignore if libs don't have one + Files.readAllLines(Paths.get(file.string)).mkString("\n").split(" ").head.trim + }.toOption // FIXME: .toOption is a temporary solution to ignore if libs don't have one (not sure that's even possible) } + def jar = { - lib.download( new URL(jarUrl), Paths.get(jarFile), jarSha1 ) - new File(jarFile) - } - def pomXml = { - XML.loadFile(pom.toString) + lib.download( jarUrl, jarFile, jarSha1 ) + jarFile } + def pomXml = XML.loadFile(pom.toString) + def pom = { - lib.download( new URL(pomUrl), Paths.get(pomFile), pomSha1 ) - new File(pomFile) + lib.download( pomUrl, pomFile, pomSha1 ) + pomFile } // ========== pom traversal ========== @@ -211,13 +215,13 @@ case class MavenDependency( groupId: String, artifactId: String, version: String }.toVector } def lookup( xml: Node, accessor: Node => NodeSeq ): Option[String] = { - //println("lookup in "+pomUrl) - val Substitution = "\\$\\{([a-z0-9\\.]+)\\}".r + //println("lookup in "++pomUrl) + val Substitution = "\\$\\{([a-z0-9\\.]++)\\}".r accessor(xml).headOption.flatMap{v => - //println("found: "+v.text) + //println("found: "++v.text) v.text match { case Substitution(path) => - //println("lookup "+path + ": "+(pomXml\path).text) + //println("lookup "++path ++ ": "++(pomXml\path).text) lookup(pomXml, _ \ "properties" \ path) case value => Option(value) } @@ -247,7 +251,7 @@ object MavenDependency{ def removeOutdated( deps: Seq[ArtifactInfo], versionLessThan: (String, String) => Boolean = semanticVersionLessThan - ): Seq[ArtifactInfo] = { + )(implicit logger: Logger): Seq[ArtifactInfo] = { val latest = deps .groupBy( d => (d.groupId, d.artifactId) ) .mapValues( @@ -257,7 +261,7 @@ object MavenDependency{ deps.flatMap{ d => val l = latest.get((d.groupId,d.artifactId)) - //if(d != l) println("EVICTED: "+d.show) + if(d != l) logger.resolver("outdated: "++d.show) l }.distinct } |