From c6a1054721616db07af1444bee029bff4baa4fbd Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Tue, 11 Mar 2014 19:40:08 +0400 Subject: [PATCH] IDEA-121990 Filter by old branch fails with exception if full graph is not loaded --- .../vcs/log/InvalidRequestException.java | 26 +++++++++++++++++++ .../log/newgraph/facade/CurrentBranches.java | 5 +++- .../intellij/vcs/log/data/VcsLogFilterer.java | 17 ++++++++++-- 3 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 platform/vcs-log/api/src/com/intellij/vcs/log/InvalidRequestException.java diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/InvalidRequestException.java b/platform/vcs-log/api/src/com/intellij/vcs/log/InvalidRequestException.java new file mode 100644 index 000000000000..20ac29980c18 --- /dev/null +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/InvalidRequestException.java @@ -0,0 +1,26 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.vcs.log; + +import org.jetbrains.annotations.NotNull; + +public class InvalidRequestException extends RuntimeException { + + public InvalidRequestException(@NotNull String message) { + super(message); + } + +} diff --git a/platform/vcs-log/graph/src/com/intellij/vcs/log/newgraph/facade/CurrentBranches.java b/platform/vcs-log/graph/src/com/intellij/vcs/log/newgraph/facade/CurrentBranches.java index 947a569f7076..d4e0ff19ac83 100644 --- a/platform/vcs-log/graph/src/com/intellij/vcs/log/newgraph/facade/CurrentBranches.java +++ b/platform/vcs-log/graph/src/com/intellij/vcs/log/newgraph/facade/CurrentBranches.java @@ -16,6 +16,7 @@ package com.intellij.vcs.log.newgraph.facade; import com.intellij.util.containers.HashSet; +import com.intellij.vcs.log.InvalidRequestException; import com.intellij.vcs.log.newgraph.PermanentGraph; import com.intellij.vcs.log.newgraph.SomeGraph; import com.intellij.vcs.log.newgraph.utils.DfsUtil; @@ -54,7 +55,9 @@ public class CurrentBranches { if (heads.contains(myPermanentGraph.getHashIndex(i))) startedNodes.add(i); } - assert !startedNodes.isEmpty(); + if (startedNodes.size() != heads.size() || heads.isEmpty()) { + throw new InvalidRequestException("Heads size is invalid! startedNodes " + startedNodes + "; heads: " + heads); + } selectAllVisibleNodes(startedNodes); } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java index 5f007b3459a8..c8d276872d34 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogFilterer.java @@ -2,11 +2,14 @@ package com.intellij.vcs.log.data; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.EmptyRunnable; import com.intellij.openapi.util.Ref; import com.intellij.util.Consumer; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.HashSet; import com.intellij.util.ui.UIUtil; import com.intellij.vcs.log.*; import com.intellij.vcs.log.impl.VcsLogUtil; @@ -19,7 +22,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; -import java.util.HashSet; import java.util.List; import java.util.Set; @@ -121,7 +123,18 @@ public class VcsLogFilterer { myUI.getTable().executeWithoutRepaint(new Runnable() { @Override public void run() { - dataPack.getGraphFacade().setVisibleBranches(branchFilter != null ? getMatchingHeads(dataPack, branchFilter) : null); + try { + dataPack.getGraphFacade().setVisibleBranches(branchFilter != null ? getMatchingHeads(dataPack, branchFilter) : null); + } + catch (InvalidRequestException e) { + if (!myLogDataHolder.isFullLogShowing()) { + myLogDataHolder.showFullLog(EmptyRunnable.getInstance()); + throw new ProcessCanceledException(); + } + else { + throw e; + } + } } }); }