diff --git a/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java b/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java
index 7ed74c4e11..0b842ad78c 100644
--- a/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java
+++ b/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java
@@ -41,10 +41,10 @@ import java.io.File;
* implemented:
*
*
- * - {@link #getInitializer(C)}
+ * - {@link #initialize(C, File, String)}
* - Creates a new clone of the repository for the given context in the given
* directory with the given branch checked out (if branches are supported).
- * - {@link #getReclaimer(C)}
+ * - {@link #reclaim(C, File, String)}
* - Reclaim the working directory with a already checked out clone of the
* repository given in the context, so that the directory is not modified in
* respect to the repository and the given branch is checked out (if branches
@@ -215,19 +215,9 @@ public abstract class SimpleWorkingCopyFactory {
- ParentAndClone initialize(File target, String initialBranch);
- }
+ protected abstract ParentAndClone initialize(C context, File target, String initialBranch);
- @FunctionalInterface
- public interface WorkingCopyReclaimer {
- ParentAndClone reclaim(File target, String initialBranch) throws ReclaimFailedException;
- }
-
- protected abstract WorkingCopyInitializer getInitializer(C context);
-
- protected abstract WorkingCopyReclaimer getReclaimer(C context);
+ protected abstract ParentAndClone reclaim(C context, File target, String initialBranch) throws ReclaimFailedException;
@SuppressWarnings("squid:S00112")
// We do allow implementations to throw arbitrary exceptions here, so that we can handle them in closeCentral
@@ -289,11 +279,11 @@ public abstract class SimpleWorkingCopyFactory reclaim(File workdir) throws SimpleWorkingCopyFactory.ReclaimFailedException {
- return createWorkingCopyFromParentAndClone(getReclaimer(repositoryContext).reclaim(workdir, requestedBranch));
+ return createWorkingCopyFromParentAndClone(SimpleWorkingCopyFactory.this.reclaim(repositoryContext, workdir, requestedBranch));
}
public WorkingCopy initialize(File workdir) {
- return createWorkingCopyFromParentAndClone(getInitializer(repositoryContext).initialize(workdir, requestedBranch));
+ return createWorkingCopyFromParentAndClone(SimpleWorkingCopyFactory.this.initialize(repositoryContext, workdir, requestedBranch));
}
public WorkingCopy createWorkingCopyFromParentAndClone(ParentAndClone parentAndClone) {
diff --git a/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java b/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java
index 69a4225b22..1ab22972f9 100644
--- a/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java
+++ b/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java
@@ -84,23 +84,20 @@ public class SimpleWorkingCopyFactoryTest {
}
@Override
- protected WorkingCopyReclaimer<
- Closeable, Closeable> getReclaimer(Context context) {
- return (target, initialBranch) -> {throw new UnsupportedOperationException();};
+ protected ParentAndClone initialize(Context context, File target, String initialBranch) {
+ initialBranchForLastCloneCall = initialBranch;
+ return new ParentAndClone<>(parent, clone, target);
+ }
+
+ @Override
+ protected ParentAndClone reclaim(Context context, File target, String initialBranch) throws ReclaimFailedException {
+ throw new UnsupportedOperationException();
}
@Override
protected void closeWorkingCopy(Closeable workingCopy) throws Exception {
workingCopy.close();
}
-
- @Override
- protected WorkingCopyInitializer getInitializer(Context context) {
- return (target, initialBranch) -> {
- initialBranchForLastCloneCall = initialBranch;
- return new ParentAndClone<>(parent, clone, target);
- };
- }
};
}
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyInitializer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyInitializer.java
index e1cd889d07..d48a64cc25 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyInitializer.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyInitializer.java
@@ -32,7 +32,6 @@ import org.eclipse.jgit.lib.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.repository.InternalRepositoryException;
-import sonia.scm.repository.work.SimpleWorkingCopyFactory;
import sonia.scm.repository.work.SimpleWorkingCopyFactory.ParentAndClone;
import java.io.File;
@@ -41,7 +40,7 @@ import java.io.IOException;
import static sonia.scm.ContextEntry.ContextBuilder.entity;
import static sonia.scm.NotFoundException.notFound;
-class GitWorkingCopyInitializer implements SimpleWorkingCopyFactory.WorkingCopyInitializer {
+class GitWorkingCopyInitializer {
private static final Logger LOG = LoggerFactory.getLogger(GitWorkingCopyInitializer.class);
@@ -53,7 +52,6 @@ class GitWorkingCopyInitializer implements SimpleWorkingCopyFactory.WorkingCopyI
this.context = context;
}
- @Override
public ParentAndClone initialize(File target, String initialBranch) {
LOG.trace("clone repository {}", context.getRepository().getId());
long start = System.nanoTime();
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyReclaimer.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyReclaimer.java
index 2cd37432b6..c5ffd24aa7 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyReclaimer.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitWorkingCopyReclaimer.java
@@ -37,7 +37,7 @@ import sonia.scm.repository.work.SimpleWorkingCopyFactory.ParentAndClone;
import java.io.File;
import java.io.IOException;
-class GitWorkingCopyReclaimer implements SimpleWorkingCopyFactory.WorkingCopyReclaimer {
+class GitWorkingCopyReclaimer {
private static final Logger LOG = LoggerFactory.getLogger(GitWorkingCopyReclaimer.class);
@@ -47,7 +47,6 @@ class GitWorkingCopyReclaimer implements SimpleWorkingCopyFactory.WorkingCopyRec
this.context = context;
}
- @Override
public ParentAndClone reclaim(File target, String initialBranch) throws SimpleWorkingCopyFactory.ReclaimFailedException {
LOG.trace("reclaim repository {}", context.getRepository().getId());
long start = System.nanoTime();
diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java
index 2de4ff92c0..a4fa38111e 100644
--- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java
+++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java
@@ -26,18 +26,14 @@ package sonia.scm.repository.spi;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.transport.ScmTransportProtocol;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import sonia.scm.repository.GitWorkingCopyFactory;
-import sonia.scm.repository.work.WorkingCopyPool;
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
+import sonia.scm.repository.work.WorkingCopyPool;
import sonia.scm.util.SystemUtil;
import javax.inject.Inject;
import java.io.File;
-import static sonia.scm.ContextEntry.ContextBuilder.entity;
-
public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory implements GitWorkingCopyFactory {
@Inject
@@ -46,13 +42,13 @@ public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory getInitializer(GitContext context) {
- return new GitWorkingCopyInitializer(this, context);
+ public ParentAndClone initialize(GitContext context, File target, String initialBranch) {
+ return new GitWorkingCopyInitializer(this, context).initialize(target, initialBranch);
}
@Override
- protected WorkingCopyReclaimer getReclaimer(GitContext context) {
- return new GitWorkingCopyReclaimer(context);
+ public ParentAndClone reclaim(GitContext context, File target, String initialBranch) throws SimpleWorkingCopyFactory.ReclaimFailedException {
+ return new GitWorkingCopyReclaimer(context).reclaim(target, initialBranch);
}
String createScmTransportProtocolUri(File bareRepository) {
diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactoryTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactoryTest.java
index 93c1c1425b..9a32b5d01c 100644
--- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactoryTest.java
+++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactoryTest.java
@@ -142,7 +142,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
File workdir = createExistingClone(factory);
- factory.getReclaimer(createContext()).reclaim(workdir, "master");
+ factory.reclaim(createContext(), workdir, "master");
assertBranchCheckedOutAndClean(workdir, "master");
}
@@ -152,7 +152,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider));
File workdir = createExistingClone(factory);
- factory.getReclaimer(createContext()).reclaim(workdir, "test-branch");
+ factory.reclaim(createContext(), workdir, "test-branch");
assertBranchCheckedOutAndClean(workdir, "test-branch");
}
@@ -163,7 +163,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
File workdir = createExistingClone(factory);
Git.open(workdir).rm().addFilepattern("a.txt").call();
- factory.getReclaimer(createContext()).reclaim(workdir, "master");
+ factory.reclaim(createContext(), workdir, "master");
assertBranchCheckedOutAndClean(workdir, "master");
}
@@ -174,7 +174,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
File workdir = createExistingClone(factory);
Files.delete(workdir.toPath().resolve("a.txt"));
- factory.getReclaimer(createContext()).reclaim(workdir, "master");
+ factory.reclaim(createContext(), workdir, "master");
assertBranchCheckedOutAndClean(workdir, "master");
}
@@ -187,7 +187,7 @@ public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase
Files.createDirectories(newDirectory);
Files.createFile(newDirectory.resolve("newFile"));
- factory.getReclaimer(createContext()).reclaim(workdir, "master");
+ factory.reclaim(createContext(), workdir, "master");
assertBranchCheckedOutAndClean(workdir, "master");
}
diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java
index 7fdd107ae0..edd2e3aca1 100644
--- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java
+++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java
@@ -55,23 +55,36 @@ public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory getInitializer(HgCommandContext context) {
- return (target, initialBranch) -> {
- Repository centralRepository = openCentral(context);
- CloneCommand cloneCommand = CloneCommandFlags.on(centralRepository);
- if (initialBranch != null) {
- cloneCommand.updaterev(initialBranch);
- }
- try {
- cloneCommand.execute(target.getAbsolutePath());
- } catch (IOException e) {
- throw new InternalRepositoryException(context.getScmRepository(), "could not clone repository", e);
- }
+ public ParentAndClone initialize(HgCommandContext context, File target, String initialBranch) {
+ Repository centralRepository = openCentral(context);
+ CloneCommand cloneCommand = CloneCommandFlags.on(centralRepository);
+ if (initialBranch != null) {
+ cloneCommand.updaterev(initialBranch);
+ }
+ try {
+ cloneCommand.execute(target.getAbsolutePath());
+ } catch (IOException e) {
+ throw new InternalRepositoryException(context.getScmRepository(), "could not clone repository", e);
+ }
+ BaseRepository clone = Repository.open(target);
+
+ return new ParentAndClone<>(centralRepository, clone, target);
+ }
+
+ @Override
+ protected ParentAndClone reclaim(HgCommandContext context, File target, String initialBranch) throws ReclaimFailedException {
+ Repository centralRepository = openCentral(context);
+ try {
BaseRepository clone = Repository.open(target);
-
+ for (String unknown : StatusCommand.on(clone).execute().getUnknown()) {
+ delete(clone.getDirectory(), unknown);
+ }
+ UpdateCommand.on(clone).rev(initialBranch).clean().execute();
return new ParentAndClone<>(centralRepository, clone, target);
- };
+ } catch (ExecutionException | IOException e) {
+ throw new ReclaimFailedException(e);
+ }
}
public Repository openCentral(HgCommandContext context) {
@@ -80,23 +93,6 @@ public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory getReclaimer(HgCommandContext context) {
- return (target, initialBranch) -> {
- Repository centralRepository = openCentral(context);
- try {
- BaseRepository clone = Repository.open(target);
- for (String unknown : StatusCommand.on(clone).execute().getUnknown()) {
- delete(clone.getDirectory(), unknown);
- }
- UpdateCommand.on(clone).rev(initialBranch).clean().execute();
- return new ParentAndClone<>(centralRepository, clone, target);
- } catch (ExecutionException | IOException e) {
- throw new ReclaimFailedException(e);
- }
- };
- }
-
private void delete(File directory, String unknownFile) throws IOException {
IOUtil.delete(new File(directory, unknownFile));
}
diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java
index 6156ad6cf5..e3a1bda34c 100644
--- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java
+++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java
@@ -25,8 +25,8 @@
package sonia.scm.repository.spi;
import sonia.scm.repository.SvnWorkingCopyFactory;
-import sonia.scm.repository.work.WorkingCopyPool;
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
+import sonia.scm.repository.work.WorkingCopyPool;
import javax.inject.Inject;
import java.io.File;
@@ -39,13 +39,13 @@ public class SimpleSvnWorkingCopyFactory extends SimpleWorkingCopyFactory getInitializer(SvnContext context) {
- return new SvnWorkingCopyInitializer(context);
+ protected ParentAndClone initialize(SvnContext context, File workingCopy, String initialBranch) {
+ return new SvnWorkingCopyInitializer(context).initialize(workingCopy);
}
@Override
- protected WorkingCopyReclaimer getReclaimer(SvnContext context) {
- return new SvnWorkingCopyReclaimer(context);
+ protected ParentAndClone reclaim(SvnContext context, File target, String initialBranch) throws SimpleWorkingCopyFactory.ReclaimFailedException {
+ return new SvnWorkingCopyReclaimer(context).reclaim(target);
}
@Override
diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyInitializer.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyInitializer.java
index ed778f503f..140c7e10f3 100644
--- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyInitializer.java
+++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyInitializer.java
@@ -30,20 +30,18 @@ import org.tmatesoft.svn.core.wc2.SvnCheckout;
import org.tmatesoft.svn.core.wc2.SvnOperationFactory;
import org.tmatesoft.svn.core.wc2.SvnTarget;
import sonia.scm.repository.InternalRepositoryException;
-import sonia.scm.repository.work.SimpleWorkingCopyFactory;
import sonia.scm.repository.work.SimpleWorkingCopyFactory.ParentAndClone;
import java.io.File;
-class SvnWorkingCopyInitializer implements SimpleWorkingCopyFactory.WorkingCopyInitializer {
+class SvnWorkingCopyInitializer {
private final SvnContext context;
public SvnWorkingCopyInitializer(SvnContext context) {
this.context = context;
}
- @Override
- public ParentAndClone initialize(File workingCopy, String initialBranch) {
+ public ParentAndClone initialize(File workingCopy) {
final SvnOperationFactory svnOperationFactory = new SvnOperationFactory();
SVNURL source;
diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyReclaimer.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyReclaimer.java
index 2e60ce4c52..f72efa8e8d 100644
--- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyReclaimer.java
+++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnWorkingCopyReclaimer.java
@@ -34,15 +34,14 @@ import java.io.File;
import static org.tmatesoft.svn.core.SVNDepth.INFINITY;
-class SvnWorkingCopyReclaimer implements SimpleWorkingCopyFactory.WorkingCopyReclaimer {
+class SvnWorkingCopyReclaimer {
private final SvnContext context;
public SvnWorkingCopyReclaimer(SvnContext context) {
this.context = context;
}
- @Override
- public ParentAndClone reclaim(File target, String initialBranch) throws SimpleWorkingCopyFactory.ReclaimFailedException {
+ public ParentAndClone reclaim(File target) throws SimpleWorkingCopyFactory.ReclaimFailedException {
SVNClientManager clientManager = SVNClientManager.newInstance();
try {
clientManager.getWCClient().doRevert(new File[] {target}, INFINITY, null);