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