Skip to content

Commit f81695c

Browse files
committed
Merge branch 'release/0.7.6'
2 parents 5b29fd8 + abd4f8c commit f81695c

8 files changed

+72
-37
lines changed

build.gradle

+12-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ compileJava {
88
}
99

1010
group 'gitflow4idea'
11-
version '0.7.5'
11+
version '0.7.6'
1212

1313
sourceCompatibility = JavaVersion.VERSION_1_8
1414
targetCompatibility = JavaVersion.VERSION_1_8
@@ -22,18 +22,25 @@ dependencies {
2222
}
2323

2424
intellij {
25-
version '2020.3'
25+
version '2021.1'
2626
plugins 'git4idea', 'tasks'
2727
}
2828

2929
patchPluginXml {
3030
pluginId "Gitflow"
3131
pluginDescription 'Git Flow Integration'
32-
version '0.7.5'
33-
sinceBuild '203.0'
34-
untilBuild '203.*'
32+
version '0.7.6'
33+
sinceBuild '211.0'
34+
untilBuild '211.*'
3535
changeNotes """
3636
37+
<H2>Changelog for 0.7.6</H2>
38+
<ul>
39+
<li>Fix "Error using shortcuts" #322</li>
40+
<li>fix Finishing BugFix throws stacktrace #320</li>
41+
<li>Support for 2021.1 build</li>
42+
</ul>
43+
3744
<H2>Changelog for 0.7.5</H2>
3845
<ul>
3946
<li>PluginException: Icon cannot be found in 'AllIcons.Vcs.CheckOut' #314 (@tumb1er)</li>

src/main/java/gitflow/GitflowBranchUtilManager.java

+6-15
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,44 @@
11
package gitflow;
22

3-
import com.intellij.openapi.application.Application;
4-
import com.intellij.openapi.application.ApplicationManager;
5-
import com.intellij.openapi.progress.ProgressIndicator;
6-
import com.intellij.openapi.progress.ProgressManager;
7-
import com.intellij.openapi.progress.Task;
83
import com.intellij.openapi.project.Project;
94
import com.intellij.openapi.util.Disposer;
105
import git4idea.GitUtil;
116
import git4idea.repo.GitRepository;
12-
import gitflow.actions.GitflowActions;
13-
import org.jetbrains.annotations.NotNull;
14-
import org.jetbrains.annotations.Nullable;
157

168
import java.util.HashMap;
179
import java.util.Iterator;
1810
import java.util.List;
19-
import java.util.concurrent.Future;
2011

2112
/**
2213
* This class maps repos to their corresponding branch utils
2314
* Note that the static class is used across projects
2415
*/
2516

2617
public class GitflowBranchUtilManager {
27-
private static HashMap<GitRepository, GitflowBranchUtil> repoBranchUtilMap;
18+
private static HashMap<String, GitflowBranchUtil> repoBranchUtilMap;
2819

2920
static public GitflowBranchUtil getBranchUtil(GitRepository repo){
30-
if (repoBranchUtilMap != null) {
31-
return repoBranchUtilMap.get(repo);
21+
if (repo != null && repoBranchUtilMap != null) {
22+
return repoBranchUtilMap.get(repo.getPresentableUrl());
3223
} else {
3324
return null;
3425
}
3526
}
3627

3728
static public void setupBranchUtil(Project project, GitRepository repo){
3829
GitflowBranchUtil gitflowBranchUtil = new GitflowBranchUtil(project, repo);
39-
repoBranchUtilMap.put(repo, gitflowBranchUtil);
30+
repoBranchUtilMap.put(repo.getPresentableUrl(), gitflowBranchUtil);
4031
// clean up
4132
Disposer.register(repo, () -> repoBranchUtilMap.remove(repo));
4233
}
4334

4435
/**
4536
* Repopulates the branchUtils for each repo
46-
* @param project
37+
* @param proj
4738
*/
4839
static public void update(Project proj){
4940
if (repoBranchUtilMap == null){
50-
repoBranchUtilMap = new HashMap<GitRepository, gitflow.GitflowBranchUtil>();
41+
repoBranchUtilMap = new HashMap<String, gitflow.GitflowBranchUtil>();
5142
}
5243

5344
List<GitRepository> gitRepositories = GitUtil.getRepositoryManager(proj).getRepositories();

src/main/java/gitflow/GitflowConfigUtil.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import git4idea.config.GitConfigUtil;
1111
import git4idea.repo.GitRepository;
1212
import gitflow.ui.NotifyUtil;
13+
import org.jetbrains.annotations.NotNull;
1314

1415
import java.util.HashMap;
1516
import java.util.Map;
@@ -31,7 +32,7 @@ public class GitflowConfigUtil {
3132
public static final String PREFIX_SUPPORT = "gitflow.prefix.support";
3233
public static final String PREFIX_VERSIONTAG = "gitflow.prefix.versiontag";
3334

34-
private static Map<Project, Map<GitRepository, GitflowConfigUtil>> gitflowConfigUtilMap = new HashMap<Project, Map<GitRepository, GitflowConfigUtil>>();
35+
private static Map<Project, Map<String, GitflowConfigUtil>> gitflowConfigUtilMap = new HashMap<Project, Map<String, GitflowConfigUtil>>();
3536

3637
Project project;
3738
GitRepository repo;
@@ -44,17 +45,17 @@ public class GitflowConfigUtil {
4445
public String supportPrefix;
4546
public String versiontagPrefix;
4647

47-
public static GitflowConfigUtil getInstance(Project project_, GitRepository repo_)
48+
public static GitflowConfigUtil getInstance(@NotNull Project project_, @NotNull GitRepository repo_)
4849
{
4950
GitflowConfigUtil instance;
50-
if (gitflowConfigUtilMap.containsKey(project_) && gitflowConfigUtilMap.get(project_).containsKey(repo_)) {
51-
instance = gitflowConfigUtilMap.get(project_).get(repo_);
51+
if (gitflowConfigUtilMap.containsKey(project_) && gitflowConfigUtilMap.get(project_).containsKey(repo_.getPresentableUrl())) {
52+
instance = gitflowConfigUtilMap.get(project_).get(repo_.getPresentableUrl());
5253
} else {
53-
Map<GitRepository, GitflowConfigUtil> innerMap = new HashMap<GitRepository, GitflowConfigUtil>();
54+
Map<String, GitflowConfigUtil> innerMap = new HashMap<String, GitflowConfigUtil>();
5455
instance = new GitflowConfigUtil(project_, repo_);
5556

5657
gitflowConfigUtilMap.put(project_, innerMap);
57-
innerMap.put(repo_, instance);
58+
innerMap.put(repo_.getPresentableUrl(), instance);
5859

5960
//cleanup
6061
Disposer.register(repo_, () -> innerMap.remove(repo_));

src/main/java/gitflow/IDEAUtils.java

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package gitflow;
2+
3+
import com.intellij.openapi.project.Project;
4+
import com.intellij.openapi.project.ProjectManager;
5+
import com.intellij.openapi.wm.WindowManager;
6+
7+
import java.awt.*;
8+
9+
public class IDEAUtils {
10+
public static Project getActiveProject(){
11+
Project[] projects = ProjectManager.getInstance().getOpenProjects();
12+
Project activeProject = null;
13+
for (Project project : projects) {
14+
Window window = WindowManager.getInstance().suggestParentWindow(project);
15+
if (window != null && window.isActive()) {
16+
activeProject = project;
17+
}
18+
}
19+
return activeProject;
20+
}
21+
}

src/main/java/gitflow/actions/FinishBugfixAction.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ public void runAction(final Project project, final String bugfixName){
5959

6060
GitflowConfigUtil gitflowConfigUtil = GitflowConfigUtil.getInstance(project, myRepo);
6161

62-
//get the base branch for this bugfix
63-
final String baseBranch = gitflowConfigUtil.getBaseBranch(branchUtil.getPrefixBugfix()+bugfixName);
64-
6562
new Task.Backgroundable(myProject,"Finishing bugfix "+bugfixName,false){
6663
@Override
6764
public void run(@NotNull ProgressIndicator indicator) {
6865
GitCommandResult result = myGitflow.finishBugfix(myRepo, bugfixName, errorLineHandler);
6966

67+
//get the base branch for this bugfix
68+
final String baseBranch = gitflowConfigUtil.getBaseBranch(branchUtil.getPrefixBugfix()+bugfixName);
69+
7070
if (result.success()) {
7171
String finishedBugfixMessage = String.format("The bugfix branch '%s%s' was merged into '%s'", branchUtil.getPrefixBugfix(), bugfixName, baseBranch);
7272
NotifyUtil.notifySuccess(myProject, bugfixName, finishedBugfixMessage);

src/main/java/gitflow/actions/GitflowAction.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import gitflow.Gitflow;
1414
import gitflow.GitflowBranchUtil;
1515
import gitflow.GitflowBranchUtilManager;
16+
import gitflow.IDEAUtils;
1617
import gitflow.ui.NotifyUtil;
1718
import org.jetbrains.annotations.Nullable;
1819

@@ -41,7 +42,7 @@ public abstract class GitflowAction extends DumbAwareAction {
4142

4243
@Override
4344
public void actionPerformed(AnActionEvent e) {
44-
Project project = e.getProject();
45+
Project project = IDEAUtils.getActiveProject();
4546

4647
// if repo isn't set explicitly, such as in the case of starting from keyboard shortcut, infer it
4748
if (myRepo == null){

src/main/java/gitflow/ui/GitflowWidget.java

+20-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package gitflow.ui;
1717

1818
import com.intellij.ide.BrowserUtil;
19+
import com.intellij.ide.DataManager;
20+
import com.intellij.openapi.actionSystem.DataContext;
1921
import com.intellij.openapi.actionSystem.impl.SimpleDataContext;
2022
import com.intellij.openapi.application.ApplicationManager;
2123
import com.intellij.openapi.fileEditor.FileEditorManager;
@@ -25,18 +27,19 @@
2527
import com.intellij.openapi.ui.Messages;
2628
import com.intellij.openapi.ui.popup.ListPopup;
2729
import com.intellij.openapi.vfs.VirtualFile;
30+
import com.intellij.openapi.wm.IdeFocusManager;
2831
import com.intellij.openapi.wm.StatusBar;
2932
import com.intellij.openapi.wm.StatusBarWidget;
3033
import com.intellij.openapi.wm.WindowManager;
34+
import com.intellij.openapi.wm.impl.status.EditorBasedWidget;
3135
import com.intellij.ui.awt.RelativePoint;
3236
import com.intellij.ui.popup.PopupFactoryImpl;
3337
import com.intellij.util.Consumer;
3438
import com.intellij.openapi.vcs.VcsRoot;
3539
import com.intellij.openapi.vcs.ProjectLevelVcsManager;
3640

37-
import gitflow.GitflowBranchUtil;
38-
import gitflow.GitflowBranchUtilManager;
39-
import gitflow.GitflowVersionTester;
41+
import git4idea.GitBranch;
42+
import gitflow.*;
4043
import gitflow.actions.GitflowPopupGroup;
4144
import org.jetbrains.annotations.NotNull;
4245
import org.jetbrains.annotations.Nullable;
@@ -107,9 +110,10 @@ public void repositoryChanged(@NotNull GitRepository repository) {
107110
}
108111

109112
@Nullable
110-
@Override
113+
@ Override
111114
public ListPopup getPopupStep() {
112-
Project project = getProject();
115+
Project project = IDEAUtils.getActiveProject();
116+
113117
if (project == null) {
114118
return null;
115119
}
@@ -118,7 +122,17 @@ public ListPopup getPopupStep() {
118122
return null;
119123
}
120124

121-
ListPopup listPopup = new PopupFactoryImpl.ActionGroupPopup("Gitflow Actions", popupGroup.getActionGroup(), SimpleDataContext.getProjectContext(project), false, false, false, true, null, -1,
125+
Component focusOwner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
126+
if (focusOwner == null) {
127+
IdeFocusManager focusManager = IdeFocusManager.getInstance(project);
128+
Window frame = focusManager.getLastFocusedIdeWindow();
129+
if (frame != null) {
130+
focusOwner = focusManager.getLastFocusedFor(frame);
131+
}
132+
}
133+
134+
DataContext dataContext = DataManager.getInstance().getDataContext(focusOwner);
135+
ListPopup listPopup = new PopupFactoryImpl.ActionGroupPopup("Gitflow Actions", popupGroup.getActionGroup(), dataContext, false, false, false, true, null, -1,
122136
null, null);
123137

124138
return listPopup;

src/main/resources/META-INF/plugin.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595

9696
<group id="Gitflow.Menu" popup="true" text="Gitflow"
9797
class="gitflow.GitflowMenu">
98-
<add-to-group group-id="Git.Menu" />
98+
<add-to-group group-id="Git.MainMenu" />
9999
</group>
100100
</actions>
101101

0 commit comments

Comments
 (0)