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 <[email protected]>
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);