mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-03 20: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.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import sonia.scm.repository.InternalRepositoryException;
|
import sonia.scm.repository.InternalRepositoryException;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
import sonia.scm.util.IOUtil;
|
import sonia.scm.util.IOUtil;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class CachingAllWorkingCopyPool implements WorkingCopyPool {
|
public class CachingAllWorkingCopyPool implements WorkingCopyPool {
|
||||||
|
|
||||||
@@ -51,7 +50,7 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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();
|
String id = workingCopyContext.getScmRepository().getId();
|
||||||
File existingWorkdir = workdirs.remove(id);
|
File existingWorkdir = workdirs.remove(id);
|
||||||
if (existingWorkdir != null) {
|
if (existingWorkdir != null) {
|
||||||
@@ -66,13 +65,13 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return createNewWorkdir(workingCopyContext);
|
return createNewWorkingCopy(workingCopyContext);
|
||||||
} catch (WorkingCopyFailedException e) {
|
} catch (WorkingCopyFailedException e) {
|
||||||
throw new InternalRepositoryException(workingCopyContext.getScmRepository(), "failed to create working copy", 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();
|
Stopwatch stopwatch = Stopwatch.createStarted();
|
||||||
File newWorkdir = workdirProvider.createNewWorkdir();
|
File newWorkdir = workdirProvider.createNewWorkdir();
|
||||||
SimpleWorkingCopyFactory.WorkingCopyInitializer<R, W> initializer = workingCopyContext.getInitializer();
|
SimpleWorkingCopyFactory.WorkingCopyInitializer<R, W> initializer = workingCopyContext.getInitializer();
|
||||||
@@ -96,9 +95,9 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool {
|
|||||||
workdirs.clear();
|
workdirs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deleteWorkdir(File existingWorkdir) {
|
private void deleteWorkdir(File workdir) {
|
||||||
if (existingWorkdir.exists()) {
|
if (workdir.exists()) {
|
||||||
IOUtil.deleteSilently(existingWorkdir);
|
IOUtil.deleteSilently(workdir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,12 +24,11 @@
|
|||||||
|
|
||||||
package sonia.scm.repository.work;
|
package sonia.scm.repository.work;
|
||||||
|
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
import sonia.scm.util.IOUtil;
|
import sonia.scm.util.IOUtil;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public class NoneCachingWorkingCopyPool implements WorkingCopyPool {
|
public class NoneCachingWorkingCopyPool implements WorkingCopyPool {
|
||||||
|
|
||||||
@@ -41,7 +40,7 @@ public class NoneCachingWorkingCopyPool implements WorkingCopyPool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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());
|
return context.getInitializer().initialize(workdirProvider.createNewWorkdir(), context.getRequestedBranch());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,12 +27,11 @@ package sonia.scm.repository.work;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import sonia.scm.repository.InternalRepositoryException;
|
import sonia.scm.repository.InternalRepositoryException;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
|
|
||||||
import javax.servlet.ServletContextEvent;
|
import javax.servlet.ServletContextEvent;
|
||||||
import javax.servlet.ServletContextListener;
|
import javax.servlet.ServletContextListener;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is responsible to govern the creation, the reuse and the destruction
|
* This class is responsible to govern the creation, the reuse and the destruction
|
||||||
@@ -180,7 +179,7 @@ SimpleGitWorkingCopyFactory->SimpleGitWorkingCopyFactory:closeRepository
|
|||||||
SimpleGitWorkingCopyFactory->WorkingCopyPool:contextClosed
|
SimpleGitWorkingCopyFactory->WorkingCopyPool:contextClosed
|
||||||
@enduml
|
@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);
|
private static final Logger LOG = LoggerFactory.getLogger(SimpleWorkingCopyFactory.class);
|
||||||
|
|
||||||
|
|||||||
@@ -25,10 +25,9 @@
|
|||||||
package sonia.scm.repository.work;
|
package sonia.scm.repository.work;
|
||||||
|
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
|
|
||||||
import java.util.function.Supplier;
|
public class WorkingCopyContext<R, W, C extends RepositoryProvider> {
|
||||||
|
|
||||||
public class WorkingCopyContext<R, W, C extends Supplier<Repository>> {
|
|
||||||
private final String requestedBranch;
|
private final String requestedBranch;
|
||||||
private final C context;
|
private final C context;
|
||||||
private final SimpleWorkingCopyFactory.WorkingCopyInitializer<R, W> initializer;
|
private final SimpleWorkingCopyFactory.WorkingCopyInitializer<R, W> initializer;
|
||||||
|
|||||||
@@ -24,13 +24,12 @@
|
|||||||
|
|
||||||
package sonia.scm.repository.work;
|
package sonia.scm.repository.work;
|
||||||
|
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
public interface WorkingCopyPool {
|
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);
|
void contextClosed(WorkingCopyContext<?, ?, ?> workingCopyContext, File workdir);
|
||||||
|
|
||||||
|
|||||||
@@ -32,14 +32,13 @@ import org.mockito.InjectMocks;
|
|||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.isNull;
|
|
||||||
import static org.mockito.Mockito.lenient;
|
import static org.mockito.Mockito.lenient;
|
||||||
import static org.mockito.Mockito.never;
|
import static org.mockito.Mockito.never;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
@@ -56,7 +55,7 @@ class CachingAllWorkingCopyPoolTest {
|
|||||||
CachingAllWorkingCopyPool cachingAllWorkingCopyPool;
|
CachingAllWorkingCopyPool cachingAllWorkingCopyPool;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
WorkingCopyContext<Object, Path, Supplier<Repository>> workingCopyContext;
|
WorkingCopyContext<Object, Path, RepositoryProvider> workingCopyContext;
|
||||||
@Mock
|
@Mock
|
||||||
SimpleWorkingCopyFactory.WorkingCopyInitializer<Object, Path> initializer;
|
SimpleWorkingCopyFactory.WorkingCopyInitializer<Object, Path> initializer;
|
||||||
@Mock
|
@Mock
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ import org.junit.Rule;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.rules.TemporaryFolder;
|
import org.junit.rules.TemporaryFolder;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
import sonia.scm.util.IOUtil;
|
import sonia.scm.util.IOUtil;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
@@ -61,7 +61,7 @@ public class SimpleWorkingCopyFactoryTest {
|
|||||||
WorkdirProvider workdirProvider = new WorkdirProvider(temporaryFolder.newFolder());
|
WorkdirProvider workdirProvider = new WorkdirProvider(temporaryFolder.newFolder());
|
||||||
WorkingCopyPool configurableTestWorkingCopyPool = new WorkingCopyPool() {
|
WorkingCopyPool configurableTestWorkingCopyPool = new WorkingCopyPool() {
|
||||||
@Override
|
@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();
|
workdir = workdirProvider.createNewWorkdir();
|
||||||
return context.getInitializer().initialize(workdir, context.getRequestedBranch());
|
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
|
@Override
|
||||||
public Repository get() {
|
public Repository get() {
|
||||||
return REPOSITORY;
|
return REPOSITORY;
|
||||||
|
|||||||
@@ -24,28 +24,23 @@
|
|||||||
|
|
||||||
package sonia.scm.repository.spi;
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider;
|
||||||
import sonia.scm.repository.GitRepositoryConfig;
|
import sonia.scm.repository.GitRepositoryConfig;
|
||||||
import sonia.scm.repository.GitUtil;
|
import sonia.scm.repository.GitUtil;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Sebastian Sdorra
|
* @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 --------------------------------------------------------
|
//~--- non-JDK imports --------------------------------------------------------
|
||||||
|
|
||||||
import com.aragost.javahg.Repository;
|
import com.aragost.javahg.Repository;
|
||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
|
|
||||||
import sonia.scm.repository.HgConfig;
|
import sonia.scm.repository.HgConfig;
|
||||||
import sonia.scm.repository.HgHookManager;
|
import sonia.scm.repository.HgHookManager;
|
||||||
import sonia.scm.repository.HgRepositoryHandler;
|
import sonia.scm.repository.HgRepositoryHandler;
|
||||||
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
import sonia.scm.web.HgUtil;
|
import sonia.scm.web.HgUtil;
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.function.BiConsumer;
|
import java.util.function.BiConsumer;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
//~--- JDK imports ------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Sebastian Sdorra
|
* @author Sebastian Sdorra
|
||||||
*/
|
*/
|
||||||
public class HgCommandContext implements Closeable, Supplier<sonia.scm.repository.Repository>
|
public class HgCommandContext implements Closeable, RepositoryProvider
|
||||||
{
|
{
|
||||||
|
|
||||||
/** Field description */
|
/** Field description */
|
||||||
|
|||||||
@@ -32,16 +32,15 @@ import com.aragost.javahg.commands.PullCommand;
|
|||||||
import com.aragost.javahg.commands.StatusCommand;
|
import com.aragost.javahg.commands.StatusCommand;
|
||||||
import com.aragost.javahg.commands.UpdateCommand;
|
import com.aragost.javahg.commands.UpdateCommand;
|
||||||
import com.aragost.javahg.commands.flags.CloneCommandFlags;
|
import com.aragost.javahg.commands.flags.CloneCommandFlags;
|
||||||
|
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
|
||||||
import sonia.scm.repository.work.WorkingCopyFailedException;
|
import sonia.scm.repository.work.WorkingCopyFailedException;
|
||||||
import sonia.scm.repository.work.WorkingCopyPool;
|
import sonia.scm.repository.work.WorkingCopyPool;
|
||||||
import sonia.scm.repository.work.SimpleWorkingCopyFactory;
|
|
||||||
import sonia.scm.repository.work.WorkingCopyPool.ParentAndClone;
|
import sonia.scm.repository.work.WorkingCopyPool.ParentAndClone;
|
||||||
import sonia.scm.util.IOUtil;
|
import sonia.scm.util.IOUtil;
|
||||||
import sonia.scm.web.HgRepositoryEnvironmentBuilder;
|
import sonia.scm.web.HgRepositoryEnvironmentBuilder;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.inject.Provider;
|
import javax.inject.Provider;
|
||||||
import javax.xml.stream.events.StartDocument;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|||||||
@@ -24,30 +24,24 @@
|
|||||||
|
|
||||||
package sonia.scm.repository.spi;
|
package sonia.scm.repository.spi;
|
||||||
|
|
||||||
//~--- non-JDK imports --------------------------------------------------------
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import org.tmatesoft.svn.core.SVNException;
|
import org.tmatesoft.svn.core.SVNException;
|
||||||
import org.tmatesoft.svn.core.SVNURL;
|
import org.tmatesoft.svn.core.SVNURL;
|
||||||
import org.tmatesoft.svn.core.io.SVNRepository;
|
import org.tmatesoft.svn.core.io.SVNRepository;
|
||||||
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
|
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
|
||||||
|
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
|
import sonia.scm.repository.RepositoryProvider;
|
||||||
import sonia.scm.repository.SvnUtil;
|
import sonia.scm.repository.SvnUtil;
|
||||||
|
|
||||||
//~--- JDK imports ------------------------------------------------------------
|
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.function.Supplier;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Sebastian Sdorra
|
* @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);
|
private static final Logger LOG = LoggerFactory.getLogger(SvnContext.class);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user