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

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git


The following commit(s) were added to refs/heads/main by this push:
     new 8df7eb99 Fix issues with #645
8df7eb99 is described below

commit 8df7eb99a9fab2ef0c39b0721352fdfd1adc75a7
Author: Marat Gubaidullin <marat.gubaidul...@gmail.com>
AuthorDate: Wed Mar 1 18:10:47 2023 -0500

    Fix issues with #645
---
 karavan-app/pom.xml                                | 10 ++--
 .../org/apache/camel/karavan/model/CommitInfo.java | 14 +++++
 .../apache/camel/karavan/service/GitService.java   | 68 ++++++++++++----------
 .../camel/karavan/service/KaravanService.java      |  8 +--
 .../camel/karavan/service/ProjectService.java      | 35 ++++++-----
 5 files changed, 77 insertions(+), 58 deletions(-)

diff --git a/karavan-app/pom.xml b/karavan-app/pom.xml
index 151cfb34..8425c737 100644
--- a/karavan-app/pom.xml
+++ b/karavan-app/pom.xml
@@ -157,11 +157,11 @@
             <artifactId>rest-assured</artifactId>
             <scope>test</scope>
         </dependency>
-<!--        <dependency>-->
-<!--            <groupId>io.quarkiverse.quinoa</groupId>-->
-<!--            <artifactId>quarkus-quinoa</artifactId>-->
-<!--            <version>${quinoa.version}</version>-->
-<!--        </dependency>-->
+        <dependency>
+            <groupId>io.quarkiverse.quinoa</groupId>
+            <artifactId>quarkus-quinoa</artifactId>
+            <version>${quinoa.version}</version>
+        </dependency>
     </dependencies>
     <build>
         <resources>
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/model/CommitInfo.java 
b/karavan-app/src/main/java/org/apache/camel/karavan/model/CommitInfo.java
index 2affc488..d028ca5b 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/model/CommitInfo.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/model/CommitInfo.java
@@ -7,6 +7,11 @@ public class CommitInfo {
     private Integer time;
     private List<GitRepo> repos;
 
+    public CommitInfo(String commitId, Integer time) {
+        this.commitId = commitId;
+        this.time = time;
+    }
+
     public CommitInfo(String commitId, Integer time, List<GitRepo> repos) {
         this.commitId = commitId;
         this.time = time;
@@ -36,4 +41,13 @@ public class CommitInfo {
     public void setRepos(List<GitRepo> repos) {
         this.repos = repos;
     }
+
+    @Override
+    public String toString() {
+        return "CommitInfo{" +
+                "commitId='" + commitId + '\'' +
+                ", time=" + time +
+                ", repos=" + repos +
+                '}';
+    }
 }
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
index 2b459861..f04dd9fa 100644
--- a/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
+++ b/karavan-app/src/main/java/org/apache/camel/karavan/service/GitService.java
@@ -29,6 +29,8 @@ import org.eclipse.jgit.api.CheckoutCommand;
 import org.eclipse.jgit.api.CloneCommand;
 import org.eclipse.jgit.api.FetchCommand;
 import org.eclipse.jgit.api.Git;
+import org.eclipse.jgit.api.PullCommand;
+import org.eclipse.jgit.api.PullResult;
 import org.eclipse.jgit.api.RemoteAddCommand;
 import org.eclipse.jgit.api.errors.GitAPIException;
 import org.eclipse.jgit.api.errors.RefNotFoundException;
@@ -77,29 +79,29 @@ public class GitService {
     @Inject
     KubernetesService kubernetesService;
 
-    private Git git;
+    private Git gitForImport;
 
     private static final Logger LOGGER = 
Logger.getLogger(GitService.class.getName());
 
-    public Git getPollGit(){
-        if (git == null) {
+    public Git getGitForImport(){
+        if (gitForImport == null) {
             try {
-                git = getGit(true, 
vertx.fileSystem().createTempDirectoryBlocking("poll"));
+                gitForImport = getGit(true, 
vertx.fileSystem().createTempDirectoryBlocking("import"));
             } catch (Exception e) {
                 LOGGER.error("Error", e);
             }
         }
-        return git;
+        return gitForImport;
     }
 
-    public Map<String, Integer> getAllCommits() {
-        Map<String, Integer> result = new HashMap();
+    public List<CommitInfo> getAllCommits() {
+        List<CommitInfo> result = new ArrayList<>();
         try {
-            Git pollGit = getPollGit();
+            Git pollGit = getGitForImport();
             if (pollGit != null) {
                 StreamSupport.stream(pollGit.log().all().call().spliterator(), 
false)
                         
.sorted(Comparator.comparingInt(RevCommit::getCommitTime))
-                        .forEach(commit -> result.put(commit.getName(), 
commit.getCommitTime()));
+                        .forEach(commit -> result.add(new 
CommitInfo(commit.getName(), commit.getCommitTime())));
             }
         } catch (Exception e) {
             LOGGER.error(e.getMessage());
@@ -110,11 +112,11 @@ public class GitService {
     public List<CommitInfo> getCommitsAfterCommit(int commitTime) {
         List<CommitInfo> result = new ArrayList<>();
         try {
-            Git pollGit = getPollGit();
+            Git pollGit = getGitForImport();
             if (pollGit != null) {
                 GitConfig gitConfig = getGitConfig();
                 CredentialsProvider cred = new 
UsernamePasswordCredentialsProvider(gitConfig.getUsername(), 
gitConfig.getPassword());
-                fetch(pollGit, cred);
+                pull(pollGit, cred);
                 List<RevCommit> commits = 
StreamSupport.stream(pollGit.log().all().call().spliterator(), false)
                         .filter(commit -> commit.getCommitTime() > commitTime)
                         
.sorted(Comparator.comparingInt(RevCommit::getCommitTime)).collect(Collectors.toList());
@@ -173,14 +175,12 @@ public class GitService {
         return commitAddedAndPush(git, gitConfig.getBranch(), cred, message);
     }
 
-    public List<GitRepo> readProjectsFromRepository() {
-        Git git = null;
-        try {
-            git = getGit(true, 
vertx.fileSystem().createTempDirectoryBlocking(UUID.randomUUID().toString()));
-        } catch (Exception e) {
-            LOGGER.error("Error", e);
+    public List<GitRepo> readProjectsToImport() {
+        Git importGit = getGitForImport();
+        if (importGit != null) {
+            return readProjectsFromRepository(importGit, null);
         }
-        return readProjectsFromRepository(git, null);
+        return new ArrayList<>(0);
     }
 
     public GitRepo readProjectFromRepository(String projectId) {
@@ -198,12 +198,7 @@ public class GitService {
         List<GitRepo> result = new ArrayList<>();
         try {
             String folder = 
git.getRepository().getDirectory().getAbsolutePath().replace("/.git", "");
-            List<String> projects = readProjectsFromFolder(folder);
-            if (filter != null) {
-                projects = projects.stream().filter(s -> 
Arrays.stream(filter).filter(f -> 
f.equals(s)).findFirst().isPresent()).collect(Collectors.toList());
-            } else {
-                projects = projects.stream().filter(s -> 
!s.startsWith(".")).collect(Collectors.toList()); // do not import hidden 
folders
-            }
+            List<String> projects = readProjectsFromFolder(folder, filter);
             for (String project : projects) {
                 Map<String, String> filesRead = 
readProjectFilesFromFolder(folder, project);
                 List<GitRepoFile> files = new ArrayList<>(filesRead.size());
@@ -262,15 +257,19 @@ public class GitService {
         return kamelets;
     }
 
-    private List<String> readProjectsFromFolder(String folder) {
+    private List<String> readProjectsFromFolder(String folder, String... 
filter) {
         LOGGER.info("Read projects from " + folder);
         List<String> files = new ArrayList<>();
-        vertx.fileSystem().readDirBlocking(folder).forEach(f -> {
-            String[] filenames = f.split(File.separator);
+        vertx.fileSystem().readDirBlocking(folder).forEach(path -> {
+            String[] filenames = path.split(File.separator);
             String folderName = filenames[filenames.length - 1];
-            if (!folderName.startsWith(".") && 
Files.isDirectory(Paths.get(f))) {
-                LOGGER.info("Importing project from folder " + folderName);
-                files.add(folderName);
+            if (folderName.startsWith(".")) {
+                // skip hidden
+            } else if (Files.isDirectory(Paths.get(path))) {
+                if (filter == null || Arrays.stream(filter).filter(f -> 
f.equals(folderName)).findFirst().isPresent()) {
+                    LOGGER.info("Importing project from folder " + folderName);
+                    files.add(folderName);
+                }
             }
         });
         return files;
@@ -403,6 +402,13 @@ public class GitService {
         FetchResult result = fetchCommand.call();
     }
 
+    private void pull(Git git, CredentialsProvider cred) throws 
GitAPIException {
+        // pull:
+        PullCommand pullCommand = git.pull();
+        pullCommand.setCredentialsProvider(cred);
+        PullResult result = pullCommand.call();
+    }
+
     private void checkout(Git git, boolean create, String path, String 
startPoint, String branch) throws GitAPIException {
         // create branch:
         CheckoutCommand checkoutCommand = git.checkout();
@@ -427,7 +433,7 @@ public class GitService {
 
     public Set<String> getChangedProjects(RevCommit commit) {
         Set<String> files = new HashSet<>();
-        Git git = getPollGit();
+        Git git = getGitForImport();
         if (git != null) {
             TreeWalk walk = new TreeWalk(git.getRepository());
             walk.setRecursive(true);
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
index 6f5d7c33..88915aca 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/KaravanService.java
@@ -65,13 +65,7 @@ public class KaravanService {
     }
 
     void initialImport() {
-        if (infinispanService.getProjects().isEmpty()) {
-            LOGGER.info("No projects found in the Data Grid");
-            bus.publish(ProjectService.IMPORT_PROJECTS, "");
-        } else {
-            bus.publish(ProjectService.IMPORT_TEMPLATES, "");
-        }
-        bus.publish(ProjectService.IMPORT_COMMITS, "");
+        bus.publish(ProjectService.IMPORT_PROJECTS, "");
     }
 
     void startInformers() {
diff --git 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
index 9d8f174b..e679ceb2 100644
--- 
a/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
+++ 
b/karavan-app/src/main/java/org/apache/camel/karavan/service/ProjectService.java
@@ -29,6 +29,7 @@ import org.jboss.logging.Logger;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
 import java.time.Instant;
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -36,9 +37,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 public class ProjectService {
 
     private static final Logger LOGGER = 
Logger.getLogger(ProjectService.class.getName());
-    public static final String IMPORT_TEMPLATES = "import-templates";
     public static final String IMPORT_PROJECTS = "import-projects";
-    public static final String IMPORT_COMMITS = "import-commits";
 
     @Inject
     InfinispanService infinispanService;
@@ -60,8 +59,10 @@ public class ProjectService {
     @Scheduled(every = "{karavan.git-pull-interval}", concurrentExecution = 
Scheduled.ConcurrentExecution.SKIP)
     void pullCommits() {
         if (readyToPull.get()) {
+            LOGGER.info("Pull commits...");
             Tuple2<String, Integer> lastCommit = 
infinispanService.getLastCommit();
             
gitService.getCommitsAfterCommit(lastCommit.getItem2()).forEach(commitInfo -> {
+                System.out.println(commitInfo);
                 if (!infinispanService.hasCommit(commitInfo.getCommitId())) {
                     commitInfo.getRepos().forEach(repo -> {
                         Project project = importProjectFromRepo(repo);
@@ -74,21 +75,27 @@ public class ProjectService {
         }
     }
 
-    @ConsumeEvent(value = IMPORT_COMMITS, blocking = true)
-    void importCommits(String data) {
-        LOGGER.info("Import commits");
-        gitService.getAllCommits().forEach((commitId, time) -> {
-            infinispanService.saveCommit(commitId, time);
-            infinispanService.saveLastCommit(commitId);
+    void importCommits() {
+        LOGGER.info("Import commits...");
+        gitService.getAllCommits().forEach(commitInfo -> {
+            infinispanService.saveCommit(commitInfo.getCommitId(), 
commitInfo.getTime());
+            infinispanService.saveLastCommit(commitInfo.getCommitId());
         });
         readyToPull.set(true);
     }
 
     @ConsumeEvent(value = IMPORT_PROJECTS, blocking = true)
-    void importAllProjects(String data) {
+    void importProjects(String data) {
+        if (infinispanService.getProjects().isEmpty()) {
+            importAllProjects();
+        }
+        addTemplatesProject();
+        importCommits();
+    }
+    private void importAllProjects() {
         LOGGER.info("Import projects from Git");
         try {
-            List<GitRepo> repos = gitService.readProjectsFromRepository();
+            List<GitRepo> repos = gitService.readProjectsToImport();
             repos.forEach(repo -> {
                 Project project;
                 String folderName = repo.getName();
@@ -106,11 +113,10 @@ public class ProjectService {
                     infinispanService.saveProjectFile(file);
                 });
             });
-            addKameletsProject("");
+            addKameletsProject();
         } catch (Exception e) {
             LOGGER.error("Error during project import", e);
         }
-        addTemplatesProject("");
     }
 
     public Project importProject(String projectId) {
@@ -162,7 +168,7 @@ public class ProjectService {
         return p;
     }
 
-    void addKameletsProject(String data) {
+    void addKameletsProject() {
         LOGGER.info("Add custom kamelets project if not exists");
         try {
             Project kamelets  = 
infinispanService.getProject(Project.NAME_KAMELETS);
@@ -176,8 +182,7 @@ public class ProjectService {
         }
     }
 
-    @ConsumeEvent(value = IMPORT_TEMPLATES, blocking = true)
-    void addTemplatesProject(String data) {
+    void addTemplatesProject() {
         LOGGER.info("Add templates project if not exists");
         try {
             Project templates  = 
infinispanService.getProject(Project.NAME_TEMPLATES);

Reply via email to