mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] properly dispose external log
This commit is contained in:
@@ -33,14 +33,16 @@ import com.intellij.vcs.log.VcsLogProvider;
|
||||
import com.intellij.vcs.log.VcsLogRefresher;
|
||||
import com.intellij.vcs.log.data.VcsLogData;
|
||||
import com.intellij.vcs.log.data.VcsLogStorage;
|
||||
import com.intellij.vcs.log.ui.*;
|
||||
import com.intellij.vcs.log.ui.AbstractVcsLogUi;
|
||||
import com.intellij.vcs.log.ui.VcsLogColorManager;
|
||||
import com.intellij.vcs.log.ui.VcsLogColorManagerImpl;
|
||||
import com.intellij.vcs.log.ui.VcsLogUiImpl;
|
||||
import com.intellij.vcs.log.visible.VcsLogFilterer;
|
||||
import com.intellij.vcs.log.visible.VisiblePackRefresherImpl;
|
||||
import org.jetbrains.annotations.CalledInAwt;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
@@ -103,12 +105,6 @@ public class VcsLogManager implements Disposable {
|
||||
return myLogData;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JComponent createLogPanel(@NotNull String logId, @Nullable String contentTabName) {
|
||||
AbstractVcsLogUi ui = createLogUi(logId, contentTabName);
|
||||
return new VcsLogPanel(this, ui);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public VcsLogUiImpl createLogUi(@NotNull String logId, @Nullable String contentTabName) {
|
||||
return createLogUi(contentTabName, getMainLogUiFactory(logId));
|
||||
|
||||
@@ -18,6 +18,7 @@ package git4idea.log;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.fileChooser.FileChooser;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
@@ -45,6 +46,8 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.vcs.log.impl.VcsLogContentProvider;
|
||||
import com.intellij.vcs.log.impl.VcsLogManager;
|
||||
import com.intellij.vcs.log.impl.VcsLogTabsProperties;
|
||||
import com.intellij.vcs.log.ui.AbstractVcsLogUi;
|
||||
import com.intellij.vcs.log.ui.VcsLogPanel;
|
||||
import git4idea.GitUtil;
|
||||
import git4idea.GitVcs;
|
||||
import git4idea.config.GitVersion;
|
||||
@@ -120,10 +123,16 @@ public class GitShowExternalLogAction extends DumbAwareAction {
|
||||
}
|
||||
VcsLogManager manager = new VcsLogManager(project, ServiceManager.getService(project, VcsLogTabsProperties.class),
|
||||
ContainerUtil.map(roots, root -> new VcsRoot(vcs, root)));
|
||||
return new MyContentComponent(manager.createLogPanel(calcLogId(roots), tabName), roots, () -> {
|
||||
for (VirtualFile root : roots) {
|
||||
repositoryManager.removeExternalRepository(root);
|
||||
}
|
||||
AbstractVcsLogUi ui = manager.createLogUi(calcLogId(roots), tabName);
|
||||
return new MyContentComponent(new VcsLogPanel(manager, ui), roots, () -> {
|
||||
Disposer.dispose(ui);
|
||||
manager.disposeUi();
|
||||
ApplicationManager.getApplication().executeOnPooledThread(() -> {
|
||||
Disposer.dispose(manager);
|
||||
for (VirtualFile root : roots) {
|
||||
repositoryManager.removeExternalRepository(root);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user