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

benjobs pushed a commit to branch dev-2.1.5
in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git


The following commit(s) were added to refs/heads/dev-2.1.5 by this push:
     new b0dfff8a8 [Feat] git clone by tag support. (#4008)
b0dfff8a8 is described below

commit b0dfff8a8b9375f739388e9b2968e3876f790fc3
Author: benjobs <[email protected]>
AuthorDate: Fri Aug 30 11:41:09 2024 +0800

    [Feat] git clone by tag support. (#4008)
---
 .../streampark/console/base/util/GitUtils.java     | 50 ++++++++++++++++++----
 .../console/core/service/ProjectService.java       |  2 +
 .../core/service/impl/ProjectServiceImpl.java      | 18 +++++++-
 .../console/core/task/ProjectBuildTask.java        |  2 +-
 .../console/core/service/ProjectServiceTest.java   |  7 +++
 .../GitUtilsTest.java}                             | 40 ++++++++---------
 6 files changed, 85 insertions(+), 34 deletions(-)

diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/GitUtils.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/GitUtils.java
index f13c158a2..bfee0ab95 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/GitUtils.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/base/util/GitUtils.java
@@ -53,13 +53,22 @@ public class GitUtils {
     try {
       CloneCommand cloneCommand =
           
Git.cloneRepository().setURI(request.getUrl()).setDirectory(request.getStoreDir());
-      if (request.getBranches() != null) {
-        cloneCommand.setBranch(Constants.R_HEADS + request.getBranches());
+      setCredentials(cloneCommand, request);
+      if (StringUtils.isNotBlank(request.getBranch())) {
+        cloneCommand.setBranch(Constants.R_HEADS + request.getBranch());
         cloneCommand.setBranchesToClone(
-            Collections.singletonList(Constants.R_HEADS + 
request.getBranches()));
+            Collections.singletonList(Constants.R_HEADS + 
request.getBranch()));
       }
-      setCredentials(cloneCommand, request);
-      return cloneCommand.call();
+
+      Git git = cloneCommand.call();
+      if (StringUtils.isNotBlank(request.getBranch())) {
+        git.checkout().setName(request.getBranch()).call();
+      } else if (StringUtils.isNotBlank(request.getTag())) {
+        git.checkout().setName(request.getTag()).call();
+      } else {
+        throw new IllegalArgumentException("git clone failed, No tag or branch 
specified");
+      }
+      return git;
     } catch (Exception e) {
       if (e instanceof InvalidRemoteException && request.getAuthType() == 
GitAuthType.HTTP) {
         String url = httpUrlToSSH(request.getUrl());
@@ -70,7 +79,7 @@ public class GitUtils {
     }
   }
 
-  public static List<String> getBranchList(GitGetRequest request) throws 
GitAPIException {
+  public static List<String> getBranches(GitGetRequest request) throws 
GitAPIException {
     try {
       LsRemoteCommand command = 
Git.lsRemoteRepository().setRemote(request.getUrl()).setHeads(true);
       setCredentials(command, request);
@@ -88,7 +97,31 @@ public class GitUtils {
       if (e instanceof InvalidRemoteException && request.getAuthType() == 
GitAuthType.HTTP) {
         String url = httpUrlToSSH(request.getUrl());
         request.setUrl(url);
-        return getBranchList(request);
+        return getBranches(request);
+      }
+      throw e;
+    }
+  }
+
+  public static List<String> getTags(GitGetRequest request) throws 
GitAPIException {
+    try {
+      LsRemoteCommand command = 
Git.lsRemoteRepository().setRemote(request.getUrl()).setTags(true);
+      setCredentials(command, request);
+      Collection<Ref> refList = command.call();
+      List<String> branchList = new ArrayList<>(4);
+      for (Ref ref : refList) {
+        String refName = ref.getName();
+        if (refName.startsWith(Constants.R_TAGS)) {
+          String branchName = refName.replace(Constants.R_TAGS, "");
+          branchList.add(branchName);
+        }
+      }
+      return branchList;
+    } catch (Exception e) {
+      if (e instanceof InvalidRemoteException && request.getAuthType() == 
GitAuthType.HTTP) {
+        String url = httpUrlToSSH(request.getUrl());
+        request.setUrl(url);
+        return getTags(request);
       }
       throw e;
     }
@@ -197,6 +230,7 @@ public class GitUtils {
   @Setter
   public static class GitCloneRequest extends GitGetRequest {
     private File storeDir;
-    private String branches;
+    private String branch;
+    private String tag;
   }
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProjectService.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProjectService.java
index ae4eb87d4..19f6937fe 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProjectService.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/ProjectService.java
@@ -62,4 +62,6 @@ public interface ProjectService extends IService<Project> {
   List<String> getAllBranches(Project project);
 
   GitAuthorizedError gitCheck(Project project);
+
+  List<String> getAllTags(Project project);
 }
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java
index 8b9c167b6..c82a7006d 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/service/impl/ProjectServiceImpl.java
@@ -322,7 +322,7 @@ public class ProjectServiceImpl extends 
ServiceImpl<ProjectMapper, Project>
       request.setUsername(project.getUserName());
       request.setPassword(project.getPassword());
       request.setPrivateKey(project.getPrvkeyPath());
-      return GitUtils.getBranchList(request);
+      return GitUtils.getBranches(request);
     } catch (Exception e) {
       throw new ApiDetailException(e);
     }
@@ -336,7 +336,7 @@ public class ProjectServiceImpl extends 
ServiceImpl<ProjectMapper, Project>
       request.setUsername(project.getUserName());
       request.setPassword(project.getPassword());
       request.setPrivateKey(project.getPrvkeyPath());
-      GitUtils.getBranchList(request);
+      GitUtils.getBranches(request);
       return GitAuthorizedError.SUCCESS;
     } catch (Exception e) {
       String err = e.getMessage();
@@ -349,6 +349,20 @@ public class ProjectServiceImpl extends 
ServiceImpl<ProjectMapper, Project>
     }
   }
 
+  @Override
+  public List<String> getAllTags(Project project) {
+    try {
+      GitUtils.GitGetRequest request = new GitUtils.GitGetRequest();
+      request.setUrl(project.getUrl());
+      request.setUsername(project.getUserName());
+      request.setPassword(project.getPassword());
+      request.setPrivateKey(project.getPrvkeyPath());
+      return GitUtils.getTags(request);
+    } catch (Exception e) {
+      throw new ApiDetailException(e);
+    }
+  }
+
   @Override
   public List<Map<String, Object>> listConf(Project project) {
     try {
diff --git 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/task/ProjectBuildTask.java
 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/task/ProjectBuildTask.java
index 5fe20cd13..4859f4f2a 100644
--- 
a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/task/ProjectBuildTask.java
+++ 
b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/task/ProjectBuildTask.java
@@ -93,7 +93,7 @@ public class ProjectBuildTask extends AbstractLogFileTask {
 
       GitUtils.GitCloneRequest request = new GitUtils.GitCloneRequest();
       request.setUrl(project.getUrl());
-      request.setBranches(project.getBranches());
+      request.setBranch(project.getBranches());
       request.setStoreDir(project.getAppSource());
       request.setUsername(project.getUserName());
       request.setPassword(project.getPassword());
diff --git 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ProjectServiceTest.java
 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ProjectServiceTest.java
index e82a61cd9..151dd2070 100644
--- 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ProjectServiceTest.java
+++ 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ProjectServiceTest.java
@@ -46,6 +46,13 @@ public class ProjectServiceTest extends SpringTestBase {
     branches.forEach(System.out::println);
   }
 
+  @Disabled("This test case can't be runnable due to external service is not 
available.")
+  @Test
+  void testGitTags() {
+    List<String> branches = projectService.getAllTags(project);
+    branches.forEach(System.out::println);
+  }
+
   @Disabled("This test case can't be runnable due to external service is not 
available.")
   @Test
   void testGitCheckAuth() {
diff --git 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ProjectServiceTest.java
 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/utils/GitUtilsTest.java
similarity index 55%
copy from 
streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ProjectServiceTest.java
copy to 
streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/utils/GitUtilsTest.java
index e82a61cd9..579f77897 100644
--- 
a/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/service/ProjectServiceTest.java
+++ 
b/streampark-console/streampark-console-service/src/test/java/org/apache/streampark/console/core/utils/GitUtilsTest.java
@@ -15,41 +15,35 @@
  * limitations under the License.
  */
 
-package org.apache.streampark.console.core.service;
+package org.apache.streampark.console.core.utils;
 
-import org.apache.streampark.console.SpringTestBase;
-import org.apache.streampark.console.core.entity.Project;
-import org.apache.streampark.console.core.enums.GitAuthorizedError;
+import org.apache.streampark.console.base.util.GitUtils;
 
-import org.junit.jupiter.api.BeforeEach;
+import org.eclipse.jgit.api.errors.GitAPIException;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.List;
+import java.io.File;
 
-public class ProjectServiceTest extends SpringTestBase {
-
-  private final Project project = new Project();
-
-  @Autowired private ProjectService projectService;
-
-  @BeforeEach
-  void before() {
-    project.setUrl("[email protected]:apache/incubator-streampark.git");
-  }
+public class GitUtilsTest {
 
   @Disabled("This test case can't be runnable due to external service is not 
available.")
   @Test
-  void testGitBranches() {
-    List<String> branches = projectService.getAllBranches(project);
-    branches.forEach(System.out::println);
+  void testGitCloneByTag() throws GitAPIException {
+    GitUtils.GitCloneRequest request = new GitUtils.GitCloneRequest();
+    request.setUrl("[email protected]:apache/incubator-streampark.git");
+    request.setTag("v1.2.3");
+    request.setStoreDir(new File("/tmp"));
+    GitUtils.clone(request);
   }
 
   @Disabled("This test case can't be runnable due to external service is not 
available.")
   @Test
-  void testGitCheckAuth() {
-    GitAuthorizedError error = projectService.gitCheck(project);
-    System.out.println(error);
+  void testGitCloneByBranch() throws GitAPIException {
+    GitUtils.GitCloneRequest request = new GitUtils.GitCloneRequest();
+    request.setUrl("[email protected]:apache/incubator-streampark.git");
+    request.setBranch("2.1.4");
+    request.setStoreDir(new File("/tmp"));
+    GitUtils.clone(request);
   }
 }

Reply via email to