From 0b2d5fffa3c92fd976c778f8e612d17257b52870 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 10 Jul 2017 21:07:31 +0300 Subject: Refactoring --- stage2/plugins/ExportBuildInformation.scala | 45 +++++++++++++++-------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index c5c69ab..ebbfd2a 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -43,12 +43,13 @@ object BuildInformation { case class ScalaCompiler( version: String, jars: Seq[File] ) - case class LibraryJar( jar: File, jarType: JarType.JarType ) + case class LibraryJar( jar: File, jarType: JarType ) - object JarType extends Enumeration { - type JarType = Value - val Binary = Value("binary") - val Source = Value("source") + case class JarType( name: String ) + + object JarType { + object Binary extends JarType( "binary" ) + object Source extends JarType( "source" ) } object Project { @@ -80,13 +81,13 @@ object BuildInformation { .map(v => ScalaCompiler(v, resolveScalaCompiler(rootBuild, v))) Project( - rootModule.name, - rootModule.root, - rootModule, - modules, - libraries, - cbtLibraries, - scalaCompilers + name = rootModule.name, + root= rootModule.root, + rootModule = rootModule, + modules = modules, + libraries = libraries, + cbtLibraries = cbtLibraries, + scalaCompilers = scalaCompilers ) } @@ -222,7 +223,7 @@ object BuildInformation { if (source.isDirectory) source else - source.getParentFile //Let's asume that for now + source.getParentFile //Let's assume that for now private def formatMavenDependency(dependency: cbt.MavenDependency) = @@ -242,7 +243,7 @@ object BuildInformation { object BuildInformationSerializer { def serialize(project: BuildInformation.Project): Node = - + {project.modules.map(serialize)} @@ -258,21 +259,21 @@ object BuildInformationSerializer { private def serialize(module: BuildInformation.Module): Node = - + - {module.sourceDirs.map(d => {d})} + {module.sourceDirs.map(d => {d.getPath: String})} - {module.scalacOptions.map(o => )} + {module.scalacOptions.map(o => )} {module.binaryDependencies.map(serialize)} {module.moduleDependencies.map(serialize)} - {module.classpath.map(c => {c.toString})} + {module.classpath.map(c => {c.getPath: String})} - {module.parentBuild.map(p => {p}).getOrElse(NodeSeq.Empty)} + {module.parentBuild.map(p => {p: String}).getOrElse(NodeSeq.Empty)} private def serialize(binaryDependency: BuildInformation.BinaryDependency): Node = @@ -280,14 +281,14 @@ object BuildInformationSerializer { private def serialize(library: BuildInformation.Library): Node = - {library.jars.map(j => {j.jar})} + {library.jars.map(j => {j.jar.getPath: String})} private def serialize(compiler: BuildInformation.ScalaCompiler): Node = - {compiler.jars.map(j => {j})} + {compiler.jars.map(j => {j.getPath: String})} private def serialize(moduleDependency: BuildInformation.ModuleDependency): Node = - {moduleDependency.name} + {moduleDependency.name: String} } \ No newline at end of file -- cgit v1.2.3 From 892779860fe76583dbec0b8459a1a6c09101b96a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 10 Jul 2017 22:21:02 +0300 Subject: Now libraries is also take from extra modules --- stage2/plugins/ExportBuildInformation.scala | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index ebbfd2a..a8f5160 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -61,21 +61,21 @@ object BuildInformation { class BuildInformationExporter(rootBuild: BaseBuild, extraModuleNames: Seq[String]) { def exportBuildInformation: Project = { val moduleBuilds = transitiveBuilds(rootBuild) - val libraries = moduleBuilds - .flatMap(_.transitiveDependencies) - .collect { case d: BoundMavenDependency => exportLibrary(d) } - .distinct - val cbtLibraries = convertCbtLibraries - val rootModule = exportModule(rootBuild) - val extraModuleBuilds = extraModuleNames .map(f => new File(f)) .filter(f => f.exists && f.isDirectory) .map(f => DirectoryDependency(f)(rootBuild.context).dependency.asInstanceOf[BaseBuild]) .flatMap(transitiveBuilds) + val rootModule = exportModule(rootBuild) val modules = (moduleBuilds ++ extraModuleBuilds) .map(exportModule) .distinct + + val libraries = (moduleBuilds ++ extraModuleBuilds) + .flatMap(_.transitiveDependencies) + .collect { case d: BoundMavenDependency => exportLibrary(d) } + .distinct + val cbtLibraries = convertCbtLibraries val scalaCompilers = modules .map(_.scalaVersion) .map(v => ScalaCompiler(v, resolveScalaCompiler(rootBuild, v))) -- cgit v1.2.3 From c3fa8d4c780c9ad4ad8e825125badd29a1590b63 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 11 Jul 2017 16:19:26 +0300 Subject: Add test to build dependency, transitiveBuilds optimization --- stage2/plugins/ExportBuildInformation.scala | 80 +++++++++++++++++++---------- 1 file changed, 54 insertions(+), 26 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index a8f5160..c037d4b 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -4,7 +4,7 @@ import cbt._ import java.io._ import java.nio.file._ import scala.xml._ -import scala.util._ +import scala.util._ trait ExportBuildInformation { self: BaseBuild => def buildInfoXml: String = @@ -34,7 +34,7 @@ object BuildInformation { parentBuild: Option[String], scalacOptions: Seq[String] ) - + case class Library( name: String, jars: Seq[LibraryJar] ) case class BinaryDependency( name: String ) @@ -66,7 +66,7 @@ object BuildInformation { .filter(f => f.exists && f.isDirectory) .map(f => DirectoryDependency(f)(rootBuild.context).dependency.asInstanceOf[BaseBuild]) .flatMap(transitiveBuilds) - val rootModule = exportModule(rootBuild) + val rootModule = exportModule(rootBuild) val modules = (moduleBuilds ++ extraModuleBuilds) .map(exportModule) .distinct @@ -91,7 +91,8 @@ object BuildInformation { ) } - private def convertCbtLibraries = + private def convertCbtLibraries = { + println("convertCbtLibraries") transitiveBuilds(DirectoryDependency(rootBuild.context.cbtHome)(rootBuild.context).dependenciesArray.head.asInstanceOf[BaseBuild]) .collect { case d: BoundMavenDependency => d.jar @@ -99,6 +100,7 @@ object BuildInformation { } .map(exportLibrary) .distinct + } private def collectDependencies(dependencies: Seq[Dependency]): Seq[ModuleDependency] = dependencies @@ -154,30 +156,45 @@ object BuildInformation { .map(_.toFile) } - private def collectLazyBuilds(dependency: Dependency): Option[BaseBuild] = + private def lazyBuild(dependency: Dependency): Seq[BaseBuild] = dependency match { case l: LazyDependency => l.dependency match { - case d: BaseBuild => Some(d) - case d: LazyDependency => collectLazyBuilds(d.dependency) - case _ => None + case d: BaseBuild => Seq(d) + case d: LazyDependency => lazyBuild(d.dependency) + case _ => Seq.empty } - case d: BaseBuild => Some(d) - case _ => None + case d: BaseBuild => Seq(d) + case _ => Seq.empty } - - private def transitiveBuilds(build: BaseBuild): Seq[BaseBuild] = - (build +: build.transitiveDependencies) - .collect { - case d: BaseBuild => d +: collectParentBuilds(d).flatMap(transitiveBuilds) - case d: LazyDependency => - collectLazyBuilds(d.dependency) - .toSeq - .flatMap(transitiveBuilds) + private def isDefaultBuild(build: BaseBuild): Boolean = + // build.projectDirectory.toPath.startsWith + false + + private def transitiveBuilds(build: BaseBuild): Seq[BaseBuild] = { + def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = { + visited.contains(build) match { + case true => visited + case false => + (build +: build.transitiveDependencies) + .map { d => println("TDep: ", d); d } + .collect { + case d: BaseBuild => + Seq(d) ++ parentBuild(d) ++ testBuild(d) + case d: LazyDependency => + lazyBuild(d.dependency) + } + .flatten + .distinct + .map { d => println(d); d } + .filterNot(visited.contains) + .foldLeft(build +: visited)(traverse) } - .flatten - .distinct + } + traverse(Seq.empty, build) + } + private def exportLibrary(dependency: BoundMavenDependency) = { val name = formatMavenDependency(dependency.mavenDependency) @@ -191,14 +208,14 @@ object BuildInformation { implicit val transientCache: java.util.Map[AnyRef, AnyRef] = rootBuild.context.transientCache implicit val classLoaderCache: ClassLoaderCache = rootBuild.context.classLoaderCache val sourceJars = jars - .map { d => + .map { d => Try(d.copy(mavenDependency = d.mavenDependency.copy(classifier = Classifier.sources)).jar) } .flatMap { case Success(j) => Some(j) case Failure(e) => logger.log("ExportBuildInformation", s"Can not load a $name library sources. Skipping") - None + None } .map(LibraryJar(_, JarType.Source)) Library(name, binaryJars ++ sourceJars) @@ -207,12 +224,23 @@ object BuildInformation { private def exportLibrary(file: File) = Library("CBT:" + file.getName.stripSuffix(".jar"), Seq(LibraryJar(file, JarType.Binary))) - private def collectParentBuilds(build: BaseBuild): Seq[BaseBuild] = + private def parentBuild(build: BaseBuild): Seq[BaseBuild] = build.context.parentBuild .map(_.asInstanceOf[BaseBuild]) - .map(b => b +: collectParentBuilds(b)) .toSeq - .flatten + + private def testBuild(build: BaseBuild): Seq[BaseBuild] = { + if (isDefaultBuild(build)) + Seq.empty + else + Try(build.test).toOption + .flatMap { + case testBuild: BaseBuild => { println(testBuild.projectDirectory) ; Some(testBuild) } + case _ => None + } + .toSeq + } + private def resolveScalaCompiler(build: BaseBuild, scalaVersion: String) = build.Resolver(mavenCentral, sonatypeReleases).bindOne( -- cgit v1.2.3 From e7899a40ecc3a076cf598e06d1e27a5bf43c1bf7 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 11 Jul 2017 16:39:13 +0300 Subject: Optimization for multiple builds --- stage2/plugins/ExportBuildInformation.scala | 68 +++++++++++------------------ 1 file changed, 26 insertions(+), 42 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index c037d4b..baa7bec 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -60,18 +60,18 @@ object BuildInformation { class BuildInformationExporter(rootBuild: BaseBuild, extraModuleNames: Seq[String]) { def exportBuildInformation: Project = { - val moduleBuilds = transitiveBuilds(rootBuild) val extraModuleBuilds = extraModuleNames .map(f => new File(f)) .filter(f => f.exists && f.isDirectory) .map(f => DirectoryDependency(f)(rootBuild.context).dependency.asInstanceOf[BaseBuild]) - .flatMap(transitiveBuilds) + + val builds = transitiveBuilds(rootBuild +: extraModuleBuilds) val rootModule = exportModule(rootBuild) - val modules = (moduleBuilds ++ extraModuleBuilds) + val modules = builds .map(exportModule) .distinct - val libraries = (moduleBuilds ++ extraModuleBuilds) + val libraries = builds .flatMap(_.transitiveDependencies) .collect { case d: BoundMavenDependency => exportLibrary(d) } .distinct @@ -82,25 +82,23 @@ object BuildInformation { Project( name = rootModule.name, - root= rootModule.root, + root = rootModule.root, rootModule = rootModule, modules = modules, libraries = libraries, cbtLibraries = cbtLibraries, - scalaCompilers = scalaCompilers + scalaCompilers = scalaCompilers ) } - private def convertCbtLibraries = { - println("convertCbtLibraries") - transitiveBuilds(DirectoryDependency(rootBuild.context.cbtHome)(rootBuild.context).dependenciesArray.head.asInstanceOf[BaseBuild]) + private def convertCbtLibraries = + transitiveBuilds(Seq(DirectoryDependency(rootBuild.context.cbtHome)(rootBuild.context).dependenciesArray.head.asInstanceOf[BaseBuild])) .collect { case d: BoundMavenDependency => d.jar case d: PackageJars => d.jar.get } .map(exportLibrary) .distinct - } private def collectDependencies(dependencies: Seq[Dependency]): Seq[ModuleDependency] = dependencies @@ -168,34 +166,23 @@ object BuildInformation { case _ => Seq.empty } - private def isDefaultBuild(build: BaseBuild): Boolean = - // build.projectDirectory.toPath.startsWith - false - - private def transitiveBuilds(build: BaseBuild): Seq[BaseBuild] = { - def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = { - visited.contains(build) match { - case true => visited - case false => - (build +: build.transitiveDependencies) - .map { d => println("TDep: ", d); d } - .collect { - case d: BaseBuild => - Seq(d) ++ parentBuild(d) ++ testBuild(d) - case d: LazyDependency => - lazyBuild(d.dependency) - } - .flatten - .distinct - .map { d => println(d); d } - .filterNot(visited.contains) - .foldLeft(build +: visited)(traverse) - } - } - traverse(Seq.empty, build) + private def transitiveBuilds(builds: Seq[BaseBuild]): Seq[BaseBuild] = { // More effectivly to call on a all builds at once rather than on one per time + def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = + (build +: build.transitiveDependencies) + .collect { + case d: BaseBuild => + Seq(d) ++ parentBuild(d) ++ testBuild(d) + case d: LazyDependency => + lazyBuild(d.dependency) + } + .flatten + .distinct + .filterNot(visited.contains) + .foldLeft(build +: visited)(traverse) + + builds.foldLeft(Seq.empty[BaseBuild])(traverse) } - private def exportLibrary(dependency: BoundMavenDependency) = { val name = formatMavenDependency(dependency.mavenDependency) val jars = (dependency +: dependency.transitiveDependencies) @@ -229,17 +216,14 @@ object BuildInformation { .map(_.asInstanceOf[BaseBuild]) .toSeq - private def testBuild(build: BaseBuild): Seq[BaseBuild] = { - if (isDefaultBuild(build)) - Seq.empty - else - Try(build.test).toOption + private def testBuild(build: BaseBuild): Seq[BaseBuild] = + Try(build.test).toOption .flatMap { case testBuild: BaseBuild => { println(testBuild.projectDirectory) ; Some(testBuild) } case _ => None } .toSeq - } + private def resolveScalaCompiler(build: BaseBuild, scalaVersion: String) = -- cgit v1.2.3 From 47baaca5d2689770e0106382865fe7cfa35e3cba Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 11 Jul 2017 16:40:46 +0300 Subject: Reformat, remove extra param --- stage2/plugins/ExportBuildInformation.scala | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index baa7bec..77f9436 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -78,7 +78,7 @@ object BuildInformation { val cbtLibraries = convertCbtLibraries val scalaCompilers = modules .map(_.scalaVersion) - .map(v => ScalaCompiler(v, resolveScalaCompiler(rootBuild, v))) + .map(v => ScalaCompiler(v, resolveScalaCompiler(v))) Project( name = rootModule.name, @@ -181,7 +181,7 @@ object BuildInformation { .foldLeft(build +: visited)(traverse) builds.foldLeft(Seq.empty[BaseBuild])(traverse) - } + } private def exportLibrary(dependency: BoundMavenDependency) = { val name = formatMavenDependency(dependency.mavenDependency) @@ -224,10 +224,8 @@ object BuildInformation { } .toSeq - - - private def resolveScalaCompiler(build: BaseBuild, scalaVersion: String) = - build.Resolver(mavenCentral, sonatypeReleases).bindOne( + private def resolveScalaCompiler(scalaVersion: String) = + rootBuild.Resolver(mavenCentral, sonatypeReleases).bindOne( MavenDependency("org.scala-lang", "scala-compiler", scalaVersion) ).classpath.files @@ -237,7 +235,6 @@ object BuildInformation { else source.getParentFile //Let's assume that for now - private def formatMavenDependency(dependency: cbt.MavenDependency) = s"${dependency.groupId}:${dependency.artifactId}:${dependency.version}" -- cgit v1.2.3 From 5b8dddabbaad882e48b68c118cd36e0b8be7d72a Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 11 Jul 2017 17:37:57 +0300 Subject: Add COmmandline arguments parsing, add needCbtLibs param --- stage2/plugins/ExportBuildInformation.scala | 32 ++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 77f9436..10da9eb 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -54,13 +54,26 @@ object BuildInformation { object Project { def apply(build: BaseBuild, args: Seq[String]): Project = { - val extraModuleNames: Seq[String] = args.lift(0).map(_.split(":").toSeq).getOrElse(Seq.empty) - new BuildInformationExporter(build, extraModuleNames).exportBuildInformation + val parameters = ExportParameters(args) + new BuildInformationExporter(build, parameters).exportBuildInformation } - class BuildInformationExporter(rootBuild: BaseBuild, extraModuleNames: Seq[String]) { + private case class ExportParameters( extraModulePaths: Seq[String], needCbtLibs: Boolean ) + + private object ExportParameters { + def apply(args: Seq[String]): ExportParameters = { + val argumentParser = new ArgumentParser(args) + val extraModulePaths: Seq[String] = argumentParser.value("extraModules").map(_.split(":").toSeq).getOrElse(Seq.empty) + val needCbtLibs: Boolean = argumentParser.value("needCbtLibs").map(_.toBoolean).getOrElse(true) + ExportParameters(extraModulePaths, needCbtLibs) + } + } + + class BuildInformationExporter(rootBuild: BaseBuild, parameters: ExportParameters) { + import parameters._ + def exportBuildInformation: Project = { - val extraModuleBuilds = extraModuleNames + val extraModuleBuilds = extraModulePaths .map(f => new File(f)) .filter(f => f.exists && f.isDirectory) .map(f => DirectoryDependency(f)(rootBuild.context).dependency.asInstanceOf[BaseBuild]) @@ -75,7 +88,7 @@ object BuildInformation { .flatMap(_.transitiveDependencies) .collect { case d: BoundMavenDependency => exportLibrary(d) } .distinct - val cbtLibraries = convertCbtLibraries + val cbtLibraries = if (needCbtLibs) convertCbtLibraries else Seq.empty[Library] val scalaCompilers = modules .map(_.scalaVersion) .map(v => ScalaCompiler(v, resolveScalaCompiler(v))) @@ -300,4 +313,13 @@ object BuildInformationSerializer { private def serialize(moduleDependency: BuildInformation.ModuleDependency): Node = {moduleDependency.name: String} +} + + +class ArgumentParser(arguments: Seq[String]) { + val argumentsMap = + arguments.grouped(2).map{ case Seq(k,v) => k.stripPrefix("--").stripSuffix("=") -> v }.toMap + + def value(key: String): Option[String] = + argumentsMap.get(key) } \ No newline at end of file -- cgit v1.2.3 From 62ea3f3a7667e37fe1321ae23a99c7304f76d3ba Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 11 Jul 2017 18:50:03 +0300 Subject: Argument parsing improovement --- stage2/plugins/ExportBuildInformation.scala | 33 +++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 10da9eb..2f07ff0 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -63,8 +63,13 @@ object BuildInformation { private object ExportParameters { def apply(args: Seq[String]): ExportParameters = { val argumentParser = new ArgumentParser(args) - val extraModulePaths: Seq[String] = argumentParser.value("extraModules").map(_.split(":").toSeq).getOrElse(Seq.empty) - val needCbtLibs: Boolean = argumentParser.value("needCbtLibs").map(_.toBoolean).getOrElse(true) + val extraModulePaths: Seq[String] = argumentParser.value("extraModules") + .map(_.split(":").toSeq) + .getOrElse(Seq.empty) + .filterNot(_.isEmpty) + val needCbtLibs: Boolean = argumentParser.value("needCbtLibs") + .map(_.toBoolean) + .getOrElse(true) ExportParameters(extraModulePaths, needCbtLibs) } } @@ -230,12 +235,13 @@ object BuildInformation { .toSeq private def testBuild(build: BaseBuild): Seq[BaseBuild] = - Try(build.test).toOption + Try(build.test) + .toOption + .toSeq .flatMap { - case testBuild: BaseBuild => { println(testBuild.projectDirectory) ; Some(testBuild) } - case _ => None + case testBuild: BaseBuild => Seq(testBuild) + case _ => Seq.empty } - .toSeq private def resolveScalaCompiler(scalaVersion: String) = rootBuild.Resolver(mavenCentral, sonatypeReleases).bindOne( @@ -317,9 +323,18 @@ object BuildInformationSerializer { class ArgumentParser(arguments: Seq[String]) { - val argumentsMap = - arguments.grouped(2).map{ case Seq(k,v) => k.stripPrefix("--").stripSuffix("=") -> v }.toMap + val argumentsMap = (arguments :+ "") + .sliding(2) + .map(_.toList) + .foldLeft(Map.empty[String, Option[String]]) { + case (m, Seq(k, v)) if k.startsWith("--") && !v.startsWith("--") => m + (k -> Some(v)) + case (m, k::_) if k.startsWith("--") => m + (k -> None) + case (m, s) => m + } def value(key: String): Option[String] = - argumentsMap.get(key) + argumentsMap.get(key).flatten + + def persists(key: String) = + argumentsMap.isDefinedAt(key) } \ No newline at end of file -- cgit v1.2.3 From 5e916bcd6e5e1454360893a56e495b8e54e5955d Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Jul 2017 19:33:41 +0300 Subject: Small changes --- stage2/plugins/ExportBuildInformation.scala | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 2f07ff0..80cdef5 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -53,13 +53,14 @@ object BuildInformation { } object Project { + + private case class ExportParameters( extraModulePaths: Seq[String], needCbtLibs: Boolean ) + def apply(build: BaseBuild, args: Seq[String]): Project = { val parameters = ExportParameters(args) new BuildInformationExporter(build, parameters).exportBuildInformation } - private case class ExportParameters( extraModulePaths: Seq[String], needCbtLibs: Boolean ) - private object ExportParameters { def apply(args: Seq[String]): ExportParameters = { val argumentParser = new ArgumentParser(args) @@ -329,7 +330,7 @@ class ArgumentParser(arguments: Seq[String]) { .foldLeft(Map.empty[String, Option[String]]) { case (m, Seq(k, v)) if k.startsWith("--") && !v.startsWith("--") => m + (k -> Some(v)) case (m, k::_) if k.startsWith("--") => m + (k -> None) - case (m, s) => m + case (m, _) => m } def value(key: String): Option[String] = -- cgit v1.2.3 From 003ead112c31534e33c7f694e33bc0e2e1062156 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Wed, 12 Jul 2017 15:46:17 +0300 Subject: fixes --- stage2/plugins/ExportBuildInformation.scala | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 80cdef5..e9246c4 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -56,11 +56,6 @@ object BuildInformation { private case class ExportParameters( extraModulePaths: Seq[String], needCbtLibs: Boolean ) - def apply(build: BaseBuild, args: Seq[String]): Project = { - val parameters = ExportParameters(args) - new BuildInformationExporter(build, parameters).exportBuildInformation - } - private object ExportParameters { def apply(args: Seq[String]): ExportParameters = { val argumentParser = new ArgumentParser(args) @@ -75,6 +70,13 @@ object BuildInformation { } } + def apply(build: BaseBuild, args: Seq[String]): Project = { + val parameters = ExportParameters(args) + println(s"Params is $parameters") + new BuildInformationExporter(build, parameters).exportBuildInformation + } + + class BuildInformationExporter(rootBuild: BaseBuild, parameters: ExportParameters) { import parameters._ @@ -328,13 +330,13 @@ class ArgumentParser(arguments: Seq[String]) { .sliding(2) .map(_.toList) .foldLeft(Map.empty[String, Option[String]]) { - case (m, Seq(k, v)) if k.startsWith("--") && !v.startsWith("--") => m + (k -> Some(v)) - case (m, k::_) if k.startsWith("--") => m + (k -> None) + case (m, Seq(k, v)) if k.startsWith("--") && !v.startsWith("--") => m + (k.stripPrefix("--") -> Some(v)) + case (m, k::_) if k.startsWith("--") => m + (k.stripPrefix("--") -> None) case (m, _) => m } - + def value(key: String): Option[String] = - argumentsMap.get(key).flatten + argumentsMap.get(key.stripPrefix("--")).flatten def persists(key: String) = argumentsMap.isDefinedAt(key) -- cgit v1.2.3 From 8a2d3b2f2cb996ce04038124cc4d50027179c191 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 13 Jul 2017 13:54:47 +0300 Subject: Reformationg --- stage2/plugins/ExportBuildInformation.scala | 104 +++++++++++++++------------- 1 file changed, 55 insertions(+), 49 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index e9246c4..0cd340f 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -12,6 +12,7 @@ trait ExportBuildInformation { self: BaseBuild => } object BuildInformation { + case class Project( name: String, root: File, @@ -53,29 +54,10 @@ object BuildInformation { } object Project { - - private case class ExportParameters( extraModulePaths: Seq[String], needCbtLibs: Boolean ) - - private object ExportParameters { - def apply(args: Seq[String]): ExportParameters = { - val argumentParser = new ArgumentParser(args) - val extraModulePaths: Seq[String] = argumentParser.value("extraModules") - .map(_.split(":").toSeq) - .getOrElse(Seq.empty) - .filterNot(_.isEmpty) - val needCbtLibs: Boolean = argumentParser.value("needCbtLibs") - .map(_.toBoolean) - .getOrElse(true) - ExportParameters(extraModulePaths, needCbtLibs) - } - } - def apply(build: BaseBuild, args: Seq[String]): Project = { val parameters = ExportParameters(args) - println(s"Params is $parameters") new BuildInformationExporter(build, parameters).exportBuildInformation } - class BuildInformationExporter(rootBuild: BaseBuild, parameters: ExportParameters) { import parameters._ @@ -112,14 +94,17 @@ object BuildInformation { ) } - private def convertCbtLibraries = - transitiveBuilds(Seq(DirectoryDependency(rootBuild.context.cbtHome)(rootBuild.context).dependenciesArray.head.asInstanceOf[BaseBuild])) + private def convertCbtLibraries = { + val cbtBuild = + DirectoryDependency(rootBuild.context.cbtHome)(rootBuild.context).dependenciesArray.head.asInstanceOf[BaseBuild] + transitiveBuilds(Seq(cbtBuild)) .collect { case d: BoundMavenDependency => d.jar case d: PackageJars => d.jar.get } .map(exportLibrary) .distinct + } private def collectDependencies(dependencies: Seq[Dependency]): Seq[ModuleDependency] = dependencies @@ -187,19 +172,20 @@ object BuildInformation { case _ => Seq.empty } - private def transitiveBuilds(builds: Seq[BaseBuild]): Seq[BaseBuild] = { // More effectivly to call on a all builds at once rather than on one per time - def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = - (build +: build.transitiveDependencies) - .collect { - case d: BaseBuild => - Seq(d) ++ parentBuild(d) ++ testBuild(d) - case d: LazyDependency => - lazyBuild(d.dependency) - } - .flatten - .distinct - .filterNot(visited.contains) - .foldLeft(build +: visited)(traverse) + // More effectively to call on a all builds at once rather than on one per time + private def transitiveBuilds(builds: Seq[BaseBuild]): Seq[BaseBuild] = { + def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = + (build +: build.transitiveDependencies) + .collect { + case d: BaseBuild => + Seq(d) ++ parentBuild(d) ++ testBuild(d) + case d: LazyDependency => + lazyBuild(d.dependency) + } + .flatten + .distinct + .filterNot(visited.contains) + .foldLeft(build +: visited)(traverse) builds.foldLeft(Seq.empty[BaseBuild])(traverse) } @@ -218,7 +204,7 @@ object BuildInformation { val sourceJars = jars .map { d => Try(d.copy(mavenDependency = d.mavenDependency.copy(classifier = Classifier.sources)).jar) - } + } .flatMap { case Success(j) => Some(j) case Failure(e) => @@ -237,15 +223,15 @@ object BuildInformation { .map(_.asInstanceOf[BaseBuild]) .toSeq - private def testBuild(build: BaseBuild): Seq[BaseBuild] = - Try(build.test) + private def testBuild(build: BaseBuild): Seq[BaseBuild] = + Try(build.test) .toOption .toSeq .flatMap { - case testBuild: BaseBuild => Seq(testBuild) + case testBuild: BaseBuild => Seq(testBuild) case _ => Seq.empty } - + private def resolveScalaCompiler(scalaVersion: String) = rootBuild.Resolver(mavenCentral, sonatypeReleases).bindOne( MavenDependency("org.scala-lang", "scala-compiler", scalaVersion) @@ -269,7 +255,23 @@ object BuildInformation { .stripPrefix("/") .replace("/", "-") } + + private case class ExportParameters(extraModulePaths: Seq[String], needCbtLibs: Boolean) + + private object ExportParameters { + def apply(args: Seq[String]): ExportParameters = { + val argumentParser = new ArgumentParser(args) + val extraModulePaths: Seq[String] = argumentParser.value("extraModules") + .map(_.split(":").toSeq) + .getOrElse(Seq.empty) + .filterNot(_.isEmpty) + val needCbtLibs: Boolean = argumentParser.value("needCbtLibs").forall(_.toBoolean) + ExportParameters(extraModulePaths, needCbtLibs) + } + } + } + } object BuildInformationSerializer { @@ -315,29 +317,33 @@ object BuildInformationSerializer { {library.jars.map(j => {j.jar.getPath: String})} + private def serialize(moduleDependency: BuildInformation.ModuleDependency): Node = + + {moduleDependency.name: String} + + private def serialize(compiler: BuildInformation.ScalaCompiler): Node = {compiler.jars.map(j => {j.getPath: String})} - - private def serialize(moduleDependency: BuildInformation.ModuleDependency): Node = - {moduleDependency.name: String} } class ArgumentParser(arguments: Seq[String]) { - val argumentsMap = (arguments :+ "") + private val argumentsMap = (arguments :+ "") .sliding(2) .map(_.toList) - .foldLeft(Map.empty[String, Option[String]]) { - case (m, Seq(k, v)) if k.startsWith("--") && !v.startsWith("--") => m + (k.stripPrefix("--") -> Some(v)) - case (m, k::_) if k.startsWith("--") => m + (k.stripPrefix("--") -> None) + .foldLeft(Map.empty[String, Option[String]]) { + case (m, Seq(k: String, v: String)) if k.startsWith("--") && !v.startsWith("--") => + m + (k.stripPrefix("--") -> Some(v)) + case (m, (k: String) :: _) if k.startsWith("--") => + m + (k.stripPrefix("--") -> None) case (m, _) => m } - - def value(key: String): Option[String] = + + def value(key: String): Option[String] = argumentsMap.get(key.stripPrefix("--")).flatten - def persists(key: String) = + def persists(key: String): Boolean = argumentsMap.isDefinedAt(key) } \ No newline at end of file -- cgit v1.2.3 From 88d01433b1ebcd1038ff29a72a8dcc78144f44df Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 13 Jul 2017 15:50:27 +0300 Subject: Add skip tests param --- stage2/plugins/ExportBuildInformation.scala | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 0cd340f..720ccbe 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -97,13 +97,13 @@ object BuildInformation { private def convertCbtLibraries = { val cbtBuild = DirectoryDependency(rootBuild.context.cbtHome)(rootBuild.context).dependenciesArray.head.asInstanceOf[BaseBuild] - transitiveBuilds(Seq(cbtBuild)) - .collect { - case d: BoundMavenDependency => d.jar - case d: PackageJars => d.jar.get - } - .map(exportLibrary) - .distinct + transitiveBuilds(Seq(cbtBuild), skipTests = true) + .collect { + case d: BoundMavenDependency => d.jar + case d: PackageJars => d.jar.get + } + .map(exportLibrary) + .distinct } private def collectDependencies(dependencies: Seq[Dependency]): Seq[ModuleDependency] = @@ -173,12 +173,12 @@ object BuildInformation { } // More effectively to call on a all builds at once rather than on one per time - private def transitiveBuilds(builds: Seq[BaseBuild]): Seq[BaseBuild] = { + private def transitiveBuilds(builds: Seq[BaseBuild], skipTests: Boolean = false): Seq[BaseBuild] = { def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = (build +: build.transitiveDependencies) .collect { case d: BaseBuild => - Seq(d) ++ parentBuild(d) ++ testBuild(d) + Seq(d) ++ parentBuild(d) ++ (if (!skipTests) testBuild(d) else Seq.empty) case d: LazyDependency => lazyBuild(d.dependency) } -- cgit v1.2.3 From 1ef79ba690dafb04333173afa046fe5d63d39c97 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Jul 2017 13:42:50 +0300 Subject: Optimization of transitiveDependencies method --- stage2/plugins/ExportBuildInformation.scala | 39 ++++++++++++----------------- 1 file changed, 16 insertions(+), 23 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 720ccbe..3fd7394 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -160,32 +160,25 @@ object BuildInformation { .map(_.toFile) } - private def lazyBuild(dependency: Dependency): Seq[BaseBuild] = - dependency match { - case l: LazyDependency => - l.dependency match { - case d: BaseBuild => Seq(d) - case d: LazyDependency => lazyBuild(d.dependency) - case _ => Seq.empty - } - case d: BaseBuild => Seq(d) - case _ => Seq.empty - } - // More effectively to call on a all builds at once rather than on one per time private def transitiveBuilds(builds: Seq[BaseBuild], skipTests: Boolean = false): Seq[BaseBuild] = { def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = - (build +: build.transitiveDependencies) - .collect { - case d: BaseBuild => - Seq(d) ++ parentBuild(d) ++ (if (!skipTests) testBuild(d) else Seq.empty) - case d: LazyDependency => - lazyBuild(d.dependency) - } - .flatten - .distinct - .filterNot(visited.contains) - .foldLeft(build +: visited)(traverse) + if (visited.contains(build)) + visited + else + (Seq(build) ++ + build.transitiveDependencies ++ + parentBuild(build) ++ + (if (!skipTests) testBuild(build) else Seq.empty) + ) + .collect { + case d: BaseBuild => + d + case d: LazyDependency if d.dependency.isInstanceOf[BaseBuild] => + d.dependency.asInstanceOf[BaseBuild] + } + .filterNot(visited.contains) + .foldLeft(build +: visited)(traverse) builds.foldLeft(Seq.empty[BaseBuild])(traverse) } -- cgit v1.2.3 From 2670b740a742b8ef746aac6e9dd0cf4a3e527872 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Jul 2017 18:05:27 +0300 Subject: Add module types --- stage2/plugins/ExportBuildInformation.scala | 85 +++++++++++++++++------------ 1 file changed, 51 insertions(+), 34 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index 3fd7394..d815aa0 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -28,6 +28,7 @@ object BuildInformation { root: File, scalaVersion: String, sourceDirs: Seq[File], + moduleType: ModuleType, target: File, binaryDependencies: Seq[BinaryDependency], moduleDependencies: Seq[ModuleDependency], @@ -53,6 +54,15 @@ object BuildInformation { object Source extends JarType( "source" ) } + case class ModuleType( name: String ) + + object ModuleType { + object Default extends ModuleType( "default" ) + object Extra extends ModuleType( "extra" ) + object Test extends ModuleType( "test" ) + object Build extends ModuleType( "build" ) + } + object Project { def apply(build: BaseBuild, args: Seq[String]): Project = { val parameters = ExportParameters(args) @@ -64,17 +74,15 @@ object BuildInformation { def exportBuildInformation: Project = { val extraModuleBuilds = extraModulePaths - .map(f => new File(f)) - .filter(f => f.exists && f.isDirectory) .map(f => DirectoryDependency(f)(rootBuild.context).dependency.asInstanceOf[BaseBuild]) - - val builds = transitiveBuilds(rootBuild +: extraModuleBuilds) - val rootModule = exportModule(rootBuild) + val builds = transitiveBuilds((rootBuild, ModuleType.Default) +: extraModuleBuilds.map(b => (b, ModuleType.Extra))) + val rootModule = exportModule(rootBuild, ModuleType.Default) val modules = builds - .map(exportModule) + .map(m => exportModule(m._1, m._2)) .distinct val libraries = builds + .map(_._1) .flatMap(_.transitiveDependencies) .collect { case d: BoundMavenDependency => exportLibrary(d) } .distinct @@ -94,16 +102,18 @@ object BuildInformation { ) } + private def convertCbtLibraries = { val cbtBuild = DirectoryDependency(rootBuild.context.cbtHome)(rootBuild.context).dependenciesArray.head.asInstanceOf[BaseBuild] - transitiveBuilds(Seq(cbtBuild), skipTests = true) - .collect { - case d: BoundMavenDependency => d.jar - case d: PackageJars => d.jar.get - } - .map(exportLibrary) - .distinct + transitiveBuilds(Seq((cbtBuild, ModuleType.Default)), skipTests = true) + .map(_._1) + .collect { + case d: BoundMavenDependency => d.jar + case d: PackageJars => d.jar.get + } + .map(exportLibrary) + .distinct } private def collectDependencies(dependencies: Seq[Dependency]): Seq[ModuleDependency] = @@ -114,7 +124,7 @@ object BuildInformation { } .flatten - private def exportModule(build: BaseBuild): Module = { + private def exportModule(build: BaseBuild, moduleType: ModuleType): Module = { val moduleDependencies = collectDependencies(build.dependencies) val mavenDependencies = build.dependencies .collect { case d: BoundMavenDependency => BinaryDependency(formatMavenDependency(d.mavenDependency)) } @@ -137,6 +147,7 @@ object BuildInformation { scalaVersion = build.scalaVersion, sourceDirs = sourceDirs, target = build.target, + moduleType = moduleType, binaryDependencies = mavenDependencies, moduleDependencies = moduleDependencies, classpath = classpath, @@ -161,26 +172,31 @@ object BuildInformation { } // More effectively to call on a all builds at once rather than on one per time - private def transitiveBuilds(builds: Seq[BaseBuild], skipTests: Boolean = false): Seq[BaseBuild] = { - def traverse(visited: Seq[BaseBuild], build: BaseBuild): Seq[BaseBuild] = + private def transitiveBuilds(builds: Seq[(BaseBuild, ModuleType)], skipTests: Boolean = false): Seq[(BaseBuild, ModuleType)] = { + def traverse(visitedProd: (Seq[BaseBuild], Seq[ModuleType]), buildProd: (BaseBuild, ModuleType)): (Seq[BaseBuild], Seq[ModuleType]) = { + val (visited, moduleTypes) = visitedProd + val (build, moduleType) = buildProd if (visited.contains(build)) - visited - else - (Seq(build) ++ - build.transitiveDependencies ++ - parentBuild(build) ++ - (if (!skipTests) testBuild(build) else Seq.empty) + (visited, moduleTypes) + else { + val testBuildSeq = if (!skipTests) testBuild(build) else Seq.empty + (build.transitiveDependencies.map(d => (d, ModuleType.Default)) ++ + parentBuild(build).map(d => (d, ModuleType.Build)) ++ + testBuildSeq.map(d => (d, ModuleType.Test)) ) .collect { - case d: BaseBuild => - d - case d: LazyDependency if d.dependency.isInstanceOf[BaseBuild] => - d.dependency.asInstanceOf[BaseBuild] + case (d: BaseBuild, t) => + (d, t) + case (d: LazyDependency, t) if d.dependency.isInstanceOf[BaseBuild] => + (d.dependency.asInstanceOf[BaseBuild], t) } - .filterNot(visited.contains) - .foldLeft(build +: visited)(traverse) - - builds.foldLeft(Seq.empty[BaseBuild])(traverse) + .filterNot(b => visited.contains(b._1)) + .foldLeft(build +: visited, moduleType +: moduleTypes)(traverse) + } + } + val (collectedBuilds, collectedTypes) = builds + .foldLeft(Seq.empty[BaseBuild], Seq.empty[ModuleType])(traverse) + collectedBuilds.zip(collectedTypes) } private def exportLibrary(dependency: BoundMavenDependency) = { @@ -249,15 +265,16 @@ object BuildInformation { .replace("/", "-") } - private case class ExportParameters(extraModulePaths: Seq[String], needCbtLibs: Boolean) + private case class ExportParameters(extraModulePaths: Seq[File], needCbtLibs: Boolean) private object ExportParameters { def apply(args: Seq[String]): ExportParameters = { val argumentParser = new ArgumentParser(args) - val extraModulePaths: Seq[String] = argumentParser.value("extraModules") + val extraModulePaths = argumentParser.value("extraModules") .map(_.split(":").toSeq) .getOrElse(Seq.empty) - .filterNot(_.isEmpty) + .map(p => new File(p)) + .filter(f => f.exists && f.isDirectory) val needCbtLibs: Boolean = argumentParser.value("needCbtLibs").forall(_.toBoolean) ExportParameters(extraModulePaths, needCbtLibs) } @@ -285,7 +302,7 @@ object BuildInformationSerializer { private def serialize(module: BuildInformation.Module): Node = - + {module.sourceDirs.map(d => {d.getPath: String})} -- cgit v1.2.3 From 51f41b5a5c5f37ef638ed010d55c8c4aa5da0108 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Jul 2017 18:20:40 +0300 Subject: Add export to file support --- stage2/plugins/ExportBuildInformation.scala | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index d815aa0..b510c08 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -7,8 +7,17 @@ import scala.xml._ import scala.util._ trait ExportBuildInformation { self: BaseBuild => - def buildInfoXml: String = - BuildInformationSerializer.serialize(BuildInformation.Project(self, context.args)).toString + def buildInfoXml: String = { + val parameters = BuildInformation.Project.ExportParameters(context.args) + val xml = BuildInformationSerializer.serialize(BuildInformation.Project(self, parameters)) + parameters.outputFile match { + case None => + xml.toString + case Some(file) => + XML.save(file.getPath, xml) + s"Saved to ${file.getPath}" + } + } } object BuildInformation { @@ -64,8 +73,7 @@ object BuildInformation { } object Project { - def apply(build: BaseBuild, args: Seq[String]): Project = { - val parameters = ExportParameters(args) + def apply(build: BaseBuild, parameters: ExportParameters): Project = { new BuildInformationExporter(build, parameters).exportBuildInformation } @@ -265,9 +273,9 @@ object BuildInformation { .replace("/", "-") } - private case class ExportParameters(extraModulePaths: Seq[File], needCbtLibs: Boolean) + case class ExportParameters(extraModulePaths: Seq[File], needCbtLibs: Boolean, outputFile: Option[File]) - private object ExportParameters { + object ExportParameters { def apply(args: Seq[String]): ExportParameters = { val argumentParser = new ArgumentParser(args) val extraModulePaths = argumentParser.value("extraModules") @@ -276,7 +284,8 @@ object BuildInformation { .map(p => new File(p)) .filter(f => f.exists && f.isDirectory) val needCbtLibs: Boolean = argumentParser.value("needCbtLibs").forall(_.toBoolean) - ExportParameters(extraModulePaths, needCbtLibs) + val outputFile = argumentParser.value("outputFile").map(p => new File(p)) + ExportParameters(extraModulePaths, needCbtLibs, outputFile) } } -- cgit v1.2.3 From d316f02fb73de71d028940fd597aaa1f6d3449fb Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Jul 2017 18:31:56 +0300 Subject: Add distinct to scala compilers --- stage2/plugins/ExportBuildInformation.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/stage2/plugins/ExportBuildInformation.scala b/stage2/plugins/ExportBuildInformation.scala index b510c08..37dcc38 100644 --- a/stage2/plugins/ExportBuildInformation.scala +++ b/stage2/plugins/ExportBuildInformation.scala @@ -98,6 +98,7 @@ object BuildInformation { val scalaCompilers = modules .map(_.scalaVersion) .map(v => ScalaCompiler(v, resolveScalaCompiler(v))) + .distinct Project( name = rootModule.name, -- cgit v1.2.3 From e098ec58f6191b4934276dc5a3d65279f79cbbcc Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 17 Jul 2017 19:02:32 +0300 Subject: Add test --- examples/export-build-information/expected.xml | 107 +++++++++++++++++++++++++ test/test.scala | 11 +++ 2 files changed, 118 insertions(+) create mode 100644 examples/export-build-information/expected.xml diff --git a/examples/export-build-information/expected.xml b/examples/export-build-information/expected.xml new file mode 100644 index 0000000..9eb4320 --- /dev/null +++ b/examples/export-build-information/expected.xml @@ -0,0 +1,107 @@ + + + + + CBT_HOME/examples/export-build-information/build/build + + + + + + org.scala-lang:scala-library:2.11.8 + + + + CBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jarCBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6.jarCBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6.jarCBT_HOME/cache/maven/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jarCBT_HOME/cache/maven/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jarCBT_HOME/cache/maven/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jarCBT_HOME/cache/maven/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9.jarCBT_HOME/cache/maven/com/jcraft/jsch/0.1.53/jsch-0.1.53.jarCBT_HOME/cache/maven/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jarCBT_HOME/cache/maven/net/java/dev/jna/jna-platform/4.4.0/jna-platform-4.4.0.jarCBT_HOME/cache/maven/org/eclipse/jgit/org.eclipse.jgit/4.2.0.201601211800-r/org.eclipse.jgit-4.2.0.201601211800-r.jar + + + + + CBT_HOME/examples/export-build-information/build + + + + + + org.scala-lang:scala-library:2.11.8org.scala-lang.modules:scala-xml_2.11:1.0.6 + + + + CBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jarCBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6.jarCBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6.jarCBT_HOME/cache/maven/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jarCBT_HOME/cache/maven/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jarCBT_HOME/cache/maven/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jarCBT_HOME/cache/maven/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9.jarCBT_HOME/cache/maven/com/jcraft/jsch/0.1.53/jsch-0.1.53.jarCBT_HOME/cache/maven/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jarCBT_HOME/cache/maven/net/java/dev/jna/jna-platform/4.4.0/jna-platform-4.4.0.jarCBT_HOME/cache/maven/org/eclipse/jgit/org.eclipse.jgit/4.2.0.201601211800-r/org.eclipse.jgit-4.2.0.201601211800-r.jar + + build-build + + + CBT_HOME/examples/export-build-information + + + + + + org.scala-lang:scala-library:2.11.8 + + + + CBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jar + + build + + + + + CBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8-sources.jar + + CBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6.jarCBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6-sources.jar + + CBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jarCBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3-sources.jar + + CBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3-sources.jar + + CBT_HOME/cache/maven/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.6/scala-library-2.11.6.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4-sources.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.6/scala-library-2.11.6-sources.jar + + CBT_HOME/cache/maven/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-xml_2.11/1.0.6/scala-xml_2.11-1.0.6-sources.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8-sources.jar + + CBT_HOME/cache/maven/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8-sources.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8-sources.jar + + CBT_HOME/cache/maven/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jarCBT_HOME/cache/maven/net/java/dev/jna/jna/4.4.0/jna-4.4.0-sources.jar + + CBT_HOME/cache/maven/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jarCBT_HOME/cache/maven/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2-sources.jar + + CBT_HOME/cache/maven/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jarCBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6.jarCBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6-sources.jarCBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6-sources.jarCBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3-sources.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3-sources.jar + + CBT_HOME/cache/maven/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9.jarCBT_HOME/cache/maven/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9-sources.jar + + CBT_HOME/cache/maven/com/jcraft/jsch/0.1.53/jsch-0.1.53.jarCBT_HOME/cache/maven/com/jcraft/jsch/0.1.53/jsch-0.1.53-sources.jar + + CBT_HOME/cache/maven/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-xml_2.11/1.0.4/scala-xml_2.11-1.0.4.jarCBT_HOME/cache/maven/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8-sources.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8-sources.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4-sources.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-xml_2.11/1.0.4/scala-xml_2.11-1.0.4-sources.jarCBT_HOME/cache/maven/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8-sources.jar + + CBT_HOME/cache/maven/net/java/dev/jna/jna-platform/4.4.0/jna-platform-4.4.0.jarCBT_HOME/cache/maven/net/java/dev/jna/jna/4.4.0/jna-4.4.0.jarCBT_HOME/cache/maven/net/java/dev/jna/jna-platform/4.4.0/jna-platform-4.4.0-sources.jarCBT_HOME/cache/maven/net/java/dev/jna/jna/4.4.0/jna-4.4.0-sources.jar + + CBT_HOME/cache/maven/org/eclipse/jgit/org.eclipse.jgit/4.2.0.201601211800-r/org.eclipse.jgit-4.2.0.201601211800-r.jarCBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6.jarCBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3.jarCBT_HOME/cache/maven/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6.jarCBT_HOME/cache/maven/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9.jarCBT_HOME/cache/maven/com/jcraft/jsch/0.1.53/jsch-0.1.53.jarCBT_HOME/cache/maven/org/eclipse/jgit/org.eclipse.jgit/4.2.0.201601211800-r/org.eclipse.jgit-4.2.0.201601211800-r-sources.jarCBT_HOME/cache/maven/commons-codec/commons-codec/1.6/commons-codec-1.6-sources.jarCBT_HOME/cache/maven/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3-sources.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpcore/4.3.3/httpcore-4.3.3-sources.jarCBT_HOME/cache/maven/org/slf4j/slf4j-api/1.7.2/slf4j-api-1.7.2-sources.jarCBT_HOME/cache/maven/org/apache/httpcomponents/httpclient/4.3.6/httpclient-4.3.6-sources.jarCBT_HOME/cache/maven/com/googlecode/javaewah/JavaEWAH/0.7.9/JavaEWAH-0.7.9-sources.jarCBT_HOME/cache/maven/com/jcraft/jsch/0.1.53/jsch-0.1.53-sources.jar + + + + + CBT_HOME/libraries/process/target/scala-2.11/process_2.11-0.9-SNAPSHOT.jar + + CBT_HOME/libraries/eval/target/scala-2.11/eval_2.11-0.9-SNAPSHOT.jar + + CBT_HOME/libraries/interfaces/target/scala-2.11/interfaces_2.11-0.9-SNAPSHOT.jar + + CBT_HOME/libraries/common-0/target/scala-2.11/common-0_2.11-0.9-SNAPSHOT.jar + + CBT_HOME/libraries/common-1/target/scala-2.11/common-1_2.11-0.9-SNAPSHOT.jar + + CBT_HOME/libraries/file/target/scala-2.11/file_2.11-0.9-SNAPSHOT.jar + + CBT_HOME/libraries/reflect/target/scala-2.11/reflect_2.11-0.9-SNAPSHOT.jar + + CBT_HOME/target/scala-2.11/cbt_2.11-0.9-SNAPSHOT.jar + + + + + CBT_HOME/cache/maven/org/scala-lang/scala-compiler/2.11.8/scala-compiler-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/scala-library/2.11.8/scala-library-2.11.8.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-parser-combinators_2.11/1.0.4/scala-parser-combinators_2.11-1.0.4.jarCBT_HOME/cache/maven/org/scala-lang/modules/scala-xml_2.11/1.0.4/scala-xml_2.11-1.0.4.jarCBT_HOME/cache/maven/org/scala-lang/scala-reflect/2.11.8/scala-reflect-2.11.8.jar + + + \ No newline at end of file diff --git a/test/test.scala b/test/test.scala index 9cb7fd9..adb4d8a 100644 --- a/test/test.scala +++ b/test/test.scala @@ -506,6 +506,17 @@ object Main{ assert(res.exit0) } + if (slow) { + import scala.xml._ + val expected = + (cbtHome / "examples" / "export-build-information" / "expected.xml").readAsString.replaceAll("CBT_HOME", cbtHome.getPath) + val expectedXml = Utility.trim(XML.loadString(expected)) + val res = runCbt("../examples/export-build-information", Seq("buildInfoXml")) + assert(res.exit0) + val resultXml = Utility.trim(XML.loadString(res.out)) + assert(resultXml == expectedXml) + } + /* // currently fails with // java.lang.UnsupportedOperationException: scalafix.rewrite.ScalafixMirror.fromMirror $anon#typeSignature requires the semantic api -- cgit v1.2.3