diff --git a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLog.java b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLog.java index 31e116c9dfff..511854deaddc 100644 --- a/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLog.java +++ b/platform/vcs-log/api/src/com/intellij/vcs/log/VcsLog.java @@ -72,4 +72,10 @@ public interface VcsLog { @NotNull Component getToolbar(); + /** + * Returns {@link VcsLogProvider VcsLogProviders} which are active in this log, i.e. which VCS roots are shown in the log. + */ + @NotNull + Collection getLogProviders(); + } diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java index 939121dc4313..685490bfde19 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/data/VcsLogDataHolder.java @@ -491,6 +491,11 @@ public class VcsLogDataHolder implements Disposable { return myLogProviders.keySet(); } + @NotNull + public Collection getLogProviders() { + return myLogProviders.values(); + } + private static class RecentCommitsInfo { List firstBlockCommits; Collection newRefs; diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java index 50da09cce0c1..96fffeb5c212 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/impl/VcsLogImpl.java @@ -18,10 +18,7 @@ package com.intellij.vcs.log.impl; import com.intellij.openapi.util.Condition; import com.intellij.ui.table.JBTable; import com.intellij.util.containers.ContainerUtil; -import com.intellij.vcs.log.Hash; -import com.intellij.vcs.log.VcsFullCommitDetails; -import com.intellij.vcs.log.VcsLog; -import com.intellij.vcs.log.VcsRef; +import com.intellij.vcs.log.*; import com.intellij.vcs.log.data.VcsLogDataHolder; import com.intellij.vcs.log.ui.VcsLogUI; import com.intellij.vcs.log.ui.tables.AbstractVcsLogTableModel; @@ -115,4 +112,11 @@ public class VcsLogImpl implements VcsLog { public Component getToolbar() { return myUi.getToolbar(); } + + @NotNull + @Override + public Collection getLogProviders() { + return myDataHolder.getLogProviders(); + } + } diff --git a/plugins/git4idea/src/git4idea/GitUtil.java b/plugins/git4idea/src/git4idea/GitUtil.java index 42c8f1030d10..b507e4a6a161 100644 --- a/plugins/git4idea/src/git4idea/GitUtil.java +++ b/plugins/git4idea/src/git4idea/GitUtil.java @@ -23,6 +23,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.Task; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -37,7 +38,10 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; +import com.intellij.vcs.log.VcsLog; +import com.intellij.vcs.log.VcsLogProvider; import com.intellij.vcsUtil.VcsFileUtil; import com.intellij.vcsUtil.VcsUtil; import git4idea.branch.GitBranchUtil; @@ -951,4 +955,16 @@ public class GitUtil { repositoryManager.getRepositories())); } + /** + * Checks if there are Git roots in the VCS log. + */ + public static boolean logHasGitRoot(@NotNull VcsLog log) { + return ContainerUtil.find(log.getLogProviders(), new Condition() { + @Override + public boolean value(VcsLogProvider logProvider) { + return logProvider.getSupportedVcs().equals(GitVcs.getKey()); + } + }) != null; + } + } diff --git a/plugins/git4idea/src/git4idea/actions/GitLogSingleCommitAction.java b/plugins/git4idea/src/git4idea/actions/GitLogSingleCommitAction.java index 364b1f58b15e..0ec2ab63e877 100644 --- a/plugins/git4idea/src/git4idea/actions/GitLogSingleCommitAction.java +++ b/plugins/git4idea/src/git4idea/actions/GitLogSingleCommitAction.java @@ -83,7 +83,7 @@ public abstract class GitLogSingleCommitAction extends DumbAwareAction { } boolean isValid() { - return project != null && log != null; + return project != null && log != null && GitUtil.logHasGitRoot(log); } } diff --git a/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java b/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java index 41bb56105703..7d24caf30152 100644 --- a/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java +++ b/plugins/git4idea/src/git4idea/cherrypick/GitCherryPickAction.java @@ -29,6 +29,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.vcs.log.*; import git4idea.GitLocalBranch; import git4idea.GitPlatformFacade; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.commands.Git; import git4idea.config.GitVcsSettings; @@ -131,7 +132,13 @@ public class GitCherryPickAction extends DumbAwareAction { @Override public void update(AnActionEvent e) { super.update(e); - e.getPresentation().setEnabled(enabled(e)); + final VcsLog log = getVcsLog(e); + if (log != null && !GitUtil.logHasGitRoot(log)) { + e.getPresentation().setEnabledAndVisible(false); + } + else { + e.getPresentation().setEnabled(enabled(e)); + } } private boolean enabled(AnActionEvent e) {