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

commit bc0a230ffc5c2031a3cb1d7a62855f29c6c884ba
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Jan 8 09:03:45 2019 +0100

    CAMEL-13034 - Implement 'checkout' operation for Git component
---
 .../camel/component/git/producer/GitOperation.java |  1 +
 .../camel/component/git/producer/GitProducer.java  | 20 ++++++
 .../component/git/producer/GitProducerTest.java    | 72 ++++++++++++++++++++++
 3 files changed, 93 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 d5f63fa..fb03361 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
@@ -19,6 +19,7 @@ package org.apache.camel.component.git.producer;
 public interface GitOperation {
 
     String CLONE_OPERATION = "clone";
+    String CHECKOUT_OPERATION = "checkout";
     String INIT_OPERATION = "init";
     String ADD_OPERATION = "add";
     String REMOVE_OPERATION = "remove";
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 c73b7a7..6046296 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
@@ -93,6 +93,10 @@ public class GitProducer extends DefaultProducer {
         case GitOperation.CLONE_OPERATION:
             doClone(exchange, operation);
             break;
+            
+        case GitOperation.CHECKOUT_OPERATION:
+            doCheckout(exchange, operation);
+            break;
 
         case GitOperation.INIT_OPERATION:
             doInit(exchange, operation);
@@ -213,6 +217,22 @@ public class GitProducer extends DefaultProducer {
             }
         }
     }
+    
+    protected void doCheckout(Exchange exchange, String operation) throws 
Exception {
+        if (ObjectHelper.isEmpty(endpoint.getBranchName())) {
+            throw new IllegalArgumentException("Branch Name must be specified 
to execute " + operation);
+        }
+        try {
+               if (ObjectHelper.isEmpty(endpoint.getTagName())) {
+                
git.checkout().setCreateBranch(true).setName(endpoint.getBranchName()).call();
+               } else {
+                       
git.checkout().setCreateBranch(true).setName(endpoint.getBranchName()).setStartPoint(endpoint.getTagName()).call();
+               }
+        } catch (Exception e) {
+            log.error("There was an error in Git {} operation", operation);
+            throw e;
+        }
+    }
 
     protected void doInit(Exchange exchange, String operation) throws 
Exception {
         Git result = null;
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 3a09f42..a3303ac 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
@@ -58,6 +58,76 @@ public class GitProducerTest extends GitTestSupport {
         File gitDir = new File(gitLocalRepo, ".git");
         assertEquals(gitDir.exists(), true);
     }
+    
+    @Test
+    public void checkoutTest() 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();
+
+        // Test camel-git checkout
+        template.sendBody("direct:checkout", "");
+
+        // Check
+        List<Ref> ref = git.branchList().call();
+        boolean branchCreated = false;
+        for (Ref refInternal : ref) {
+            if (refInternal.getName().equals("refs/heads/" + branchTest)) {
+                branchCreated = true;
+            }
+        }
+        assertEquals(branchCreated, true);
+        git.close();
+    }
+    
+    
+    @Test
+    public void checkoutSpecificTagTest() throws Exception {
+        // Init
+        Git git = getGitTestRepository();
+        File fileToAdd = new File(gitLocalRepo, filenameToAdd);
+        fileToAdd.createNewFile();
+        git.add().addFilepattern(filenameToAdd).call();
+        File gitDir = new File(gitLocalRepo, ".git");
+        assertEquals(gitDir.exists(), true);
+        Status status = git.status().call();
+        assertTrue(status.getAdded().contains(filenameToAdd));
+        git.commit().setMessage(commitMessage).call();
+        
+        // Test camel-git create tag
+        template.sendBody("direct:create-tag", "");
+
+        // Check
+        List<Ref> ref = git.tagList().call();
+        boolean tagCreated = false;
+        for (Ref refInternal : ref) {
+            if (refInternal.getName().equals("refs/tags/" + tagTest)) {
+                tagCreated = true;
+            }
+        }
+        assertEquals(tagCreated, true);
+
+        // Test camel-git create-branch
+        template.sendBody("direct:checkout-specific-tag", "");
+
+        // Check
+        ref = git.branchList().call();
+        boolean branchCreated = false;
+        for (Ref refInternal : ref) {
+            if (refInternal.getName().equals("refs/heads/" + branchTest)) {
+                branchCreated = true;
+            }
+        }
+        assertEquals(branchCreated, true);
+        git.close();
+    }
 
     @Test(expected = CamelExecutionException.class)
     public void doubleCloneOperationTest() throws Exception {
@@ -814,6 +884,8 @@ public class GitProducerTest extends GitTestSupport {
                 from("direct:clone").to("git://" + gitLocalRepo + 
"?remotePath=https://github.com/oscerd/json-webserver-example.git&operation=clone";);
                 from("direct:init").to("git://" + gitLocalRepo + 
"?operation=init");
                 from("direct:add").to("git://" + gitLocalRepo + 
"?operation=add");
+                from("direct:checkout").to("git://" + gitLocalRepo + 
"?operation=checkout&branchName=" + branchTest);
+                from("direct:checkout-specific-tag").to("git://" + 
gitLocalRepo + "?operation=checkout&branchName=" + branchTest + "&tagName=" + 
tagTest);
                 from("direct:remove").to("git://" + gitLocalRepo + 
"?operation=remove");
                 from("direct:add-on-branch").to("git://" + gitLocalRepo + 
"?operation=add&branchName=" + branchTest);
                 from("direct:remove-on-branch").to("git://" + gitLocalRepo + 
"?operation=add&branchName=" + branchTest);

Reply via email to