mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[vcs-log] action in editor context menu for showing new log tab filtered by file in the editor
This commit is contained in:
committed by
Julia Beliaeva
parent
39ae38d5a0
commit
8564c3413f
@@ -302,6 +302,8 @@ vcs.log.highlight.not.indexed=false
|
||||
vcs.log.highlight.not.indexed.description=Highlight commits that are not indexed
|
||||
vcs.log.index.git=false
|
||||
vcs.log.index.git.description=Index all commits in Git repository for fast search
|
||||
vcs.log.graph.history=false
|
||||
vcs.log.graph.history.description=Action in context menu that opens a new log tab filtered by file in context
|
||||
|
||||
vcs.executable.validator.timeout.sec=60
|
||||
vcs.unversioned.files.in.commit=true
|
||||
|
||||
@@ -15,7 +15,7 @@ public interface VcsLogFilterUi {
|
||||
|
||||
/**
|
||||
* Sets the given filter to the given value and updates the log view. <br/>
|
||||
* <b>Note:</b> only VcsLogBranchFilter is currently supported.
|
||||
* <b>Note:</b> only VcsLogBranchFilter and VcsLogStructureFilter are currently supported.
|
||||
*/
|
||||
void setFilter(@NotNull VcsLogFilter filter);
|
||||
}
|
||||
|
||||
@@ -52,6 +52,8 @@
|
||||
<action class="com.intellij.vcs.log.ui.actions.OpenAnotherLogTabAction" id="Vcs.Log.OpenAnotherTab"/>
|
||||
<action class="com.intellij.vcs.log.ui.actions.CloseLogTabAction" id="Vcs.Log.CloseLogTabAction"/>
|
||||
<action class="com.intellij.vcs.log.ui.actions.RefreshLogAction" id="Vcs.Log.Refresh" use-shortcut-of="Refresh"/>
|
||||
<action class="com.intellij.vcs.log.ui.actions.ShowGraphHistoryAction" id="Vcs.Show.Graph.History"
|
||||
text="Show History as Graph" description="Show History as Graph"/>
|
||||
|
||||
<group id="Vcs.Log.Settings">
|
||||
<reference id="Vcs.Log.ShowRootsColumnAction"/>
|
||||
|
||||
@@ -93,8 +93,12 @@ public class VcsLogContentProvider implements ChangesViewContentProvider {
|
||||
|
||||
public static void openAnotherLogTab(@NotNull VcsLogManager logManager, @NotNull Project project) {
|
||||
ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.VCS);
|
||||
openLogTab(logManager, project, generateShortName(toolWindow));
|
||||
}
|
||||
|
||||
public static VcsLogUiImpl openLogTab(@NotNull VcsLogManager logManager, @NotNull Project project, @NotNull String shortName) {
|
||||
ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(ToolWindowId.VCS);
|
||||
|
||||
String shortName = generateShortName(toolWindow);
|
||||
String name = ContentUtilEx.getFullName(TAB_NAME, shortName);
|
||||
|
||||
VcsLogUiImpl logUi = logManager.createLogUi(name, name);
|
||||
@@ -104,6 +108,7 @@ public class VcsLogContentProvider implements ChangesViewContentProvider {
|
||||
toolWindow.activate(null);
|
||||
|
||||
logManager.scheduleInitialization();
|
||||
return logUi;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
/*
|
||||
* Copyright 2000-2016 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.vcs.log.ui.actions;
|
||||
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.CommonDataKeys;
|
||||
import com.intellij.openapi.actionSystem.Presentation;
|
||||
import com.intellij.openapi.project.DumbAwareAction;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.vcs.log.data.VcsLogData;
|
||||
import com.intellij.vcs.log.data.VcsLogStructureFilterImpl;
|
||||
import com.intellij.vcs.log.impl.VcsLogContentProvider;
|
||||
import com.intellij.vcs.log.impl.VcsLogManager;
|
||||
import com.intellij.vcs.log.impl.VcsProjectLog;
|
||||
import com.intellij.vcs.log.ui.VcsLogUiImpl;
|
||||
import com.intellij.vcsUtil.VcsUtil;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
public class ShowGraphHistoryAction extends DumbAwareAction {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
Project project = e.getProject();
|
||||
assert project != null;
|
||||
VirtualFile file = e.getRequiredData(CommonDataKeys.VIRTUAL_FILE);
|
||||
VcsLogManager logManager = VcsProjectLog.getInstance(project).getLogManager();
|
||||
assert logManager != null;
|
||||
VcsLogUiImpl ui = VcsLogContentProvider.openLogTab(logManager, project, file.getName());
|
||||
ui.getFilterUi().setFilter(new VcsLogStructureFilterImpl(Collections.singleton(VcsUtil.getFilePath(file))));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(AnActionEvent e) {
|
||||
Presentation presentation = e.getPresentation();
|
||||
if (!Registry.is("vcs.log.graph.history")) {
|
||||
presentation.setEnabledAndVisible(false);
|
||||
}
|
||||
else {
|
||||
VirtualFile file = e.getData(CommonDataKeys.VIRTUAL_FILE);
|
||||
Project project = e.getProject();
|
||||
if (file == null || project == null) {
|
||||
presentation.setEnabledAndVisible(false);
|
||||
}
|
||||
else {
|
||||
VirtualFile root = ProjectLevelVcsManager.getInstance(project).getVcsRootFor(file);
|
||||
VcsLogData dataManager = VcsProjectLog.getInstance(project).getDataManager();
|
||||
if (root == null || dataManager == null) {
|
||||
presentation.setEnabledAndVisible(false);
|
||||
}
|
||||
else {
|
||||
presentation.setEnabledAndVisible(dataManager.getIndex().isIndexed(root));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -51,6 +51,9 @@ import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*/
|
||||
@@ -207,10 +210,13 @@ public class VcsLogClassicFilterUi implements VcsLogFilterUi {
|
||||
ApplicationManager.getApplication().assertIsDispatchThread();
|
||||
if (filter instanceof VcsLogBranchFilter) {
|
||||
myBranchFilterModel.setFilter((VcsLogBranchFilter)filter);
|
||||
JComponent toolbar = myUi.getToolbar();
|
||||
toolbar.revalidate();
|
||||
toolbar.repaint();
|
||||
}
|
||||
else if (filter instanceof VcsLogStructureFilter) {
|
||||
myStructureFilterModel.setFilter(new VcsLogFileFilter((VcsLogStructureFilter)filter, null));
|
||||
}
|
||||
JComponent toolbar = myUi.getToolbar();
|
||||
toolbar.revalidate();
|
||||
toolbar.repaint();
|
||||
}
|
||||
|
||||
private static class FilterActionComponent extends DumbAwareAction implements CustomComponentAction {
|
||||
|
||||
@@ -49,6 +49,7 @@
|
||||
<action id="Git.CompareWithBranch" class="git4idea.actions.GitCompareWithBranchAction" text="Compare with Branch..." />
|
||||
<reference ref="Vcs.ShowTabbedFileHistory"/>
|
||||
<reference id="Vcs.ShowHistoryForBlock"/>
|
||||
<reference id="Vcs.Show.Graph.History"/>
|
||||
<separator/>
|
||||
<reference id="ChangesView.Revert" />
|
||||
<action id="Git.ResolveConflicts" class="git4idea.actions.GitResolveConflictsAction" text="Resolve Conflicts..."/>
|
||||
|
||||
Reference in New Issue
Block a user