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);