From 0f3655bcdc475e91b644dc1e8f87076df3bd9dd0 Mon Sep 17 00:00:00 2001 From: Julia Beliaeva Date: Tue, 18 Jun 2019 23:55:24 +0300 Subject: [PATCH] [vcs-log] only create log when there are roots to create it for GitOrigin-RevId: cbfae447738518879acd281d414bd442df4b1d34 --- .../intellij/vcs/log/impl/VcsLogManager.java | 5 ++- .../intellij/vcs/log/impl/VcsProjectLog.java | 35 ++++++++++++------- 2 files changed, 24 insertions(+), 16 deletions(-) diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java index 2f77d8a68468..e30d944560eb 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogManager.java @@ -49,19 +49,18 @@ public class VcsLogManager implements Disposable { @NotNull private final PostponableLogRefresher myPostponableRefresher; public VcsLogManager(@NotNull Project project, @NotNull VcsLogTabsProperties uiProperties, @NotNull Collection roots) { - this(project, uiProperties, roots, true, null); + this(project, uiProperties, findLogProviders(roots, project), true, null); } public VcsLogManager(@NotNull Project project, @NotNull VcsLogTabsProperties uiProperties, - @NotNull Collection roots, + @NotNull Map logProviders, boolean scheduleRefreshImmediately, @Nullable Consumer recreateHandler) { myProject = project; myUiProperties = uiProperties; myRecreateMainLogHandler = recreateHandler; - Map logProviders = findLogProviders(roots, myProject); MyFatalErrorsHandler fatalErrorsHandler = new MyFatalErrorsHandler(); myLogData = new VcsLogData(myProject, logProviders, fatalErrorsHandler, this); myPostponableRefresher = new PostponableLogRefresher(myLogData); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java index c63eb9837ef1..91dfbbaf1579 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsProjectLog.java @@ -28,15 +28,18 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsRoot; import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier; +import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.messages.MessageBus; import com.intellij.util.messages.Topic; import com.intellij.util.ui.UIUtil; +import com.intellij.vcs.log.VcsLogProvider; import com.intellij.vcs.log.data.VcsLogData; import com.intellij.vcs.log.ui.VcsLogUiImpl; import org.jetbrains.annotations.*; import java.util.Arrays; import java.util.Collection; +import java.util.Map; import static com.intellij.vcs.log.util.PersistentUtil.LOG_CACHE; @@ -105,9 +108,7 @@ public class VcsProjectLog implements Disposable { private void recreateLog() { UIUtil.invokeLaterIfNeeded(() -> myLogManager.drop(() -> { if (myProject.isDisposed()) return; - if (hasDvcsRoots()) { - createLog(false); - } + createLog(false); })); } @@ -134,7 +135,15 @@ public class VcsProjectLog implements Disposable { @CalledInBackground public void createLog(boolean forceInit) { - VcsLogManager logManager = myLogManager.getValue(); + Map logProviders = getLogProviders(); + if (!logProviders.isEmpty()) { + createLog(logProviders, forceInit); + } + } + + @CalledInBackground + private void createLog(@NotNull Map logProviders, boolean forceInit) { + VcsLogManager logManager = myLogManager.getValue(logProviders); ApplicationManager.getApplication().invokeLater(() -> { if (logManager.isLogVisible() || forceInit) { @@ -149,8 +158,9 @@ public class VcsProjectLog implements Disposable { }); } - private boolean hasDvcsRoots() { - return !VcsLogManager.findLogProviders(getVcsRoots(), myProject).isEmpty(); + @NotNull + private Map getLogProviders() { + return VcsLogManager.findLogProviders(Arrays.asList(ProjectLevelVcsManager.getInstance(myProject).getAllVcsRoots()), myProject); } public static VcsProjectLog getInstance(@NotNull Project project) { @@ -167,9 +177,9 @@ public class VcsProjectLog implements Disposable { @NotNull @CalledInBackground - public synchronized VcsLogManager getValue() { + public synchronized VcsLogManager getValue(@NotNull Map logProviders) { if (myValue == null) { - VcsLogManager value = compute(); + VcsLogManager value = compute(logProviders); myValue = value; ApplicationManager.getApplication().invokeLater(() -> { if (!myProject.isDisposed()) myMessageBus.syncPublisher(VCS_PROJECT_LOG_CHANGED).logCreated(value); @@ -180,8 +190,9 @@ public class VcsProjectLog implements Disposable { @NotNull @CalledInBackground - protected synchronized VcsLogManager compute() { - return new VcsLogManager(myProject, myUiProperties, getVcsRoots(), false, VcsProjectLog.this::recreateOnError); + protected VcsLogManager compute(@NotNull Map logProviders) { + return new VcsLogManager(myProject, myUiProperties, logProviders, false, + VcsProjectLog.this::recreateOnError); } @CalledInAwt @@ -216,9 +227,7 @@ public class VcsProjectLog implements Disposable { ApplicationManager.getApplication().executeOnPooledThread(() -> { projectLog.subscribeToMappingsChanges(); - if (projectLog.hasDvcsRoots()) { - projectLog.createLog(false); - } + projectLog.createLog(false); }); } }