You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2018/03/23 09:50:17 UTC

[camel] branch master updated: CAMEL-12400 - Camel-Git: Add Merge operation

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new fc44f03  CAMEL-12400 - Camel-Git: Add Merge operation
fc44f03 is described below

commit fc44f03672816ef30044b442519ade79aa7b8b30
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Mar 23 10:47:59 2018 +0100

    CAMEL-12400 - Camel-Git: Add Merge operation
---
 .../camel/component/git/producer/GitOperation.java |  1 +
 .../camel/component/git/producer/GitProducer.java  | 23 ++++++++++++++++
 .../component/git/producer/GitProducerTest.java    | 32 ++++++++++++++++++++++
 3 files changed, 56 insertions(+)

diff --git a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitOperation.java b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitOperation.java
index 55ae08b..f37d488 100644
--- a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitOperation.java
+++ b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitOperation.java
@@ -32,6 +32,7 @@ public interface GitOperation {
     String LOG_OPERATION = "log";
     String PUSH_OPERATION = "push";
     String PULL_OPERATION = "pull";
+    String MERGE_OPERATION = "merge";
     String SHOW_BRANCHES = "showBranches";
     String CHERRYPICK_OPERATION = "cherryPick";
     String REMOTE_ADD_OPERATION = "remoteAdd";
diff --git a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
index 8d671ad..930f19a 100644
--- a/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
+++ b/components/camel-git/src/main/java/org/apache/camel/component/git/producer/GitProducer.java
@@ -31,6 +31,8 @@ import org.apache.camel.util.ObjectHelper;
 import org.eclipse.jgit.api.CherryPickResult;
 import org.eclipse.jgit.api.Git;
 import org.eclipse.jgit.api.ListBranchCommand.ListMode;
+import org.eclipse.jgit.api.MergeCommand.FastForwardMode;
+import org.eclipse.jgit.api.MergeResult;
 import org.eclipse.jgit.api.PullResult;
 import org.eclipse.jgit.api.RemoteAddCommand;
 import org.eclipse.jgit.api.Status;
@@ -141,6 +143,10 @@ public class GitProducer extends DefaultProducer {
         case GitOperation.PULL_OPERATION:
             doPull(exchange, operation);
             break;
+            
+        case GitOperation.MERGE_OPERATION:
+            doMerge(exchange, operation);
+            break;
 
         case GitOperation.CREATE_TAG_OPERATION:
             doCreateTag(exchange, operation);
@@ -418,6 +424,23 @@ public class GitProducer extends DefaultProducer {
         }
         updateExchange(exchange, result);
     }
+    
+    protected void doMerge(Exchange exchange, String operation) throws Exception {
+        MergeResult result = null;
+        ObjectId mergeBase;
+        try {
+            if (ObjectHelper.isEmpty(endpoint.getBranchName())) {
+                throw new IllegalArgumentException("Branch name must be specified to execute " + operation);
+            }
+            mergeBase = git.getRepository().resolve(endpoint.getBranchName());
+            git.checkout().setName("master").call();
+            result = git.merge().include(mergeBase).setFastForward(FastForwardMode.FF).setCommit(true).call();
+        } catch (Exception e) {
+            LOG.error("There was an error in Git " + operation + " operation");
+            throw e;
+        }
+        updateExchange(exchange, result);
+    }
 
     protected void doCreateTag(Exchange exchange, String operation) throws Exception {
         if (ObjectHelper.isEmpty(endpoint.getTagName())) {
diff --git a/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java b/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
index 8fc324a..6308827 100644
--- a/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
+++ b/components/camel-git/src/test/java/org/apache/camel/component/git/producer/GitProducerTest.java
@@ -32,6 +32,7 @@ import org.apache.camel.component.git.GitConstants;
 import org.apache.camel.component.git.GitTestSupport;
 import org.eclipse.jgit.api.CreateBranchCommand.SetupUpstreamMode;
 import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.MergeResult;
 import org.eclipse.jgit.api.PullResult;
 import org.eclipse.jgit.api.RemoteAddCommand;
 import org.eclipse.jgit.api.Status;
@@ -746,6 +747,36 @@ public class GitProducerTest extends GitTestSupport {
         assertNotNull(gcResult);
         git.close();
     }
+    
+    @Test
+    public void mergeTest() throws Exception {
+        // Init
+        Git git = getGitTestRepository();
+        File gitDir = new File(gitLocalRepo, ".git");
+        assertEquals(gitDir.exists(), true);
+        File fileToAdd = new File(gitLocalRepo, filenameToAdd);
+        fileToAdd.createNewFile();
+        git.add().addFilepattern(filenameToAdd).call();
+        Status status = git.status().call();
+        assertTrue(status.getAdded().contains(filenameToAdd));
+        git.commit().setMessage(commitMessage).call();
+        validateGitLogs(git, commitMessage);
+        git.checkout().setCreateBranch(true).setName(branchTest).setUpstreamMode(SetupUpstreamMode.SET_UPSTREAM).call();
+
+        // Test camel-git commit (with branch)
+        template.send("direct:commit-branch", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(GitConstants.GIT_COMMIT_MESSAGE, commitMessageBranch);
+            }
+        });
+        validateGitLogs(git, commitMessageBranch, commitMessage);
+        
+        // Test camel-git commit (with branch)
+        MergeResult result = template.requestBody("direct:merge", "", MergeResult.class);
+        assertEquals(result.getMergeStatus().toString(), "Fast-forward");
+        git.close();
+    }
 
     @Override
     protected RouteBuilder createRouteBuilder() throws Exception {
@@ -782,6 +813,7 @@ public class GitProducerTest extends GitTestSupport {
                 from("direct:gc").to("git://" + gitLocalRepo + "?operation=gc");
                 from("direct:remoteAdd").to("git://" + gitLocalRepo + "?operation=remoteAdd&remotePath=https://github.com/oscerd/json-webserver-example.git&remoteName=origin");
                 from("direct:remoteList").to("git://" + gitLocalRepo + "?operation=remoteList");
+                from("direct:merge").to("git://" + gitLocalRepo + "?operation=merge&branchName=" + branchTest);
             }
         };
     }

-- 
To stop receiving notification emails like this one, please contact
acosentino@apache.org.