package io.reflectoring.coderadar.vcs.adapter; import io.reflectoring.coderadar.vcs.UnableToCloneRepositoryException; import io.reflectoring.coderadar.vcs.port.driven.CloneRepositoryPort; import io.reflectoring.coderadar.vcs.port.driver.clone.CloneRepositoryCommand; import java.io.File; import org.eclipse.jgit.api.CloneCommand; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.transport.UsernamePasswordCredentialsProvider; import org.springframework.stereotype.Service; @Service public class CloneRepositoryAdapter implements CloneRepositoryPort { @Override public void cloneRepository(CloneRepositoryCommand cloneRepositoryCommand) throws UnableToCloneRepositoryException { try { // TODO: support progress monitoring CloneCommand cloneCommand = Git.cloneRepository() .setURI(cloneRepositoryCommand.getRemoteUrl()) .setDirectory(new File(cloneRepositoryCommand.getLocalDir())) .setBare(true); if (cloneRepositoryCommand.getUsername() != null && cloneRepositoryCommand.getPassword() != null) { cloneCommand.setCredentialsProvider( new UsernamePasswordCredentialsProvider( cloneRepositoryCommand.getUsername(), cloneRepositoryCommand.getPassword())); } cloneCommand.call().close(); } catch (GitAPIException e) { throw new UnableToCloneRepositoryException(e.getMessage()); } } }