Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow')
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/BranchNameValidatorTest.java70
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryConfigTest.java49
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryTest.java124
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractDualRepositoryTestCase.java114
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractFeatureOperationTest.java23
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractGitFlowOperationTest.java79
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/CurrentBranchPublishOperationTest.java51
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureCheckoutOperationTest.java69
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureFinishOperationTest.java48
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureListOperationTest.java45
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureRebaseOperationTest.java47
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureStartOperationTest.java42
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureTrackOperationTest.java63
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixFinishOperationTest.java113
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixStartOperationTest.java31
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/InitOperationTest.java61
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseFinishOperationTest.java136
-rw-r--r--org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseStartOperationTest.java87
18 files changed, 1252 insertions, 0 deletions
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/BranchNameValidatorTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/BranchNameValidatorTest.java
new file mode 100644
index 0000000000..1aed342b0c
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/BranchNameValidatorTest.java
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow;
+
+import static org.eclipse.egit.gitflow.BranchNameValidator.*;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.egit.gitflow.op.AbstractGitFlowOperationTest;
+import org.eclipse.egit.gitflow.op.FeatureStartOperation;
+import org.eclipse.egit.gitflow.op.InitOperation;
+import org.eclipse.egit.gitflow.op.ReleaseStartOperation;
+import org.eclipse.jgit.lib.Repository;
+import org.junit.Test;
+
+public class BranchNameValidatorTest extends AbstractGitFlowOperationTest {
+
+ @Test
+ public void testFeatureExists() throws Exception {
+ testRepository
+ .createInitialCommit("testInitOperation\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+
+ assertTrue(featureExists(gfRepo, MY_FEATURE));
+ }
+
+ @Test
+ public void testReleaseExists() throws Exception {
+ testRepository
+ .createInitialCommit("testInitOperation\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+
+ assertTrue(releaseExists(gfRepo, MY_RELEASE));
+ }
+
+ @Test
+ public void testBranchNotExists() throws Exception {
+ testRepository
+ .createInitialCommit("testInitOperation\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+
+ assertFalse(releaseExists(gfRepo, "notThere"));
+ }
+
+ @Test
+ public void testBranchNameValid() throws Exception {
+ assertTrue(isBranchNameValid(MY_RELEASE));
+ assertTrue(isBranchNameValid(MY_FEATURE));
+ assertFalse(isBranchNameValid("/"));
+ assertFalse(isBranchNameValid(""));
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryConfigTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryConfigTest.java
new file mode 100644
index 0000000000..c51b7e0fdb
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryConfigTest.java
@@ -0,0 +1,49 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.egit.gitflow.op.AbstractDualRepositoryTestCase;
+import org.eclipse.egit.gitflow.op.InitOperation;
+import org.eclipse.jgit.lib.Repository;
+import org.junit.Test;
+
+public class GitFlowRepositoryConfigTest extends AbstractDualRepositoryTestCase {
+ @Test
+ public void testIsInitialized() throws Exception {
+ repository1
+ .createInitialCommit("testIsInitialized\n\nfirst commit\n");
+
+ Repository repository = repository2.getRepository();
+ GitFlowConfig gitFlowConfig = new GitFlowConfig(repository);
+
+ assertFalse(gitFlowConfig.isInitialized());
+
+ new InitOperation(repository).execute(null);
+
+ assertTrue(gitFlowConfig.isInitialized());
+ }
+
+ @Test
+ public void testHasDefaultRemote() throws Exception {
+ repository1
+ .createInitialCommit("testHasDefaultRemote\n\nfirst commit\n");
+
+ Repository repository = repository1.getRepository();
+ GitFlowConfig gitFlowConfig = new GitFlowConfig(repository);
+
+ assertFalse(gitFlowConfig.hasDefaultRemote());
+
+ GitFlowConfig gitFlowConfig2 = new GitFlowConfig(repository2.getRepository());
+ assertTrue(gitFlowConfig2.hasDefaultRemote());
+ }
+
+}
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
new file mode 100644
index 0000000000..62a8fab98e
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/GitFlowRepositoryTest.java
@@ -0,0 +1,124 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow;
+
+import static org.eclipse.egit.gitflow.GitFlowDefaults.DEVELOP;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.FEATURE_PREFIX;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.HOTFIX_PREFIX;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.RELEASE_PREFIX;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.VERSION_TAG;
+import static org.eclipse.jgit.lib.Constants.R_HEADS;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.egit.gitflow.op.AbstractDualRepositoryTestCase;
+import org.eclipse.egit.gitflow.op.FeatureStartOperation;
+import org.eclipse.egit.gitflow.op.HotfixStartOperation;
+import org.eclipse.egit.gitflow.op.InitOperation;
+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.junit.Test;
+
+public class GitFlowRepositoryTest extends AbstractDualRepositoryTestCase {
+ @Test
+ public void testIsMaster() throws Exception {
+ repository1.createInitialCommit("testIsMaster\n\nfirst commit\n");
+
+ Repository repository = repository2.getRepository();
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ assertTrue(gfRepo.isMaster());
+
+ new InitOperation(repository).execute(null);
+
+ assertFalse(gfRepo.isMaster());
+ }
+
+ @Test
+ public void testGetFeatureBranches() throws Exception {
+ repository1
+ .createInitialCommit("testGetFeatureBranches\n\nfirst commit\n");
+
+ Repository repository = repository1.getRepository();
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new InitOperation(repository).execute(null);
+
+ assertTrue(gfRepo.getFeatureBranches().isEmpty());
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+
+ assertEquals(R_HEADS + gfRepo.getConfig().getFeaturePrefix()
+ + MY_FEATURE, gfRepo.getFeatureBranches().get(0).getName());
+ }
+
+ @Test
+ public void testGetReleaseBranches() throws Exception {
+ repository1
+ .createInitialCommit("testGetReleaseBranches\n\nfirst commit\n");
+
+ Repository repository = repository1.getRepository();
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new InitOperation(repository).execute(null);
+
+ assertTrue(gfRepo.getReleaseBranches().isEmpty());
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+
+ assertEquals(R_HEADS + gfRepo.getConfig().getReleasePrefix()
+ + MY_RELEASE, gfRepo.getReleaseBranches().get(0).getName());
+ }
+
+ @Test
+ public void testGetHotfixBranches() throws Exception {
+ repository1
+ .createInitialCommit("testGetHotfixBranches\n\nfirst commit\n");
+
+ Repository repository = repository1.getRepository();
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new InitOperation(repository).execute(null);
+
+ assertTrue(gfRepo.getHotfixBranches().isEmpty());
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+ new ReleaseFinishOperation(gfRepo, MY_RELEASE).execute(null);
+ new HotfixStartOperation(gfRepo, MY_HOTFIX).execute(null);
+
+ assertEquals(
+ R_HEADS + gfRepo.getConfig().getHotfixPrefix() + MY_HOTFIX,
+ gfRepo.getHotfixBranches().get(0).getName());
+ }
+
+ @Test
+ public void testGetFeatureBranchName() throws Exception {
+ repository1
+ .createInitialCommit("testGetFeatureBranchName\n\nfirst commit\n");
+
+ Repository repository = repository1.getRepository();
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new InitOperation(repository, DEVELOP, GitFlowDefaults.MASTER,
+ FEATURE_PREFIX, RELEASE_PREFIX, HOTFIX_PREFIX, VERSION_TAG)
+ .execute(null);
+
+ assertTrue(gfRepo.getFeatureBranches().isEmpty());
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+
+ Ref actualFeatureRef = repository.getRef(R_HEADS
+ + gfRepo.getConfig().getFeaturePrefix() + MY_FEATURE);
+ assertEquals(MY_FEATURE, gfRepo.getFeatureBranchName(actualFeatureRef));
+ }
+
+}
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
new file mode 100644
index 0000000000..0d7bd1d9f6
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractDualRepositoryTestCase.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.eclipse.jgit.lib.Constants.DEFAULT_REMOTE_NAME;
+import static org.eclipse.jgit.lib.Constants.DOT_GIT;
+import static org.eclipse.jgit.lib.Constants.HEAD;
+import static org.eclipse.jgit.lib.Constants.R_HEADS;
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.egit.core.Activator;
+import org.eclipse.egit.core.op.BranchOperation;
+import org.eclipse.egit.core.op.CloneOperation;
+import org.eclipse.egit.core.test.DualRepositoryTestCase;
+import org.eclipse.egit.core.test.TestRepository;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.errors.RevisionSyntaxException;
+import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.eclipse.jgit.transport.URIish;
+import org.junit.Before;
+
+public class AbstractDualRepositoryTestCase extends DualRepositoryTestCase {
+ protected static final String MY_FEATURE = "myFeature";
+
+ protected static final String MY_MASTER = "master";
+
+ protected static final String MY_RELEASE = "myRelease";
+
+ protected static final String MY_VERSION_TAG = "v";
+
+ protected static final String MY_HOTFIX = "myHotfix";
+
+ private File workdir;
+
+ private File workdir2;
+
+ String projectName = "FeaturePublishTest";
+
+ @Override
+ @Before
+ public void beforeTestCase() throws Exception {
+ workdir = testUtils.createTempDir("Repository1");
+ workdir2 = testUtils.createTempDir("Repository2");
+
+ repository1 = new TestRepository(new File(workdir, DOT_GIT));
+
+ repository1.createInitialCommit("setUp");
+
+ Repository repository = repository1.getRepository();
+ new InitOperation(repository).execute(null);
+
+ // now we create a project in repo1
+ IProject project = testUtils.createProjectInLocalFileSystem(workdir,
+ projectName);
+ testUtils.addFileToProject(project, "folder1/file1.txt", "Hello world");
+
+ repository1.connect(project);
+ repository1.trackAllFiles(project);
+ repository1.commit("Initial commit");
+
+ // let's get rid of the project
+ project.delete(false, false, null);
+
+ // let's clone repository1 to repository2
+ URIish uri = repository1.getUri();
+ CloneOperation clop = new CloneOperation(uri, true, null, workdir2,
+ R_HEADS + MY_MASTER, DEFAULT_REMOTE_NAME, 0);
+ clop.run(null);
+
+ Repository repo2 = Activator.getDefault().getRepositoryCache()
+ .lookupRepository(new File(workdir2, DOT_GIT));
+ repository2 = new TestRepository(repo2);
+ new InitOperation(repository).execute(null);
+ }
+
+ protected void assertCommitArrivedAtRemote(RevCommit branchCommit,
+ Repository remote) throws CoreException {
+ GitFlowRepository gfRepo = new GitFlowRepository(remote);
+ BranchOperation checkoutOperation = new BranchOperation(remote,
+ gfRepo.getConfig().getFullFeatureBranchName(MY_FEATURE));
+ checkoutOperation.execute(null);
+ RevCommit developHead = findHead(remote);
+ assertEquals(branchCommit, developHead);
+ }
+
+ protected RevCommit findHead(Repository repo) {
+ try (RevWalk walk = new RevWalk(repo)) {
+ try {
+ ObjectId head = repo.resolve(HEAD);
+ return walk.parseCommit(head);
+ } catch (RevisionSyntaxException | IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }
+
+ protected String getRemoteName(GitFlowRepository gfRepo, String featureName) {
+ return gfRepo.getConfig().getRemoteName(featureName);
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractFeatureOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractFeatureOperationTest.java
new file mode 100644
index 0000000000..5d2bc10b5a
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractFeatureOperationTest.java
@@ -0,0 +1,23 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.lib.Repository;
+
+abstract public class AbstractFeatureOperationTest extends
+ AbstractGitFlowOperationTest {
+
+ protected GitFlowRepository init(String initalCommit) throws Exception {
+ testRepository.createInitialCommit(initalCommit);
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ return new GitFlowRepository(repository);
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractGitFlowOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractGitFlowOperationTest.java
new file mode 100644
index 0000000000..bd89a7e558
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/AbstractGitFlowOperationTest.java
@@ -0,0 +1,79 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.eclipse.jgit.lib.Constants.DOT_GIT;
+import static org.eclipse.jgit.lib.Constants.R_HEADS;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.egit.core.test.GitTestCase;
+import org.eclipse.egit.core.test.TestRepository;
+import org.eclipse.jgit.errors.IncorrectObjectTypeException;
+import org.eclipse.jgit.errors.MissingObjectException;
+import org.eclipse.jgit.lib.AnyObjectId;
+import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.revwalk.RevWalk;
+import org.junit.After;
+import org.junit.Before;
+
+abstract public class AbstractGitFlowOperationTest extends GitTestCase {
+ protected TestRepository testRepository;
+
+ protected static final String MY_FEATURE = "myFeature";
+
+ protected static final String MY_RELEASE = "myRelease";
+
+ protected static final String MY_VERSION_TAG = "v";
+
+ protected static final String MY_MASTER = "master";
+
+ protected static final String MY_HOTFIX = "myHotfix";
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ gitDir = new File(project.getProject().getLocationURI().getPath(),
+ DOT_GIT);
+ testRepository = new TestRepository(gitDir);
+ testRepository.connect(project.getProject());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ testRepository.dispose();
+ super.tearDown();
+ }
+
+ protected Ref findBranch(Repository repository, String branchName)
+ throws IOException {
+ return repository.getRef(R_HEADS + branchName);
+ }
+
+ protected RevCommit parseCommit(Repository repo, AnyObjectId id)
+ throws MissingObjectException, IncorrectObjectTypeException,
+ IOException {
+ try (RevWalk revWalk = new RevWalk(repo)) {
+ return revWalk.parseCommit(id);
+ }
+ }
+
+ protected RevCommit addFileAndCommit(String fileName, String commitMessage)
+ throws Exception, UnsupportedEncodingException {
+ IFile file = project.createFile(fileName,
+ "Hello, world".getBytes("UTF-8"));
+ return testRepository.addAndCommit(project.project,
+ new File(file.getLocationURI()), commitMessage);
+ }
+} \ No newline at end of file
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/CurrentBranchPublishOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/CurrentBranchPublishOperationTest.java
new file mode 100644
index 0000000000..97c0c5a42c
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/CurrentBranchPublishOperationTest.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.eclipse.jgit.lib.Constants.DEFAULT_REMOTE_NAME;
+import static org.eclipse.jgit.lib.Constants.R_HEADS;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.egit.core.op.PushOperationResult;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.lib.RefUpdate;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.transport.PushResult;
+import org.junit.Test;
+
+public class CurrentBranchPublishOperationTest extends AbstractDualRepositoryTestCase {
+ @Test
+ public void testFeaturePublish() throws Exception {
+ new InitOperation(repository2.getRepository()).execute(null);
+ GitFlowRepository gfRepo2 = new GitFlowRepository(
+ repository2.getRepository());
+
+ new FeatureStartOperation(gfRepo2, MY_FEATURE).execute(null);
+ RevCommit branchCommit = repository2
+ .createInitialCommit("testFeaturePublish");
+ CurrentBranchPublishOperation featurePublishOperation = new CurrentBranchPublishOperation(
+ gfRepo2, 0);
+ featurePublishOperation.execute(null);
+ PushOperationResult result = featurePublishOperation
+ .getOperationResult();
+
+ assertTrue(result.isSuccessfulConnection(repository1.getUri()));
+ PushResult pushResult = result.getPushResult(repository1.getUri());
+ assertEquals(RefUpdate.Result.NEW, pushResult.getTrackingRefUpdates()
+ .iterator().next().getResult());
+
+ assertCommitArrivedAtRemote(branchCommit, repository1.getRepository());
+
+ // config updated?
+ assertEquals(DEFAULT_REMOTE_NAME, getRemoteName(gfRepo2, MY_FEATURE));
+ assertEquals(R_HEADS + gfRepo2.getConfig().getFeatureBranchName(MY_FEATURE),
+ gfRepo2.getUpstreamBranchName(MY_FEATURE));
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureCheckoutOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureCheckoutOperationTest.java
new file mode 100644
index 0000000000..1dba8b5679
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureCheckoutOperationTest.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.egit.core.op.BranchOperation;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.api.CheckoutResult.Status;
+import org.eclipse.jgit.lib.Repository;
+import org.junit.Test;
+
+public class FeatureCheckoutOperationTest extends AbstractFeatureOperationTest {
+ @Test
+ public void testFeatureCheckout() throws Exception {
+ Repository repository = testRepository.getRepository();
+ GitFlowRepository gfRepo = init("testFeatureCheckout\n\nfirst commit\n");
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+ new BranchOperation(repository, gfRepo.getConfig().getDevelop()).execute(null);
+
+ new FeatureCheckoutOperation(gfRepo, MY_FEATURE).execute(null);
+
+ assertEquals(gfRepo.getConfig().getFullFeatureBranchName(MY_FEATURE),
+ repository.getFullBranch());
+ }
+
+ @Test
+ public void testFeatureCheckoutConflicts() throws Exception {
+ Repository repository = testRepository.getRepository();
+ GitFlowRepository gfRepo = init("testFeatureCheckoutConflicts\n\nfirst commit\n");
+
+ // setup something we can modify later
+ IFile file = testUtils.addFileToProject(project.getProject(),
+ "folder1/file1.txt", "Hello world");
+ testRepository.connect(project.getProject());
+ testRepository.trackAllFiles(project.getProject());
+ testRepository.commit("Initial commit");
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+ // modify on first branch
+ testUtils.changeContentOfFile(project.getProject(), file,
+ "Hello Feature");
+ testRepository.addToIndex(file);
+ testRepository.commit("Feature commit");
+ new BranchOperation(repository, gfRepo.getConfig().getDevelop()).execute(null);
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+
+ // modify on second branch
+ testUtils.changeContentOfFile(project.getProject(), file,
+ "Hello Develop");
+ testRepository.addToIndex(file);
+
+ FeatureCheckoutOperation featureCheckoutOperation = new FeatureCheckoutOperation(
+ gfRepo, MY_FEATURE);
+ featureCheckoutOperation.execute(null);
+
+ assertEquals(Status.CONFLICTS, featureCheckoutOperation.getResult()
+ .getStatus());
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureFinishOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureFinishOperationTest.java
new file mode 100644
index 0000000000..034c8ef7ca
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureFinishOperationTest.java
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.egit.core.op.BranchOperation;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.egit.gitflow.WrongGitFlowStateException;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Test;
+
+public class FeatureFinishOperationTest extends AbstractFeatureOperationTest {
+ @Test
+ public void testFeatureFinish() throws Exception {
+ Repository repository = testRepository.getRepository();
+ GitFlowRepository gfRepo = init("testFeatureFinish\n\nfirst commit\n");
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+ new FeatureFinishOperation(gfRepo).execute(null);
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+
+ String branchName = gfRepo.getConfig().getFeatureBranchName(MY_FEATURE);
+ RevCommit branchCommit = testRepository
+ .createInitialCommit("testFeatureFinish\n\nbranch commit\n");
+ assertEquals(findBranch(repository, branchName), null);
+
+ RevCommit developHead = gfRepo.findHead();
+ assertEquals(branchCommit, developHead);
+ }
+
+ @Test(expected = WrongGitFlowStateException.class)
+ public void testFeatureFinishFail() throws Exception {
+ Repository repository = testRepository.getRepository();
+ GitFlowRepository gfRepo = init("testFeatureFinishFail\n\nfirst commit\n");
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+ new BranchOperation(repository, gfRepo.getConfig().getDevelop()).execute(null);
+ new FeatureFinishOperation(gfRepo).execute(null);
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureListOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureListOperationTest.java
new file mode 100644
index 0000000000..1591bdab2b
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureListOperationTest.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import static org.eclipse.jgit.lib.Constants.*;
+import org.eclipse.jgit.lib.Ref;
+import org.junit.Test;
+
+import static org.eclipse.egit.gitflow.op.AbstractFeatureOperation.*;
+
+public class FeatureListOperationTest extends AbstractDualRepositoryTestCase {
+ @Test
+ public void testFeatureList() throws Exception {
+ GitFlowRepository gfRepo1 = new GitFlowRepository(
+ repository1.getRepository());
+ GitFlowRepository gfRepo2 = new GitFlowRepository(
+ repository2.getRepository());
+ new FeatureStartOperation(gfRepo1, MY_FEATURE).execute(null);
+
+ FeatureListOperation featureListOperation = new FeatureListOperation(
+ gfRepo2, 0);
+ featureListOperation.execute(null);
+ String name = gfRepo2.getConfig().getFullFeatureBranchName(MY_FEATURE);
+ assertNotNull(featureListOperation.getOperationResult()
+ .getAdvertisedRef(name));
+ List<Ref> result = featureListOperation.getResult();
+ assertEquals(1, result.size());
+ assertEquals(
+ R_REMOTES + DEFAULT_REMOTE_NAME + SEP
+ + gfRepo2.getConfig().getFeatureBranchName(MY_FEATURE),
+ result.get(0).getName());
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureRebaseOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureRebaseOperationTest.java
new file mode 100644
index 0000000000..54199c3fb1
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureRebaseOperationTest.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.*;
+
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.api.RebaseResult;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Test;
+
+public class FeatureRebaseOperationTest extends AbstractFeatureOperationTest {
+ @Test
+ public void testFeatureRebase() throws Exception {
+ Repository repository = testRepository.getRepository();
+ GitFlowRepository gfRepo = init("testFeatureRebase\n\nfirst commit\n");
+ RevCommit initialCommit = gfRepo.findHead();
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+ String branchCommitMessage = "adding first file on feature branch";
+ addFileAndCommit("theFile.txt", branchCommitMessage);
+
+ testRepository.checkoutBranch(gfRepo.getConfig().getDevelop());
+ RevCommit developCommit = addFileAndCommit("theOtherFile.txt",
+ "adding second file on develop branch");
+
+ new FeatureCheckoutOperation(gfRepo, MY_FEATURE).execute(null);
+ assertEquals(initialCommit, gfRepo.findHead().getParent(0));
+ FeatureRebaseOperation featureRebaseOperation = new FeatureRebaseOperation(
+ gfRepo);
+ featureRebaseOperation.execute(null);
+
+ RebaseResult res = featureRebaseOperation.getOperationResult();
+ assertEquals(RebaseResult.Status.OK, res.getStatus());
+
+ assertEquals(branchCommitMessage, gfRepo.findHead().getShortMessage());
+ assertEquals(developCommit,
+ parseCommit(repository, repository.resolve("HEAD^")));
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureStartOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureStartOperationTest.java
new file mode 100644
index 0000000000..55771a7118
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureStartOperationTest.java
@@ -0,0 +1,42 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.egit.core.op.BranchOperation;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.lib.Repository;
+import org.junit.Test;
+
+public class FeatureStartOperationTest extends AbstractFeatureOperationTest {
+ @Test
+ public void testFeatureStart() throws Exception {
+ Repository repository = testRepository.getRepository();
+ GitFlowRepository gfRepo = init("testFeatureStart\n\nfirst commit\n");
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+
+ assertEquals(gfRepo.getConfig().getFullFeatureBranchName(MY_FEATURE),
+ repository.getFullBranch());
+ }
+
+ @Test(expected = CoreException.class)
+ public void testFeatureStartFail() throws Exception {
+ Repository repository = testRepository.getRepository();
+ GitFlowRepository gfRepo = init("testFeatureStart\n\nfirst commit\n");
+
+ BranchOperation branchOperation = new BranchOperation(repository,
+ MY_MASTER);
+ branchOperation.execute(null);
+
+ new FeatureStartOperation(gfRepo, MY_FEATURE).execute(null);
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureTrackOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureTrackOperationTest.java
new file mode 100644
index 0000000000..47cee9fcc1
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/FeatureTrackOperationTest.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.eclipse.jgit.lib.Constants.DEFAULT_REMOTE_NAME;
+import static org.eclipse.jgit.lib.Constants.R_HEADS;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.lib.Ref;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.eclipse.jgit.transport.FetchResult;
+import org.junit.Test;
+
+public class FeatureTrackOperationTest extends AbstractDualRepositoryTestCase {
+ @Test
+ public void testFeatureTrack() throws Exception {
+ GitFlowRepository gfRepo1 = new GitFlowRepository(
+ repository1.getRepository());
+ GitFlowRepository gfRepo2 = new GitFlowRepository(
+ repository2.getRepository());
+ new FeatureStartOperation(gfRepo1, MY_FEATURE).execute(null);
+ RevCommit branchCommit = repository1
+ .createInitialCommit("testFeatureTrack");
+
+ FeatureTrackOperation featureTrackOperation = new FeatureTrackOperation(
+ gfRepo2, getFirstRemoteFeatureRef(gfRepo2));
+ featureTrackOperation.execute(null);
+ FetchResult operationResult = featureTrackOperation
+ .getOperationResult();
+ assertNotNull(operationResult.getAdvertisedRef(gfRepo2
+ .getConfig().getFullFeatureBranchName(MY_FEATURE)));
+ assertEquals(gfRepo2.getConfig().getFeatureBranchName(MY_FEATURE),
+ repository2.getRepository().getBranch());
+ assertEquals(branchCommit, findHead(repository2.getRepository()));
+
+ RevCommit localCommit = repository2
+ .createInitialCommit("testFeatureTrack2");
+ new CurrentBranchPublishOperation(gfRepo2, 0).execute(null);
+ assertEquals(localCommit, findHead(repository2.getRepository()));
+
+ // config updated?
+ assertEquals(DEFAULT_REMOTE_NAME, getRemoteName(gfRepo2, MY_FEATURE));
+ assertEquals(R_HEADS + gfRepo2.getConfig().getFeatureBranchName(MY_FEATURE),
+ gfRepo2.getUpstreamBranchName(MY_FEATURE));
+ }
+
+ private Ref getFirstRemoteFeatureRef(GitFlowRepository gfRepo)
+ throws CoreException {
+ FeatureListOperation featureListOperation = new FeatureListOperation(
+ gfRepo, 0);
+ featureListOperation.execute(null);
+ return featureListOperation.getResult().get(0);
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixFinishOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixFinishOperationTest.java
new file mode 100644
index 0000000000..f7121845f8
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixFinishOperationTest.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.eclipse.egit.gitflow.GitFlowDefaults.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+import java.io.File;
+
+import org.eclipse.egit.core.op.BranchOperation;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.api.MergeResult;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Test;
+
+public class HotfixFinishOperationTest extends AbstractGitFlowOperationTest {
+ @Test
+ public void testHotfixFinish() throws Exception {
+ testRepository
+ .createInitialCommit("testHotfixFinish\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new HotfixStartOperation(gfRepo, MY_HOTFIX).execute(null);
+
+ RevCommit branchCommit = testRepository
+ .createInitialCommit("testHotfixFinish\n\nbranch commit\n");
+
+ new HotfixFinishOperation(gfRepo).execute(null);
+
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+
+ String branchName = gfRepo.getConfig().getHotfixBranchName(MY_HOTFIX);
+
+ // tag created?
+ assertEquals(branchCommit, gfRepo.findCommitForTag(MY_HOTFIX));
+
+ // branch removed?
+ assertEquals(findBranch(repository, branchName), null);
+
+ RevCommit developHead = gfRepo.findHead(DEVELOP);
+ assertEquals(branchCommit, developHead);
+
+ RevCommit masterHead = gfRepo.findHead(MY_MASTER);
+ assertEquals(branchCommit, masterHead);
+ }
+
+ @Test
+ public void testMergeToDevelopFail() throws Exception {
+ testRepository
+ .createInitialCommit("testMergeToDevelopFail\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ // setup something we can modify later
+ File file = testRepository.createFile(project.getProject(),
+ "folder1/file1.txt");
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+
+ testRepository.appendContentAndCommit(project.getProject(), file,
+ "Hello Release", "Release Commit");
+
+ new ReleaseFinishOperation(gfRepo).execute(null);
+
+ new HotfixStartOperation(gfRepo, MY_HOTFIX).execute(null);
+ // modify on first branch
+ RevCommit hotfixCommit = testRepository.appendContentAndCommit(
+ project.getProject(), file, "Hello Hotfix", "Hotfix Commit");
+ new BranchOperation(repository, gfRepo.getConfig().getDevelop()).execute(null);
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+
+ // modify on second branch
+ RevCommit developCommit = testRepository.appendContentAndCommit(
+ project.getProject(), file, "Hello Develop", "Develop Commit");
+
+ String branchName = gfRepo.getConfig().getHotfixBranchName(MY_HOTFIX);
+ new BranchOperation(repository, branchName).execute(null);
+ HotfixFinishOperation hotfixFinishOperation = new HotfixFinishOperation(
+ gfRepo);
+ hotfixFinishOperation.execute(null);
+
+ // tag not created?
+ assertNotEquals(hotfixCommit, gfRepo.findCommitForTag(MY_HOTFIX));
+
+ // branch not removed?
+ assertNotEquals(findBranch(repository, branchName), null);
+
+ // not merged on develop => conflict
+ RevCommit developHead = gfRepo.findHead(DEVELOP);
+ assertEquals(developCommit, developHead);
+ assertEquals(MergeResult.MergeStatus.CONFLICTING, hotfixFinishOperation
+ .getOperationResult().getMergeStatus());
+
+ // merged on master
+ RevCommit masterHead = gfRepo.findHead(MY_MASTER);
+ assertEquals(hotfixCommit, masterHead);
+
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixStartOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixStartOperationTest.java
new file mode 100644
index 0000000000..77ea7da9ec
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/HotfixStartOperationTest.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.assertEquals;
+
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.lib.Repository;
+import org.junit.Test;
+
+public class HotfixStartOperationTest extends AbstractGitFlowOperationTest {
+ @Test
+ public void testHotfixStart() throws Exception {
+ testRepository.createInitialCommit("testHotfixStart\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new HotfixStartOperation(gfRepo, MY_HOTFIX).execute(null);
+
+ assertEquals(gfRepo.getConfig().getFullHotfixBranchName(MY_HOTFIX),
+ repository.getFullBranch());
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/InitOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/InitOperationTest.java
new file mode 100644
index 0000000000..0f0d8f012a
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/InitOperationTest.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.assertEquals;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.*;
+
+import org.eclipse.egit.gitflow.GitFlowRepository;
+
+import static org.eclipse.egit.gitflow.GitFlowConfig.*;
+
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.StoredConfig;
+import org.junit.Test;
+
+public class InitOperationTest extends AbstractGitFlowOperationTest {
+
+ @Test
+ public void testInit() throws Exception {
+ testRepository
+ .createInitialCommit("testInitOperation\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ InitOperation initOperation = new InitOperation(repository);
+ initOperation.execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+
+ assertEquals(FEATURE_PREFIX, getPrefix(repository, FEATURE_KEY));
+ assertEquals(RELEASE_PREFIX, getPrefix(repository, RELEASE_KEY));
+ assertEquals(HOTFIX_PREFIX, getPrefix(repository, HOTFIX_KEY));
+ assertEquals(VERSION_TAG, getPrefix(repository, VERSION_TAG_KEY));
+ assertEquals(DEVELOP, getBranch(repository, DEVELOP_KEY));
+ assertEquals(MASTER, getBranch(repository, MASTER_KEY));
+ }
+
+ private String getPrefix(Repository repository, String prefixName) {
+ StoredConfig config = repository.getConfig();
+ return config.getString(GITFLOW_SECTION, PREFIX_SECTION, prefixName);
+ }
+
+ private String getBranch(Repository repository, String branch) {
+ StoredConfig config = repository.getConfig();
+ return config.getString(GITFLOW_SECTION, BRANCH_SECTION, branch);
+ }
+
+ @Test
+ public void testInitEmptyRepository() throws Exception {
+ Repository repository = testRepository.getRepository();
+ InitOperation initOperation = new InitOperation(repository);
+ initOperation.execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseFinishOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseFinishOperationTest.java
new file mode 100644
index 0000000000..7637870c9c
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseFinishOperationTest.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.eclipse.egit.gitflow.GitFlowDefaults.DEVELOP;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.FEATURE_PREFIX;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.HOTFIX_PREFIX;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.MASTER;
+import static org.eclipse.egit.gitflow.GitFlowDefaults.RELEASE_PREFIX;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.fail;
+
+import java.util.Iterator;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.egit.core.op.BranchOperation;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.egit.gitflow.WrongGitFlowStateException;
+import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.errors.GitAPIException;
+import org.eclipse.jgit.api.errors.NoHeadException;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Test;
+
+public class ReleaseFinishOperationTest extends AbstractGitFlowOperationTest {
+ @Test
+ public void testReleaseFinish() throws Exception {
+ testRepository
+ .createInitialCommit("testReleaseFinish\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository, DEVELOP, MASTER, FEATURE_PREFIX,
+ RELEASE_PREFIX, HOTFIX_PREFIX, MY_VERSION_TAG).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+ RevCommit branchCommit = testRepository
+ .createInitialCommit("testReleaseFinish\n\nbranch commit\n");
+ new ReleaseFinishOperation(gfRepo).execute(null);
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+
+ String branchName = gfRepo.getConfig().getReleaseBranchName(MY_RELEASE);
+ // tag created?
+ assertEquals(branchCommit,
+ gfRepo.findCommitForTag(MY_VERSION_TAG + MY_RELEASE));
+ // branch removed?
+ assertEquals(findBranch(repository, branchName), null);
+
+ RevCommit developHead = gfRepo.findHead();
+ assertEquals(branchCommit, developHead);
+
+ RevCommit masterHead = gfRepo.findHead(MY_MASTER);
+ assertEquals(branchCommit, masterHead);
+ }
+
+ @Test
+ public void testReleaseFinishFail() throws Exception {
+ testRepository
+ .createInitialCommit("testReleaseFinishFail\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+ new BranchOperation(repository, gfRepo.getConfig().getDevelop()).execute(null);
+
+ try {
+ new ReleaseFinishOperation(gfRepo).execute(null);
+ fail();
+ } catch (WrongGitFlowStateException e) {
+ // success
+ }
+ }
+
+ @Test
+ public void testReleaseTagWithWrongReferenceExists() throws Exception {
+ testRepository
+ .createInitialCommit("testReleaseTagExists\n\nfirst commit\n");
+ testRepository
+ .createInitialCommit("testReleaseTagExists\n\nsecond commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+ RevCommit next = getPreviousCommit(repository, 1);
+ ReleaseFinishOperation releaseFinishOperation = new ReleaseFinishOperation(
+ gfRepo);
+ releaseFinishOperation.createTag(null, next, MY_RELEASE, "irrelevant");
+
+ try {
+ releaseFinishOperation.execute(null);
+ fail();
+ } catch (CoreException e) {
+ assertFalse(e.getStatus().isOK());
+ }
+ }
+
+ @Test
+ public void testReleaseTagWithCorrectReferenceExists() throws Exception {
+ testRepository
+ .createInitialCommit("testReleaseTagExists\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+ RevCommit next = getPreviousCommit(repository, 0);
+ ReleaseFinishOperation releaseFinishOperation = new ReleaseFinishOperation(
+ gfRepo);
+ releaseFinishOperation.createTag(null, next, MY_RELEASE, "irrelevant");
+ releaseFinishOperation.execute(null);
+ }
+
+ private RevCommit getPreviousCommit(Repository repository, int count)
+ throws GitAPIException, NoHeadException {
+ Iterable<RevCommit> logs = Git.wrap(repository).log().call();
+ Iterator<RevCommit> i = logs.iterator();
+ for (int j = 0; j < count; j++) {
+ i.next();
+ }
+ RevCommit next = i.next();
+ return next;
+ }
+}
diff --git a/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseStartOperationTest.java b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseStartOperationTest.java
new file mode 100644
index 0000000000..53f9a0f2e2
--- /dev/null
+++ b/org.eclipse.egit.gitflow.test/src/org/eclipse/egit/gitflow/op/ReleaseStartOperationTest.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (C) 2015, Max Hohenegger <eclipse@hohenegger.eu>
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+package org.eclipse.egit.gitflow.op;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.egit.core.op.TagOperation;
+import org.eclipse.egit.gitflow.GitFlowRepository;
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.TagBuilder;
+import org.eclipse.jgit.revwalk.RevCommit;
+import org.junit.Test;
+
+public class ReleaseStartOperationTest extends AbstractGitFlowOperationTest {
+ @Test
+ public void testReleaseBranchCreated() throws Exception {
+ testRepository
+ .createInitialCommit("testReleaseStart\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+
+ assertEquals(gfRepo.getConfig().getFullReleaseBranchName(MY_RELEASE),
+ repository.getFullBranch());
+ }
+
+ @Test
+ public void testReleaseStartWithContent() throws Exception {
+ testRepository
+ .createInitialCommit("testReleaseStartWithContent\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ testUtils.addFileToProject(project.getProject(), "folder1/file1.txt",
+ "Hello world");
+ testRepository.connect(project.getProject());
+ testRepository.trackAllFiles(project.getProject());
+ RevCommit developCommit = testRepository.commit("Initial commit");
+
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+
+ RevCommit releaseHead = gfRepo.findHead(gfRepo
+ .getConfig().getReleaseBranchName(MY_RELEASE));
+ assertEquals(developCommit, releaseHead);
+ }
+
+ @Test
+ public void testReleaseStartFailed() throws Exception {
+ testRepository
+ .createInitialCommit("testReleaseStart\n\nfirst commit\n");
+
+ Repository repository = testRepository.getRepository();
+ new InitOperation(repository).execute(null);
+ GitFlowRepository gfRepo = new GitFlowRepository(repository);
+
+ createTag(gfRepo.findHead(), MY_RELEASE, "irrelevant", repository);
+
+ try {
+ new ReleaseStartOperation(gfRepo, MY_RELEASE).execute(null);
+ fail();
+ } catch (CoreException e) {
+ assertEquals(gfRepo.getConfig().getDevelopFull(), repository.getFullBranch());
+ }
+ }
+
+ protected void createTag(RevCommit head, String name, String message,
+ Repository repository) throws CoreException {
+ TagBuilder tag = new TagBuilder();
+ tag.setTag(name);
+ tag.setMessage(message);
+ tag.setObjectId(head);
+ new TagOperation(repository, tag, false).execute(null);
+ }
+}

Back to the top