mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-01 19:15:52 +01:00
Use existing RepositoryProvider
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user