From 219eef7bbdeb01a7197d34be85bf1b23726fa049 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Wed, 2 Jan 2019 22:14:15 +0300 Subject: [PATCH] [vcs-log] speedup getting heads matched by branch filter by looking only on branches in visible roots --- .../vcs/log/visible/VcsLogFiltererImpl.kt | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.kt b/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.kt index 18a1278496bf..f85fd8aa0901 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.kt +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.kt @@ -20,7 +20,7 @@ import com.intellij.vcs.log.visible.filters.VcsLogFilterObject import com.intellij.vcs.log.visible.filters.VcsLogFilterObject.fromHashes import com.intellij.vcs.log.visible.filters.with import com.intellij.vcs.log.visible.filters.without -import java.util.* +import java.util.stream.Collectors class VcsLogFiltererImpl(private val logProviders: Map, private val storage: VcsLogStorage, @@ -209,21 +209,17 @@ class VcsLogFiltererImpl(private val logProviders: Map { - return refs.branches.filter { filter.matches(it.name) }.toReferencedCommitIndexes() + private fun getMatchingHeads(refsModel: RefsModel, roots: Collection, filter: VcsLogBranchFilter): Set { + return mapRefsForRoots(refsModel, roots) { refs -> + refs.streamBranches().filter { filter.matches(it.name) }.collect(Collectors.toList()) + }.toReferencedCommitIndexes() } private fun getMatchingHeads(roots: Collection, filter: VcsLogRevisionFilter): Set { @@ -231,9 +227,12 @@ class VcsLogFiltererImpl(private val logProviders: Map): Set { - return refsModel.allRefsByRoot.filterKeys { roots.contains(it) }.values.flatMapTo(mutableSetOf()) { refs -> refs.commits } + return mapRefsForRoots(refsModel, roots) { refs -> refs.commits } } + private fun mapRefsForRoots(refsModel: RefsModel, roots: Collection, mapping: (CompressedRefs) -> Iterable) = + refsModel.allRefsByRoot.filterKeys { roots.contains(it) }.values.flatMapTo(mutableSetOf(), mapping) + private fun filterDetailsInMemory(permanentGraph: PermanentGraph, detailsFilters: List, matchingHeads: Set?): Collection {