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 <mrinalsha...@users.noreply.github.com>
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);

Reply via email to