Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Hohenegger2016-01-25 18:59:11 +0000
committerMax Hohenegger2016-02-08 18:46:17 +0000
commit450d57a48486d1011e4a0d0ee42fb52d89dcc4b4 (patch)
tree0b351caf8087be272e0b87b87980b521b011d7cb
parent28ece38ace78f4bc8461c16b78f7138aabe8e4fe (diff)
downloadegit-450d57a48486d1011e4a0d0ee42fb52d89dcc4b4.tar.gz
egit-450d57a48486d1011e4a0d0ee42fb52d89dcc4b4.tar.xz
egit-450d57a48486d1011e4a0d0ee42fb52d89dcc4b4.zip
Fixed enablement of Gitflow command for creating release from commit
Enable the "Start release from...", available in the History views Gitflow submenu, only if the currently selected commit is on the develop branch. http://nvie.com/posts/a-successful-git-branching-model/#release-branches Change-Id: I6f0213b2b57f11b9833be979cbf0b3ca98c93f11 Signed-off-by: Max Hohenegger <eclipse@hohenegger.eu>
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryTest.java26
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractDualRepositoryTestCase.java4
-rw-r--r--org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/menu/DynamicHistoryMenu.java12
-rw-r--r--org.eclipse.egit.gitflow/src/org/eclipse/egit/gitflow/GitFlowRepository.java30
4 files changed, 66 insertions, 6 deletions
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryTest.java
index aacd37c104..c4afd6e0be 100644
--- a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryTest.java
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryTest.java
@@ -30,6 +30,7 @@ import org.eclipse.egit.gitflow.op.ReleaseFinishOperation;
import org.eclipse.egit.gitflow.op.ReleaseStartOperation;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
import org.junit.Test;
public class GitFlowRepositoryTest extends AbstractDualRepositoryTestCase {
@@ -139,4 +140,29 @@ public class GitFlowRepositoryTest extends AbstractDualRepositoryTestCase {
assertEquals(MY_FEATURE, gfRepo.getFeatureBranchName(actualFeatureRef));
}
+
+ @Test
+ public void testIsOnDevelop() throws Exception {
+ Repository repository = repository1.getRepository();
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ InitParameters initParameters = new InitParameters();
+ initParameters.setDevelop(DEVELOP);
+ initParameters.setMaster(GitFlowDefaults.MASTER);
+ initParameters.setFeature(FEATURE_PREFIX);
+ initParameters.setRelease(RELEASE_PREFIX);
+ initParameters.setHotfix(HOTFIX_PREFIX);
+ initParameters.setVersionTag(VERSION_TAG);
+ repository1.checkoutBranch(gfRepo.getConfig().getDevelop());
+
+ RevCommit developBranchCommit = repository1.commit("develop branch commit");
+ assertTrue(gfRepo.isOnDevelop(developBranchCommit));
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+ RevCommit featureBranchCommit = repository1.commit("feature branch commit");
+ assertFalse(gfRepo.isOnDevelop(featureBranchCommit));
+
+ // the initial commit was made on master, but is also on develop
+ assertTrue(gfRepo.isOnDevelop(initialCommit));
+ }
}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractDualRepositoryTestCase.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractDualRepositoryTestCase.java
index 438189c92a..ded616e8a8 100644
--- a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractDualRepositoryTestCase.java
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractDualRepositoryTestCase.java
@@ -50,6 +50,8 @@ public class AbstractDualRepositoryTestCase extends DualRepositoryTestCase {
String projectName = "FeaturePublishTest";
+ protected RevCommit initialCommit;
+
@Override
@Before
public void beforeTestCase() throws Exception {
@@ -58,7 +60,7 @@ public class AbstractDualRepositoryTestCase extends DualRepositoryTestCase {
repository1 = new TestRepository(new File(workdir, DOT_GIT));
- repository1.createInitialCommit("setUp");
+ initialCommit = repository1.createInitialCommit("setUp");
Repository repository = repository1.getRepository();
new InitOperation(repository).execute(null);
diff --git a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/menu/DynamicHistoryMenu.java b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/menu/DynamicHistoryMenu.java
index 0d8fe69576..6e366135fd 100644
--- a/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/menu/DynamicHistoryMenu.java
+++ b/org.eclipse.egit.gitflow.ui/src/org/eclipse/egit/gitflow/ui/internal/menu/DynamicHistoryMenu.java
@@ -8,11 +8,13 @@
*******************************************************************************/
package org.eclipse.egit.gitflow.ui.internal.menu;
+import static org.eclipse.egit.gitflow.ui.Activator.error;
+
import java.io.IOException;
import org.eclipse.egit.core.internal.Utils;
+import org.eclipse.egit.gitflow.Activator;
import org.eclipse.egit.gitflow.GitFlowRepository;
-import org.eclipse.egit.gitflow.ui.Activator;
import org.eclipse.egit.gitflow.ui.internal.UIText;
import org.eclipse.egit.gitflow.ui.internal.actions.ReleaseStartFromCommitHandler;
import org.eclipse.jface.action.ContributionItem;
@@ -54,13 +56,13 @@ public class DynamicHistoryMenu extends ContributionItem {
abbreviate(selectedCommit)));
menuItem.addSelectionListener(listener);
+ boolean isEnabled = false;
try {
- menuItem.setEnabled(gfRepo.isDevelop());
+ isEnabled = gfRepo.isOnDevelop(selectedCommit);
} catch (IOException e) {
- Activator.getDefault().getLog()
- .log(Activator.error(e.getMessage()));
- return;
+ Activator.getDefault().getLog().log(error(e.getMessage(), e));
}
+ menuItem.setEnabled(isEnabled);
}
private String abbreviate(RevCommit selectedCommit) {
diff --git a/org.eclipse.egit.gitflow/src/org/eclipse/egit/gitflow/GitFlowRepository.java b/org.eclipse.egit.gitflow/src/org/eclipse/egit/gitflow/GitFlowRepository.java
index 1f0edffebd..d37a7e4cd0 100644
--- a/org.eclipse.egit.gitflow/src/org/eclipse/egit/gitflow/GitFlowRepository.java
+++ b/org.eclipse.egit.gitflow/src/org/eclipse/egit/gitflow/GitFlowRepository.java
@@ -297,4 +297,34 @@ public class GitFlowRepository {
public GitFlowConfig getConfig() {
return this.config;
}
+
+ /**
+ * Check if the given commit is an ancestor of the current HEAD on the
+ * develop branch.
+ *
+ * @param selectedCommit
+ * @return Whether or not the selected commit is on the develop branch.
+ * @throws IOException
+ * @since 4.3
+ */
+ public boolean isOnDevelop(@NonNull RevCommit selectedCommit) throws IOException {
+ String develop = config.getDevelopFull();
+ return isOnBranch(selectedCommit, develop);
+ }
+
+ private boolean isOnBranch(RevCommit commit, String fullBranch)
+ throws IOException {
+ Ref branchRef = repository.exactRef(fullBranch);
+ if (branchRef == null) {
+ return false;
+ }
+ try {
+ List<Ref> list = Git.wrap(repository).branchList().setContains(commit.name()).call();
+
+ return list.contains(branchRef);
+ } catch (GitAPIException e) {
+ // ListBranchCommand can only throw a wrapped IOException
+ throw new IOException(e);
+ }
+ }
}

Back to the top