Use existing RepositoryProvider

This commit is contained in:
René Pfeuffer
2020-05-14 21:27:35 +02:00
parent 28824c37d3
commit 3c808bf171
11 changed files with 29 additions and 49 deletions

View File

@@ -28,14 +28,13 @@ import com.google.common.base.Stopwatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.util.IOUtil;
import javax.inject.Inject;
import java.io.File;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Supplier;
public class CachingAllWorkingCopyPool implements WorkingCopyPool {
@@ -51,7 +50,7 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool {
}
@Override
public <R, W, C extends Supplier<Repository>> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> workingCopyContext) {
public <R, W, C extends RepositoryProvider> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> workingCopyContext) {
String id = workingCopyContext.getScmRepository().getId();
File existingWorkdir = workdirs.remove(id);
if (existingWorkdir != null) {
@@ -66,13 +65,13 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool {
}
}
try {
return createNewWorkdir(workingCopyContext);
return createNewWorkingCopy(workingCopyContext);
} catch (WorkingCopyFailedException e) {
throw new InternalRepositoryException(workingCopyContext.getScmRepository(), "failed to create working copy", e);
}
}
private <R, W> ParentAndClone<R, W> createNewWorkdir(WorkingCopyContext<R, W, ?> workingCopyContext) throws WorkingCopyFailedException {
private <R, W> ParentAndClone<R, W> createNewWorkingCopy(WorkingCopyContext<R, W, ?> workingCopyContext) throws WorkingCopyFailedException {
Stopwatch stopwatch = Stopwatch.createStarted();
File newWorkdir = workdirProvider.createNewWorkdir();
SimpleWorkingCopyFactory.WorkingCopyInitializer<R, W> initializer = workingCopyContext.getInitializer();
@@ -96,9 +95,9 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool {
workdirs.clear();
}
private void deleteWorkdir(File existingWorkdir) {
if (existingWorkdir.exists()) {
IOUtil.deleteSilently(existingWorkdir);
private void deleteWorkdir(File workdir) {
if (workdir.exists()) {
IOUtil.deleteSilently(workdir);
}
}
}

View File

@@ -24,12 +24,11 @@
package sonia.scm.repository.work;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.util.IOUtil;
import javax.inject.Inject;
import java.io.File;
import java.util.function.Supplier;
public class NoneCachingWorkingCopyPool implements WorkingCopyPool {
@@ -41,7 +40,7 @@ public class NoneCachingWorkingCopyPool implements WorkingCopyPool {
}
@Override
public <R, W, C extends Supplier<Repository>> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> context) throws WorkingCopyFailedException {
public <R, W, C extends RepositoryProvider> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> context) throws WorkingCopyFailedException {
return context.getInitializer().initialize(workdirProvider.createNewWorkdir(), context.getRequestedBranch());
}

View File

@@ -27,12 +27,11 @@ package sonia.scm.repository.work;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.File;
import java.util.function.Supplier;
/**
* This class is responsible to govern the creation, the reuse and the destruction
@@ -180,7 +179,7 @@ SimpleGitWorkingCopyFactory->SimpleGitWorkingCopyFactory:closeRepository
SimpleGitWorkingCopyFactory->WorkingCopyPool:contextClosed
@enduml
*/
public abstract class SimpleWorkingCopyFactory<R, W, C extends Supplier<Repository>> implements WorkingCopyFactory<R, W, C>, ServletContextListener {
public abstract class SimpleWorkingCopyFactory<R, W, C extends RepositoryProvider> implements WorkingCopyFactory<R, W, C>, ServletContextListener {
private static final Logger LOG = LoggerFactory.getLogger(SimpleWorkingCopyFactory.class);

View File

@@ -25,10 +25,9 @@
package sonia.scm.repository.work;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import java.util.function.Supplier;
public class WorkingCopyContext<R, W, C extends Supplier<Repository>> {
public class WorkingCopyContext<R, W, C extends RepositoryProvider> {
private final String requestedBranch;
private final C context;
private final SimpleWorkingCopyFactory.WorkingCopyInitializer<R, W> initializer;

View File

@@ -24,13 +24,12 @@
package sonia.scm.repository.work;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import java.io.File;
import java.util.function.Supplier;
public interface WorkingCopyPool {
<R, W, C extends Supplier<Repository>> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> context) throws WorkingCopyFailedException;
<R, W, C extends RepositoryProvider> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> context) throws WorkingCopyFailedException;
void contextClosed(WorkingCopyContext<?, ?, ?> workingCopyContext, File workdir);

View File

@@ -32,14 +32,13 @@ import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import java.io.File;
import java.nio.file.Path;
import java.util.function.Supplier;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@@ -56,7 +55,7 @@ class CachingAllWorkingCopyPoolTest {
CachingAllWorkingCopyPool cachingAllWorkingCopyPool;
@Mock
WorkingCopyContext<Object, Path, Supplier<Repository>> workingCopyContext;
WorkingCopyContext<Object, Path, RepositoryProvider> workingCopyContext;
@Mock
SimpleWorkingCopyFactory.WorkingCopyInitializer<Object, Path> initializer;
@Mock

View File

@@ -29,12 +29,12 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.util.IOUtil;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.util.function.Supplier;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -61,7 +61,7 @@ public class SimpleWorkingCopyFactoryTest {
WorkdirProvider workdirProvider = new WorkdirProvider(temporaryFolder.newFolder());
WorkingCopyPool configurableTestWorkingCopyPool = new WorkingCopyPool() {
@Override
public <R, W, C extends Supplier<Repository>> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> context) throws WorkingCopyFailedException {
public <R, W, C extends RepositoryProvider> ParentAndClone<R, W> getWorkingCopy(WorkingCopyContext<R, W, C> context) throws WorkingCopyFailedException {
workdir = workdirProvider.createNewWorkdir();
return context.getInitializer().initialize(workdir, context.getRequestedBranch());
}
@@ -154,7 +154,7 @@ public class SimpleWorkingCopyFactoryTest {
}
}
private static class Context implements Supplier<Repository> {
private static class Context implements RepositoryProvider {
@Override
public Repository get() {
return REPOSITORY;

View File

@@ -24,28 +24,23 @@
package sonia.scm.repository.spi;
//~--- non-JDK imports --------------------------------------------------------
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
import sonia.scm.repository.GitRepositoryConfig;
import sonia.scm.repository.GitUtil;
import sonia.scm.repository.Repository;
//~--- JDK imports ------------------------------------------------------------
import sonia.scm.repository.RepositoryProvider;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.util.function.Supplier;
/**
*
* @author Sebastian Sdorra
*/
public class GitContext implements Closeable, Supplier<Repository>
public class GitContext implements Closeable, RepositoryProvider
{
/**

View File

@@ -27,28 +27,26 @@ package sonia.scm.repository.spi;
//~--- non-JDK imports --------------------------------------------------------
import com.aragost.javahg.Repository;
import com.google.common.base.Strings;
import sonia.scm.repository.HgConfig;
import sonia.scm.repository.HgHookManager;
import sonia.scm.repository.HgRepositoryHandler;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.web.HgUtil;
//~--- JDK imports ------------------------------------------------------------
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.function.Supplier;
//~--- JDK imports ------------------------------------------------------------
/**
*
* @author Sebastian Sdorra
*/
public class HgCommandContext implements Closeable, Supplier<sonia.scm.repository.Repository>
public class HgCommandContext implements Closeable, RepositoryProvider
{
/** Field description */

View File

@@ -32,16 +32,15 @@ import com.aragost.javahg.commands.PullCommand;
import com.aragost.javahg.commands.StatusCommand;
import com.aragost.javahg.commands.UpdateCommand;
import com.aragost.javahg.commands.flags.CloneCommandFlags;
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
import sonia.scm.repository.work.WorkingCopyFailedException;
import sonia.scm.repository.work.WorkingCopyPool;
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
import sonia.scm.repository.work.WorkingCopyPool.ParentAndClone;
import sonia.scm.util.IOUtil;
import sonia.scm.web.HgRepositoryEnvironmentBuilder;
import javax.inject.Inject;
import javax.inject.Provider;
import javax.xml.stream.events.StartDocument;
import java.io.File;
import java.io.IOException;
import java.util.Map;

View File

@@ -24,30 +24,24 @@
package sonia.scm.repository.spi;
//~--- non-JDK imports --------------------------------------------------------
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.SVNURL;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryProvider;
import sonia.scm.repository.SvnUtil;
//~--- JDK imports ------------------------------------------------------------
import java.io.Closeable;
import java.io.File;
import java.util.function.Supplier;
/**
*
* @author Sebastian Sdorra
*/
public class SvnContext implements Closeable, Supplier<Repository> {
public class SvnContext implements Closeable, RepositoryProvider {
private static final Logger LOG = LoggerFactory.getLogger(SvnContext.class);