aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Kirillov <darthorimar@users.noreply.github.com>2017-07-17 13:42:50 +0300
committerIlya Kirillov <darthorimar@users.noreply.github.com>2017-07-17 19:34:17 +0300
commit1ef79ba690dafb04333173afa046fe5d63d39c97 (patch)
treed98f94d74ab91d8db9c9e410ca4178e211956440
parent88d01433b1ebcd1038ff29a72a8dcc78144f44df (diff)
downloadcbt-1ef79ba690dafb04333173afa046fe5d63d39c97.tar.gz
cbt-1ef79ba690dafb04333173afa046fe5d63d39c97.tar.bz2
cbt-1ef79ba690dafb04333173afa046fe5d63d39c97.zip
Optimization of transitiveDependencies method
-rw-r--r--stage2/plugins/ExportBuildInformation.scala39
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)
}