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 9e94953 Delete project from Git repo when user deletes the project
(#572)
9e94953 is described below
commit 9e949535b6877606d45ede5dc6dc09bc10e67afe
Author: Mrinal Sharma <[email protected]>
AuthorDate: Tue Dec 20 16:36:49 2022 -0500
Delete project from Git repo when user deletes the project (#572)
---
.../apache/camel/karavan/api/ProjectResource.java | 6 +++-
.../apache/camel/karavan/service/GitService.java | 34 ++++++++++++++++++++++
2 files changed, 39 insertions(+), 1 deletion(-)
diff --git
a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
index 77b2dc6..0961e4a 100644
---
a/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
+++
b/karavan-app/src/main/java/org/apache/camel/karavan/api/ProjectResource.java
@@ -20,7 +20,7 @@ import org.apache.camel.karavan.model.GroupedKey;
import org.apache.camel.karavan.model.Project;
import org.apache.camel.karavan.model.ProjectFile;
import org.apache.camel.karavan.service.InfinispanService;
-
+import org.apache.camel.karavan.service.GitService;
import javax.inject.Inject;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
@@ -44,6 +44,9 @@ public class ProjectResource {
@Inject
InfinispanService infinispanService;
+ @Inject
+ GitService gitService;
+
@GET
@Produces(MediaType.APPLICATION_JSON)
public List<Project> getAll() throws Exception {
@@ -79,6 +82,7 @@ public class ProjectResource {
public void delete(@HeaderParam("username") String username,
@PathParam("project") String project) throws
Exception {
String projectId = URLDecoder.decode(project,
StandardCharsets.UTF_8.toString());
+ gitService.deleteProject(projectId,
infinispanService.getProjectFiles(projectId));
infinispanService.getProjectFiles(projectId).forEach(file ->
infinispanService.deleteProjectFile(projectId, file.getName()));
infinispanService.deleteProject(projectId);
}
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 c52e00d..be83abf 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
@@ -261,6 +261,40 @@ public class GitService {
return git;
}
+ private void addDeletedFolderToIndex(Git git, String folder, String
projectId, List<ProjectFile> files) throws IOException {
+ LOGGER.infof("Add folder %s to git index.", projectId);
+ try {
+ git.rm().addFilepattern(projectId + File.separator).call();
+ } catch (GitAPIException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public void deleteProject(String projectId, List<ProjectFile> files)
throws GitAPIException, IOException, URISyntaxException {
+ LOGGER.info("Delete and push project " + projectId);
+ GitConfig gitConfig = getGitConfig();
+ CredentialsProvider cred = new
UsernamePasswordCredentialsProvider(gitConfig.getUsername(),
gitConfig.getPassword());
+ String uuid = UUID.randomUUID().toString();
+ String folder = vertx.fileSystem().createTempDirectoryBlocking(uuid);
+ String commitMessage = "Project " + projectId + " is deleted";
+ LOGGER.infof("Temp folder %s is created for deletion of project %s",
folder, projectId);
+ Git git = null;
+ try {
+ git = clone(folder, gitConfig.getUri(), gitConfig.getBranch(),
cred);
+ checkout(git, false, null, null, gitConfig.getBranch());
+ addDeletedFolderToIndex(git, folder, projectId, files);
+ commitAddedAndPush(git, gitConfig.getBranch(), cred,
commitMessage);
+ LOGGER.info("Delete Temp folder " + folder);
+ vertx.fileSystem().deleteRecursiveBlocking(folder, true);
+ LOGGER.infof("Project %s deleted from Git" , projectId);
+ } catch (RefNotFoundException e) {
+ LOGGER.error("Repository not found");
+ } catch (Exception e) {
+ LOGGER.error("Error", e);
+ throw new RuntimeException(e);
+ }
+ }
+
private Git clone(String dir, String uri, String branch,
CredentialsProvider cred) throws GitAPIException {
CloneCommand cloneCommand = Git.cloneRepository();
cloneCommand.setCloneAllBranches(false);