This commit is contained in:
René Pfeuffer
2020-05-08 18:11:27 +02:00
parent 1163ce9002
commit e968aa17ef
11 changed files with 131 additions and 77 deletions

View File

@@ -38,6 +38,7 @@ import sonia.scm.repository.GitWorkingCopyFactory;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.util.WorkingCopyPool;
import sonia.scm.repository.util.SimpleWorkingCopyFactory;
import sonia.scm.repository.util.WorkingCopyPool.ParentAndClone;
import sonia.scm.util.SystemUtil;
import javax.inject.Inject;
@@ -85,10 +86,10 @@ public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory<Reposi
}
@Override
protected ParentAndClone<Repository, Repository> reclaimRepository(GitContext context, File target, String initialBranch) throws IOException, ReclaimFailedException {
protected ParentAndClone<Repository, Repository> reclaimRepository(GitContext context, File target, String initialBranch) throws ReclaimFailedException {
LOG.trace("reclaim repository {}", context.getRepository().getId());
long start = System.nanoTime();
Repository repo = GitUtil.open(target);
Repository repo = openTarget(target);
try (Git git = Git.open(target)) {
git.reset().setMode(ResetCommand.ResetType.HARD).call();
git.clean().setForce(true).setCleanDirectories(true).call();
@@ -97,7 +98,7 @@ public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory<Reposi
git.branchDelete().setBranchNames(initialBranch).setForce(true).call();
git.checkout().setName(initialBranch).setCreateBranch(true).call();
return new ParentAndClone<>(null, repo, target);
} catch (GitAPIException e) {
} catch (GitAPIException | IOException e) {
throw new ReclaimFailedException(e);
} finally {
long end = System.nanoTime();
@@ -106,6 +107,14 @@ public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory<Reposi
}
}
private Repository openTarget(File target) throws ReclaimFailedException {
try {
return GitUtil.open(target);
} catch (IOException e) {
throw new ReclaimFailedException(e);
}
}
String createScmTransportProtocolUri(File bareRepository) {
if (SystemUtil.isWindows()) {
return ScmTransportProtocol.NAME + ":///" + bareRepository.getAbsolutePath().replaceAll("\\\\", "/");