Improve computation of numFiles and numDistinctFiles Optimize the computation of numFiles and numDistinctFiles: - Compute the list of affected files only once - Reply on the uniqueness of elements in a set to achieve distinction rather than folding over a union Change-Id: Ic9eb4b06a47d6169cd1584406b5bbb19243f670a
diff --git a/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala index ee230a3..ae1509c 100644 --- a/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala +++ b/src/main/scala/com/googlesource/gerrit/plugins/analytics/common/CommitsStatistics.scala
@@ -49,20 +49,20 @@ require(commits.forall(_.botLike == isForBotLike), s"Creating a stats object with isForBotLike = $isForBotLike but containing commits of different type") require(commits.forall(_.merge == isForMergeCommits), s"Creating a stats object with isMergeCommit = $isForMergeCommits but containing commits of different type") + private lazy val allFiles: List[String] = commits.flatMap(_.files) + /** * sum of the number of files in each of the included commits */ - val numFiles: Int = commits.map(_.files.size).sum + lazy val numFiles: Int = allFiles.size /** * number of distinct files the included commits have been touching */ - val numDistinctFiles: Int = changedFiles.size + lazy val numDistinctFiles: Int = allFiles.toSet.size def isEmpty: Boolean = commits.isEmpty - def changedFiles: Set[String] = commits.map(_.files.toSet).fold(Set.empty)(_ union _) - // Is not a proper monoid since we cannot sum a MergeCommit with a non merge one but it would overkill to define two classes def + (that: CommitsStatistics) = { require(this.isForMergeCommits == that.isForMergeCommits, "Cannot sum a merge commit stats with a non merge commit stats")