From 041dacd1693cce49d02783e16d66f6372f8b5ec1 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Mon, 13 Aug 2018 23:47:52 +0300 Subject: [PATCH] [vcs-log] speed up hash filter for full hashes Instead of searching by a string, create a Hash instance and do a direct check. --- .../vcs/log/visible/VcsLogFiltererImpl.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.java index d51ed14f7ad8..453a57bbc71a 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/visible/VcsLogFiltererImpl.java @@ -31,6 +31,7 @@ import com.intellij.vcs.log.data.index.VcsLogIndex; import com.intellij.vcs.log.graph.GraphCommit; import com.intellij.vcs.log.graph.PermanentGraph; import com.intellij.vcs.log.graph.VisibleGraph; +import com.intellij.vcs.log.impl.HashImpl; import com.intellij.vcs.log.impl.VcsLogFilterCollectionImpl.VcsLogFilterCollectionBuilder; import com.intellij.vcs.log.impl.VcsLogHashFilterImpl; import com.intellij.vcs.log.ui.filter.VcsLogTextFilterImpl; @@ -186,10 +187,21 @@ public class VcsLogFiltererImpl implements VcsLogFilterer { @NotNull Collection hashes, @NotNull PermanentGraph.SortType sortType, @NotNull CommitCountStage commitCount) { - Set hashFilterResult = ContainerUtil.map2SetNotNull(hashes, partOfHash -> { - CommitId commitId = myStorage.findCommitId(new CommitIdByStringCondition(partOfHash)); - return commitId != null ? myStorage.getCommitIndex(commitId.getHash(), commitId.getRoot()) : null; - }); + Set hashFilterResult = ContainerUtil.newHashSet(); + for (String partOfHash : hashes) { + if (partOfHash.length() == VcsLogUtil.FULL_HASH_LENGTH) { + Hash hash = HashImpl.build(partOfHash); + for (VirtualFile root : dataPack.getLogProviders().keySet()) { + if (myStorage.containsCommit(new CommitId(hash, root))) { + hashFilterResult.add(myStorage.getCommitIndex(hash, root)); + } + } + } + else { + CommitId commitId = myStorage.findCommitId(new CommitIdByStringCondition(partOfHash)); + if (commitId != null) hashFilterResult.add(myStorage.getCommitIndex(commitId.getHash(), commitId.getRoot())); + } + } VcsLogTextFilterImpl textFilter = new VcsLogTextFilterImpl(StringUtil.join(hashes, "|"), true, false); FilterByDetailsResult textFilterResult = filterByDetails(dataPack, new VcsLogFilterCollectionBuilder(textFilter).build(), commitCount, dataPack.getLogProviders().keySet(), null);