[vcs-log] only create log when there are roots to create it for

GitOrigin-RevId: cbfae447738518879acd281d414bd442df4b1d34
This commit is contained in:
Julia Beliaeva
2019-07-02 06:52:16 +03:00
committed by intellij-monorepo-bot
parent b8e768869d
commit 0f3655bcdc
2 changed files with 24 additions and 16 deletions
@@ -49,19 +49,18 @@ public class VcsLogManager implements Disposable {
@NotNull private final PostponableLogRefresher myPostponableRefresher;
public VcsLogManager(@NotNull Project project, @NotNull VcsLogTabsProperties uiProperties, @NotNull Collection<? extends VcsRoot> 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<? extends VcsRoot> roots,
@NotNull Map<VirtualFile, VcsLogProvider> logProviders,
boolean scheduleRefreshImmediately,
@Nullable Consumer<? super Throwable> recreateHandler) {
myProject = project;
myUiProperties = uiProperties;
myRecreateMainLogHandler = recreateHandler;
Map<VirtualFile, VcsLogProvider> logProviders = findLogProviders(roots, myProject);
MyFatalErrorsHandler fatalErrorsHandler = new MyFatalErrorsHandler();
myLogData = new VcsLogData(myProject, logProviders, fatalErrorsHandler, this);
myPostponableRefresher = new PostponableLogRefresher(myLogData);
@@ -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<VirtualFile, VcsLogProvider> logProviders = getLogProviders();
if (!logProviders.isEmpty()) {
createLog(logProviders, forceInit);
}
}
@CalledInBackground
private void createLog(@NotNull Map<VirtualFile, VcsLogProvider> 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<VirtualFile, VcsLogProvider> 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<VirtualFile, VcsLogProvider> 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<VirtualFile, VcsLogProvider> 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);
});
}
}