mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] only create log when there are roots to create it for
GitOrigin-RevId: cbfae447738518879acd281d414bd442df4b1d34
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b8e768869d
commit
0f3655bcdc
@@ -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);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user