diff options
author | Ilya Kirillov <darthorimar@users.noreply.github.com> | 2017-07-17 13:42:50 +0300 |
---|---|---|
committer | Ilya Kirillov <darthorimar@users.noreply.github.com> | 2017-07-17 19:34:17 +0300 |
commit | 1ef79ba690dafb04333173afa046fe5d63d39c97 (patch) | |
tree | d98f94d74ab91d8db9c9e410ca4178e211956440 | |
parent | 88d01433b1ebcd1038ff29a72a8dcc78144f44df (diff) | |
download | cbt-1ef79ba690dafb04333173afa046fe5d63d39c97.tar.gz cbt-1ef79ba690dafb04333173afa046fe5d63d39c97.tar.bz2 cbt-1ef79ba690dafb04333173afa046fe5d63d39c97.zip |
Optimization of transitiveDependencies method
-rw-r--r-- | stage2/plugins/ExportBuildInformation.scala | 39 |
1 files 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) } |