package com.cadrlife.devsearch.agent.service.git; import java.io.File; import java.nio.file.Path; import java.util.List; import org.eclipse.jgit.api.Git; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.cadrlife.devsearch.agent.service.CleanService; import com.cadrlife.devsearch.agent.service.RepoService; import com.cadrlife.devsearch.agent.service.stash.Stash; import com.cadrlife.devsearch.agent.service.stash.StashRestClient; import com.cadrlife.devsearch.domain.Project; public class GitStashService extends RepoService { private static final Logger LOG = LoggerFactory.getLogger(GitStashService.class); private final String stashProjectKey; private final String username; private final String password; private final String apiBaseUrl; private final Stash stash; private final GitService gitService; private CleanService cleanService; public GitStashService(String stashProjectKey, String username, String password, String apiBaseUrl) { this.stashProjectKey = stashProjectKey; this.username = username; this.password = password; this.apiBaseUrl = apiBaseUrl; stash = new Stash(new StashRestClient(username, password), apiBaseUrl); gitService = new GitService(); cleanService = new CleanService(); } public List <Project> findAllProjects() { return stash.getRepositories(getRepoName(), stashProjectKey); } @Override public void updateProject(File projectFile, Project project) { Path projectPath = projectFile.toPath(); String projectName = project.getName(); if (gitService.gitRepoLooksValid(projectPath)) { LOG.info("Found .git for {}, trying pull", projectName); try { Git gitHandle = gitService.pull(projectFile); project.setLastChangedDate(gitService.findLastChangedDate(gitHandle, projectFile)); return; } catch (Exception e) { LOG.warn("Problem pulling {}, trying fresh clone instead", projectName, e); } } LOG.info("Performing fresh clone of {}", projectName); cleanService.clean(projectPath); // String repoUrl = stash.createCloneUri(project., project.getSlug()); Git gitHandle = gitService.clone(projectFile, project.getCloneUrl(), "master"); project.setLastChangedDate(gitService.findLastChangedDate(gitHandle, projectFile)); } private void foo() { } public List<Project> findProjectsByName(String projectName) { return stash.getRepositoriesByName(getRepoName(), stashProjectKey, projectName); } @Override public String getSourceType() { return "stash"; } public String getStashProjectKey() { return stashProjectKey; } public String getUsername() { return username; } public String getPassword() { return password; } public String getApiBaseUrl() { return apiBaseUrl; } @Override public void pushRepo(Project project) { Path projectPath = project.getCheckoutPath(); if (!gitService.gitRepoLooksValid(projectPath)) { throw new RuntimeException("No .git found for project in " + projectPath); } gitService.commit(projectPath.toFile(), project.getFileUpdates()); gitService.push(projectPath.toFile()); } }