From ff49689cfe4da7a5c715469d9f3e0e1dbd6ef9f2 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Wed, 20 Jun 2012 16:25:46 +0400 Subject: [PATCH] [github] Open in Browser: disable for unversioned and new files (they are not on GitHub yet for sure) --- .../github/GithubOpenInBrowserAction.java | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java index 31bb529a9f9c..4d23f396ef10 100644 --- a/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java +++ b/plugins/github/src/org/jetbrains/plugins/github/GithubOpenInBrowserAction.java @@ -24,6 +24,8 @@ import com.intellij.openapi.project.DumbAwareAction; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vcs.VcsException; +import com.intellij.openapi.vcs.changes.Change; +import com.intellij.openapi.vcs.changes.ChangeListManager; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitBranch; import git4idea.GitUtil; @@ -48,38 +50,45 @@ public class GithubOpenInBrowserAction extends DumbAwareAction { @Override public void update(final AnActionEvent e) { - final boolean applicable = isApplicable(e); - e.getPresentation().setVisible(applicable); - e.getPresentation().setEnabled(applicable); - } - - private boolean isApplicable(final AnActionEvent e) { - final Project project = e.getData(PlatformDataKeys.PROJECT); - final VirtualFile virtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE); + Project project = e.getData(PlatformDataKeys.PROJECT); + VirtualFile virtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE); if (project == null || project.isDefault() || virtualFile == null) { - return false; + setVisibleEnabled(e, false, false); + return; } - - final VirtualFile dir = project.getBaseDir(); - if (dir == null) { - return false; - } - GitRepositoryManager manager = GitUtil.getRepositoryManager(project); - if (manager == null) { - return false; - } - final GitRepository gitRepository = manager.getRepositoryForFile(dir); + + final GitRepository gitRepository = manager.getRepositoryForFile(virtualFile); if (gitRepository == null) { - return false; + setVisibleEnabled(e, false, false); + return; } // Check that given repository is properly configured git repository final GitRemote gitHubRemoteBranch = GithubUtil.findGitHubRemoteBranch(gitRepository); if (gitHubRemoteBranch == null) { - return false; + setVisibleEnabled(e, false, false); + return; } - return true; + + ChangeListManager changeListManager = ChangeListManager.getInstance(project); + if (changeListManager.isUnversioned(virtualFile)) { + setVisibleEnabled(e, true, false); + return; + } + + Change change = changeListManager.getChange(virtualFile); + if (change != null && change.getType() == Change.Type.NEW) { + setVisibleEnabled(e, true, false); + return; + } + + setVisibleEnabled(e, true, true); + } + + private static void setVisibleEnabled(AnActionEvent e, boolean visible, boolean enabled) { + e.getPresentation().setVisible(visible); + e.getPresentation().setEnabled(enabled); } @SuppressWarnings("ConstantConditions")