[vcs-log] properly dispose external log

This commit is contained in:
Julia Beliaeva
2017-08-21 02:23:18 +03:00
parent 21c969285f
commit c261ff3b94
2 changed files with 17 additions and 12 deletions
@@ -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);
}
});
});
}