From 8bd17a03d7da9a635e0c980198f92455f08d149b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Sun, 3 May 2020 15:41:03 +0200 Subject: [PATCH] Use better names The name 'workdir' is now only used for a concrete directory, where a clone can be created in. The new name 'working copy' is used for a concrete instance of such a directory, where a clone has been created in for a repository stored in SCM-Manager. Such a working copy can be cached and reused for further changes. --- ...er.java => CachingAllWorkingCopyPool.java} | 30 ++++----- ...r.java => NoneCachingWorkingCopyPool.java} | 8 +-- ...ory.java => SimpleWorkingCopyFactory.java} | 62 ++++++++++--------- .../scm/repository/util/WorkdirProvider.java | 14 ++--- ...irContext.java => WorkingCopyContext.java} | 12 ++-- ...irFactory.java => WorkingCopyFactory.java} | 6 +- ...kdirProvider.java => WorkingCopyPool.java} | 6 +- ...ava => CachingAllWorkingCopyPoolTest.java} | 54 ++++++++-------- ...java => SimpleWorkingCopyFactoryTest.java} | 29 +++++---- .../scm/repository/GitRepositoryHandler.java | 12 ++-- ...actory.java => GitWorkingCopyFactory.java} | 6 +- .../repository/spi/AbstractGitCommand.java | 6 +- .../scm/repository/spi/GitMergeCommand.java | 16 ++--- .../scm/repository/spi/GitModifyCommand.java | 10 +-- .../spi/GitRepositoryServiceProvider.java | 4 +- ....java => SimpleGitWorkingCopyFactory.java} | 18 +++--- .../java/sonia/scm/web/GitServletModule.java | 10 +-- .../repository/GitRepositoryHandlerTest.java | 8 +-- .../repository/spi/GitMergeCommandTest.java | 10 +-- .../spi/GitMergeCommand_Conflict_Test.java | 4 +- .../repository/spi/GitModifyCommandTest.java | 4 +- .../spi/GitModifyCommand_LFSTest.java | 4 +- ...ModifyCommand_withEmptyRepositoryTest.java | 4 +- ...a => SimpleGitWorkingCopyFactoryTest.java} | 26 ++++---- .../scm/repository/HgRepositoryHandler.java | 12 ++-- .../scm/repository/spi/HgBranchCommand.java | 12 ++-- .../scm/repository/spi/HgModifyCommand.java | 12 ++-- .../spi/HgRepositoryServiceProvider.java | 4 +- ...Factory.java => HgWorkingCopyFactory.java} | 6 +- ...y.java => SimpleHgWorkingCopyFactory.java} | 13 ++-- .../java/sonia/scm/web/HgServletModule.java | 8 +-- .../repository/spi/HgBranchCommandTest.java | 18 +++--- .../repository/spi/HgModifyCommandTest.java | 6 +- ...actory.java => SvnWorkingCopyFactory.java} | 6 +- ....java => SimpleSvnWorkingCopyFactory.java} | 17 +++-- .../scm/repository/spi/SvnModifyCommand.java | 10 +-- .../spi/SvnRepositoryServiceProvider.java | 10 +-- .../spi/SvnRepositoryServiceResolver.java | 12 ++-- .../java/sonia/scm/web/SvnServletModule.java | 8 +-- ...a => SimpleSvnWorkingCopyFactoryTest.java} | 12 ++-- .../repository/spi/SvnModifyCommandTest.java | 14 ++--- .../modules/ApplicationModuleProvider.java | 2 +- ...Module.java => WorkingCopyPoolModule.java} | 18 +++--- 43 files changed, 280 insertions(+), 283 deletions(-) rename scm-core/src/main/java/sonia/scm/repository/util/{CachingAllWorkdirProvider.java => CachingAllWorkingCopyPool.java} (64%) rename scm-core/src/main/java/sonia/scm/repository/util/{NoneCachingWorkdirProvider.java => NoneCachingWorkingCopyPool.java} (80%) rename scm-core/src/main/java/sonia/scm/repository/util/{SimpleWorkdirFactory.java => SimpleWorkingCopyFactory.java} (64%) rename scm-core/src/main/java/sonia/scm/repository/util/{CreateWorkdirContext.java => WorkingCopyContext.java} (75%) rename scm-core/src/main/java/sonia/scm/repository/util/{WorkdirFactory.java => WorkingCopyFactory.java} (90%) rename scm-core/src/main/java/sonia/scm/repository/util/{CacheSupportingWorkdirProvider.java => WorkingCopyPool.java} (81%) rename scm-core/src/test/java/sonia/scm/repository/util/{CachingAllWorkdirProviderTest.java => CachingAllWorkingCopyPoolTest.java} (55%) rename scm-core/src/test/java/sonia/scm/repository/util/{SimpleWorkdirFactoryTest.java => SimpleWorkingCopyFactoryTest.java} (81%) rename scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/{GitWorkdirFactory.java => GitWorkingCopyFactory.java} (89%) rename scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/{SimpleGitWorkdirFactory.java => SimpleGitWorkingCopyFactory.java} (89%) rename scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/{SimpleGitWorkdirFactoryTest.java => SimpleGitWorkingCopyFactoryTest.java} (83%) rename scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/{HgWorkdirFactory.java => HgWorkingCopyFactory.java} (89%) rename scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/{SimpleHgWorkdirFactory.java => SimpleHgWorkingCopyFactory.java} (87%) rename scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/{SvnWorkDirFactory.java => SvnWorkingCopyFactory.java} (89%) rename scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/{SimpleSvnWorkDirFactory.java => SimpleSvnWorkingCopyFactory.java} (85%) rename scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/{SimpleSvnWorkDirFactoryTest.java => SimpleSvnWorkingCopyFactoryTest.java} (84%) rename scm-webapp/src/main/java/sonia/scm/lifecycle/modules/{WorkdirModule.java => WorkingCopyPoolModule.java} (63%) diff --git a/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkdirProvider.java b/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkingCopyPool.java similarity index 64% rename from scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkdirProvider.java rename to scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkingCopyPool.java index ded3272c91..76e3c0b9b0 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkdirProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkingCopyPool.java @@ -35,48 +35,48 @@ import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -public class CachingAllWorkdirProvider implements CacheSupportingWorkdirProvider { +public class CachingAllWorkingCopyPool implements WorkingCopyPool { - private static final Logger LOG = LoggerFactory.getLogger(CachingAllWorkdirProvider.class); + private static final Logger LOG = LoggerFactory.getLogger(CachingAllWorkingCopyPool.class); private final Map workdirs = new ConcurrentHashMap<>(); private final WorkdirProvider workdirProvider; @Inject - public CachingAllWorkdirProvider(WorkdirProvider workdirProvider) { + public CachingAllWorkingCopyPool(WorkdirProvider workdirProvider) { this.workdirProvider = workdirProvider; } @Override - public SimpleWorkdirFactory.ParentAndClone getWorkdir(CreateWorkdirContext createWorkdirContext) throws IOException { - String id = createWorkdirContext.getScmRepository().getId(); + public SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext workingCopyContext) throws IOException { + String id = workingCopyContext.getScmRepository().getId(); File existingWorkdir = workdirs.remove(id); if (existingWorkdir != null) { Stopwatch stopwatch = Stopwatch.createStarted(); try { - SimpleWorkdirFactory.ParentAndClone reclaimed = createWorkdirContext.getReclaimer().reclaim(existingWorkdir); - LOG.debug("reclaimed workdir for {} in path {} in {}", createWorkdirContext.getScmRepository().getNamespaceAndName(), existingWorkdir, stopwatch.stop()); + SimpleWorkingCopyFactory.ParentAndClone reclaimed = workingCopyContext.getReclaimer().reclaim(existingWorkdir); + LOG.debug("reclaimed workdir for {} in path {} in {}", workingCopyContext.getScmRepository().getNamespaceAndName(), existingWorkdir, stopwatch.stop()); return reclaimed; - } catch (SimpleWorkdirFactory.ReclaimFailedException e) { - LOG.debug("failed to relaim workdir for {} in path {} in {}", createWorkdirContext.getScmRepository().getNamespaceAndName(), existingWorkdir, stopwatch.stop(), e); + } catch (SimpleWorkingCopyFactory.ReclaimFailedException e) { + LOG.debug("failed to reclaim workdir for {} in path {} in {}", workingCopyContext.getScmRepository().getNamespaceAndName(), existingWorkdir, stopwatch.stop(), e); deleteWorkdir(existingWorkdir); } } - return createNewWorkdir(createWorkdirContext); + return createNewWorkdir(workingCopyContext); } - private SimpleWorkdirFactory.ParentAndClone createNewWorkdir(CreateWorkdirContext createWorkdirContext) throws IOException { + private SimpleWorkingCopyFactory.ParentAndClone createNewWorkdir(WorkingCopyContext workingCopyContext) throws IOException { Stopwatch stopwatch = Stopwatch.createStarted(); File newWorkdir = workdirProvider.createNewWorkdir(); - SimpleWorkdirFactory.ParentAndClone parentAndClone = createWorkdirContext.getInitializer().initialize(newWorkdir); - LOG.debug("initialized new workdir for {} in path {} in {}", createWorkdirContext.getScmRepository().getNamespaceAndName(), newWorkdir, stopwatch.stop()); + SimpleWorkingCopyFactory.ParentAndClone parentAndClone = workingCopyContext.getInitializer().initialize(newWorkdir); + LOG.debug("initialized new workdir for {} in path {} in {}", workingCopyContext.getScmRepository().getNamespaceAndName(), newWorkdir, stopwatch.stop()); return parentAndClone; } @Override - public void contextClosed(CreateWorkdirContext createWorkdirContext, File workdir) { - String id = createWorkdirContext.getScmRepository().getId(); + public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) { + String id = workingCopyContext.getScmRepository().getId(); File putResult = workdirs.putIfAbsent(id, workdir); if (putResult != null && putResult != workdir) { deleteWorkdir(workdir); diff --git a/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkdirProvider.java b/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkingCopyPool.java similarity index 80% rename from scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkdirProvider.java rename to scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkingCopyPool.java index 50feb3dbc8..a00ee5d3eb 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkdirProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkingCopyPool.java @@ -30,22 +30,22 @@ import javax.inject.Inject; import java.io.File; import java.io.IOException; -public class NoneCachingWorkdirProvider implements CacheSupportingWorkdirProvider { +public class NoneCachingWorkingCopyPool implements WorkingCopyPool { private final WorkdirProvider workdirProvider; @Inject - public NoneCachingWorkdirProvider(WorkdirProvider workdirProvider) { + public NoneCachingWorkingCopyPool(WorkdirProvider workdirProvider) { this.workdirProvider = workdirProvider; } @Override - public SimpleWorkdirFactory.ParentAndClone getWorkdir(CreateWorkdirContext context) throws IOException { + public SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext context) throws IOException { return context.getInitializer().initialize(workdirProvider.createNewWorkdir()); } @Override - public void contextClosed(CreateWorkdirContext createWorkdirContext, File workdir) throws IOException { + public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) throws IOException { IOUtil.delete(workdir, true); } diff --git a/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkdirFactory.java b/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkingCopyFactory.java similarity index 64% rename from scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkdirFactory.java rename to scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkingCopyFactory.java index 587a9306c6..963300d84a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkdirFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkingCopyFactory.java @@ -36,56 +36,60 @@ import java.io.File; import java.io.IOException; @Extension -public abstract class SimpleWorkdirFactory implements WorkdirFactory, ServletContextListener { +public abstract class SimpleWorkingCopyFactory implements WorkingCopyFactory, ServletContextListener { - private static final Logger LOG = LoggerFactory.getLogger(SimpleWorkdirFactory.class); + private static final Logger LOG = LoggerFactory.getLogger(SimpleWorkingCopyFactory.class); - private final CacheSupportingWorkdirProvider workdirProvider; + private final WorkingCopyPool workingCopyPool; - public SimpleWorkdirFactory(CacheSupportingWorkdirProvider workdirProvider) { - this.workdirProvider = workdirProvider; + public SimpleWorkingCopyFactory(WorkingCopyPool workingCopyPool) { + this.workingCopyPool = workingCopyPool; } @Override - public WorkingCopy createWorkingCopy(C context, String initialBranch) { + public WorkingCopy createWorkingCopy(C repositoryContext, String initialBranch) { try { - CreateWorkdirContext createWorkdirContext = new CreateWorkdirContext<>( - getScmRepository(context), - initialBranch, - context, - newFolder -> cloneRepository(context, newFolder, initialBranch), - cachedFolder -> reclaimRepository(context, cachedFolder, initialBranch) - ); - ParentAndClone parentAndClone = workdirProvider.getWorkdir(createWorkdirContext); - return new WorkingCopy<>(parentAndClone.getClone(), parentAndClone.getParent(), () -> this.close(createWorkdirContext, parentAndClone), parentAndClone.getDirectory()); + WorkingCopyContext workingCopyContext = createWorkingCopyContext(repositoryContext, initialBranch); + ParentAndClone parentAndClone = workingCopyPool.getWorkingCopy(workingCopyContext); + return new WorkingCopy<>(parentAndClone.getClone(), parentAndClone.getParent(), () -> this.close(workingCopyContext, parentAndClone), parentAndClone.getDirectory()); } catch (RuntimeException e) { throw e; } catch (Exception e) { - throw new InternalRepositoryException(getScmRepository(context), "could not clone repository in temporary directory", e); + throw new InternalRepositoryException(getScmRepository(repositoryContext), "could not clone repository in temporary directory", e); } } - private void close(CreateWorkdirContext createWorkdirContext, ParentAndClone parentAndClone) { + public WorkingCopyContext createWorkingCopyContext(C repositoryContext, String initialBranch) { + return new WorkingCopyContext<>( + getScmRepository(repositoryContext), + initialBranch, + repositoryContext, + newFolder -> cloneRepository(repositoryContext, newFolder, initialBranch), + cachedFolder -> reclaimRepository(repositoryContext, cachedFolder, initialBranch) + ); + } + + private void close(WorkingCopyContext workingCopyContext, ParentAndClone parentAndClone) { try { closeRepository(parentAndClone.getParent()); } catch (Exception e) { - LOG.warn("could not close central repository for {}", createWorkdirContext.getScmRepository(), e); + LOG.warn("could not close central repository for {}", workingCopyContext.getScmRepository(), e); } try { - closeWorkdir(parentAndClone.getClone()); + closeWorkingCopy(parentAndClone.getClone()); } catch (Exception e) { - LOG.warn("could not close clone for {} in directory {}", createWorkdirContext.getScmRepository(), parentAndClone.getDirectory(), e); + LOG.warn("could not close clone for {} in directory {}", workingCopyContext.getScmRepository(), parentAndClone.getDirectory(), e); } try { - workdirProvider.contextClosed(createWorkdirContext, parentAndClone.getDirectory()); + workingCopyPool.contextClosed(workingCopyContext, parentAndClone.getDirectory()); } catch (Exception e) { - LOG.warn("could not close context for {} with directory {}", createWorkdirContext.getScmRepository(), parentAndClone.getDirectory(), e); + LOG.warn("could not close context for {} with directory {}", workingCopyContext.getScmRepository(), parentAndClone.getDirectory(), e); } } @Override public void contextDestroyed(ServletContextEvent sce) { - workdirProvider.shutdown(); + workingCopyPool.shutdown(); } @Override @@ -94,12 +98,12 @@ public abstract class SimpleWorkdirFactory implements WorkdirFactory { + public interface WorkingCopyInitializer { ParentAndClone initialize(File target) throws IOException; } @FunctionalInterface - public interface WorkdirReclaimer { + public interface WorkingCopyReclaimer { ParentAndClone reclaim(File target) throws IOException, ReclaimFailedException; } @@ -109,8 +113,8 @@ public abstract class SimpleWorkdirFactory implements WorkdirFactory cloneRepository(C context, File target, String initialBranch) throws IOException; @@ -124,9 +128,9 @@ public abstract class SimpleWorkdirFactory implements WorkdirFactory { +public class WorkingCopyContext { private final Repository scmRepository; private final String requestedBranch; private final C context; - private final SimpleWorkdirFactory.WorkdirInitializer initializer; - private final SimpleWorkdirFactory.WorkdirReclaimer reclaimer; + private final SimpleWorkingCopyFactory.WorkingCopyInitializer initializer; + private final SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer; - public CreateWorkdirContext(Repository scmRepository, String requestedBranch, C context, SimpleWorkdirFactory.WorkdirInitializer initializer, SimpleWorkdirFactory.WorkdirReclaimer reclaimer) { + public WorkingCopyContext(Repository scmRepository, String requestedBranch, C context, SimpleWorkingCopyFactory.WorkingCopyInitializer initializer, SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer) { this.scmRepository = scmRepository; this.requestedBranch = requestedBranch; this.context = context; @@ -53,11 +53,11 @@ public class CreateWorkdirContext { return context; } - public SimpleWorkdirFactory.WorkdirInitializer getInitializer() { + public SimpleWorkingCopyFactory.WorkingCopyInitializer getInitializer() { return initializer; } - public SimpleWorkdirFactory.WorkdirReclaimer getReclaimer() { + public SimpleWorkingCopyFactory.WorkingCopyReclaimer getReclaimer() { return reclaimer; } } diff --git a/scm-core/src/main/java/sonia/scm/repository/util/WorkdirFactory.java b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyFactory.java similarity index 90% rename from scm-core/src/main/java/sonia/scm/repository/util/WorkdirFactory.java rename to scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyFactory.java index e3c72bc3ae..bc48edfceb 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/WorkdirFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyFactory.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.util; -public interface WorkdirFactory { - WorkingCopy createWorkingCopy(C context, String initialBranch); +public interface WorkingCopyFactory { + WorkingCopy createWorkingCopy(C repositoryContext, String initialBranch); } diff --git a/scm-core/src/main/java/sonia/scm/repository/util/CacheSupportingWorkdirProvider.java b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyPool.java similarity index 81% rename from scm-core/src/main/java/sonia/scm/repository/util/CacheSupportingWorkdirProvider.java rename to scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyPool.java index c169932711..92bc081bb4 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/CacheSupportingWorkdirProvider.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyPool.java @@ -26,10 +26,10 @@ package sonia.scm.repository.util; import java.io.File; -public interface CacheSupportingWorkdirProvider { - SimpleWorkdirFactory.ParentAndClone getWorkdir(CreateWorkdirContext context) throws Exception; +public interface WorkingCopyPool { + SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext context) throws Exception; - void contextClosed(CreateWorkdirContext createWorkdirContext, File workdir) throws Exception; + void contextClosed(WorkingCopyContext workingCopyContext, File workdir) throws Exception; void shutdown(); } diff --git a/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkdirProviderTest.java b/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkingCopyPoolTest.java similarity index 55% rename from scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkdirProviderTest.java rename to scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkingCopyPoolTest.java index 1fcdbea3d2..b5e011964c 100644 --- a/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkdirProviderTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkingCopyPoolTest.java @@ -24,11 +24,10 @@ package sonia.scm.repository.util; -import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.junitpioneer.jupiter.TempDirectory; +import org.junit.jupiter.api.io.TempDir; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; @@ -42,56 +41,55 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.never; -import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -@ExtendWith({MockitoExtension.class, TempDirectory.class}) -class CachingAllWorkdirProviderTest { +@ExtendWith({MockitoExtension.class}) +class CachingAllWorkingCopyPoolTest { private static final Repository REPOSITORY = new Repository("1", "git", "space", "X"); @Mock WorkdirProvider workdirProvider; @InjectMocks - CachingAllWorkdirProvider cachingAllWorkdirProvider; + CachingAllWorkingCopyPool cachingAllWorkingCopyPool; @Mock - CreateWorkdirContext createWorkdirContext; + WorkingCopyContext workingCopyContext; @Mock - SimpleWorkdirFactory.WorkdirInitializer initializer; + SimpleWorkingCopyFactory.WorkingCopyInitializer initializer; @Mock - SimpleWorkdirFactory.WorkdirReclaimer reclaimer; + SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer; @BeforeEach - void initContext() throws IOException, SimpleWorkdirFactory.ReclaimFailedException { - lenient().when(createWorkdirContext.getInitializer()).thenReturn(initializer); - lenient().when(createWorkdirContext.getReclaimer()).thenReturn(reclaimer); + void initContext() throws IOException, SimpleWorkingCopyFactory.ReclaimFailedException { + lenient().when(workingCopyContext.getInitializer()).thenReturn(initializer); + lenient().when(workingCopyContext.getReclaimer()).thenReturn(reclaimer); lenient().when(initializer.initialize(any())) - .thenAnswer(invocationOnMock -> new SimpleWorkdirFactory.ParentAndClone(null, null, invocationOnMock.getArgument(0, File.class))); + .thenAnswer(invocationOnMock -> new SimpleWorkingCopyFactory.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); lenient().when(reclaimer.reclaim(any())) - .thenAnswer(invocationOnMock -> new SimpleWorkdirFactory.ParentAndClone(null, null, invocationOnMock.getArgument(0, File.class))); + .thenAnswer(invocationOnMock -> new SimpleWorkingCopyFactory.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); } @Test - void shouldCreateNewWorkdirForTheFirstRequest(@TempDirectory.TempDir Path temp) throws IOException { - when(createWorkdirContext.getScmRepository()).thenReturn(REPOSITORY); + void shouldCreateNewWorkdirForTheFirstRequest(@TempDir Path temp) throws IOException { + when(workingCopyContext.getScmRepository()).thenReturn(REPOSITORY); when(workdirProvider.createNewWorkdir()).thenReturn(temp.toFile()); - SimpleWorkdirFactory.ParentAndClone workdir = cachingAllWorkdirProvider.getWorkdir(createWorkdirContext); + SimpleWorkingCopyFactory.ParentAndClone workdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); verify(initializer).initialize(temp.toFile()); } @Test - void shouldCreateWorkdirOnlyOnceForTheSameRepository(@TempDirectory.TempDir Path temp) throws IOException, SimpleWorkdirFactory.ReclaimFailedException { - when(createWorkdirContext.getScmRepository()).thenReturn(REPOSITORY); + void shouldCreateWorkdirOnlyOnceForTheSameRepository(@TempDir Path temp) throws IOException, SimpleWorkingCopyFactory.ReclaimFailedException { + when(workingCopyContext.getScmRepository()).thenReturn(REPOSITORY); when(workdirProvider.createNewWorkdir()).thenReturn(temp.toFile()); - SimpleWorkdirFactory.ParentAndClone firstWorkdir = cachingAllWorkdirProvider.getWorkdir(createWorkdirContext); - cachingAllWorkdirProvider.contextClosed(createWorkdirContext, firstWorkdir.getDirectory()); - SimpleWorkdirFactory.ParentAndClone secondWorkdir = cachingAllWorkdirProvider.getWorkdir(createWorkdirContext); + SimpleWorkingCopyFactory.ParentAndClone firstWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + cachingAllWorkingCopyPool.contextClosed(workingCopyContext, firstWorkdir.getDirectory()); + SimpleWorkingCopyFactory.ParentAndClone secondWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); verify(initializer).initialize(temp.toFile()); verify(reclaimer).reclaim(temp.toFile()); @@ -99,8 +97,8 @@ class CachingAllWorkdirProviderTest { } @Test - void shouldCacheOnlyOneWorkdirForRepository(@TempDirectory.TempDir Path temp) throws IOException, SimpleWorkdirFactory.ReclaimFailedException { - when(createWorkdirContext.getScmRepository()).thenReturn(REPOSITORY); + void shouldCacheOnlyOneWorkdirForRepository(@TempDir Path temp) throws IOException, SimpleWorkingCopyFactory.ReclaimFailedException { + when(workingCopyContext.getScmRepository()).thenReturn(REPOSITORY); File firstDirectory = temp.resolve("first").toFile(); firstDirectory.mkdirs(); File secondDirectory = temp.resolve("second").toFile(); @@ -109,10 +107,10 @@ class CachingAllWorkdirProviderTest { firstDirectory, secondDirectory); - SimpleWorkdirFactory.ParentAndClone firstWorkdir = cachingAllWorkdirProvider.getWorkdir(createWorkdirContext); - SimpleWorkdirFactory.ParentAndClone secondWorkdir = cachingAllWorkdirProvider.getWorkdir(createWorkdirContext); - cachingAllWorkdirProvider.contextClosed(createWorkdirContext, firstWorkdir.getDirectory()); - cachingAllWorkdirProvider.contextClosed(createWorkdirContext, secondWorkdir.getDirectory()); + SimpleWorkingCopyFactory.ParentAndClone firstWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + SimpleWorkingCopyFactory.ParentAndClone secondWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + cachingAllWorkingCopyPool.contextClosed(workingCopyContext, firstWorkdir.getDirectory()); + cachingAllWorkingCopyPool.contextClosed(workingCopyContext, secondWorkdir.getDirectory()); verify(reclaimer, never()).reclaim(any()); verify(initializer).initialize(firstDirectory); diff --git a/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkdirFactoryTest.java b/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkingCopyFactoryTest.java similarity index 81% rename from scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkdirFactoryTest.java rename to scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkingCopyFactoryTest.java index b8bf7a5366..87e80d65bd 100644 --- a/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkdirFactoryTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkingCopyFactoryTest.java @@ -32,7 +32,6 @@ import org.junit.rules.TemporaryFolder; import sonia.scm.repository.Repository; import sonia.scm.util.IOUtil; -import javax.servlet.ServletContextEvent; import java.io.Closeable; import java.io.File; import java.io.IOException; @@ -41,7 +40,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; -public class SimpleWorkdirFactoryTest { +public class SimpleWorkingCopyFactoryTest { private static final Repository REPOSITORY = new Repository("1", "git", "space", "X"); @@ -50,7 +49,7 @@ public class SimpleWorkdirFactoryTest { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); - private SimpleWorkdirFactory simpleWorkdirFactory; + private SimpleWorkingCopyFactory simpleWorkingCopyFactory; private String initialBranchForLastCloneCall; @@ -60,15 +59,15 @@ public class SimpleWorkdirFactoryTest { @Before public void initFactory() throws IOException { WorkdirProvider workdirProvider = new WorkdirProvider(temporaryFolder.newFolder()); - CacheSupportingWorkdirProvider configurableTestWorkdirProvider = new CacheSupportingWorkdirProvider() { + WorkingCopyPool configurableTestWorkingCopyPool = new WorkingCopyPool() { @Override - public SimpleWorkdirFactory.ParentAndClone getWorkdir(CreateWorkdirContext context) throws IOException { + public SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext context) throws IOException { workdir = workdirProvider.createNewWorkdir(); return context.getInitializer().initialize(workdir); } @Override - public void contextClosed(CreateWorkdirContext createWorkdirContext, File workdir) throws Exception { + public void contextClosed(WorkingCopyContext createWorkdirContext, File workdir) throws Exception { if (!workdirIsCached) { IOUtil.delete(workdir); } @@ -78,7 +77,7 @@ public class SimpleWorkdirFactoryTest { public void shutdown() { } }; - simpleWorkdirFactory = new SimpleWorkdirFactory(configurableTestWorkdirProvider) { + simpleWorkingCopyFactory = new SimpleWorkingCopyFactory(configurableTestWorkingCopyPool) { @Override protected Repository getScmRepository(Context context) { return REPOSITORY; @@ -95,8 +94,8 @@ public class SimpleWorkdirFactoryTest { } @Override - protected void closeWorkdirInternal(Closeable workdir) throws Exception { - workdir.close(); + protected void closeWorkingCopyInternal(Closeable workingCopy) throws Exception { + workingCopy.close(); } @Override @@ -110,7 +109,7 @@ public class SimpleWorkdirFactoryTest { @Test public void shouldCreateParentAndClone() { Context context = new Context(); - try (WorkingCopy workingCopy = simpleWorkdirFactory.createWorkingCopy(context, null)) { + try (WorkingCopy workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, null)) { assertThat(workingCopy.getCentralRepository()).isSameAs(parent); assertThat(workingCopy.getWorkingRepository()).isSameAs(clone); } @@ -119,7 +118,7 @@ public class SimpleWorkdirFactoryTest { @Test public void shouldCloseParent() throws IOException { Context context = new Context(); - try (WorkingCopy workingCopy = simpleWorkdirFactory.createWorkingCopy(context, null)) {} + try (WorkingCopy workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, null)) {} verify(parent).close(); } @@ -127,7 +126,7 @@ public class SimpleWorkdirFactoryTest { @Test public void shouldCloseClone() throws IOException { Context context = new Context(); - try (WorkingCopy workingCopy = simpleWorkdirFactory.createWorkingCopy(context, null)) {} + try (WorkingCopy workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, null)) {} verify(clone).close(); } @@ -135,7 +134,7 @@ public class SimpleWorkdirFactoryTest { @Test public void shouldDeleteWorkdirIfNotCached() { Context context = new Context(); - try (WorkingCopy workingCopy = simpleWorkdirFactory.createWorkingCopy(context, null)) {} + try (WorkingCopy workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, null)) {} assertThat(workdir).doesNotExist(); } @@ -144,7 +143,7 @@ public class SimpleWorkdirFactoryTest { public void shouldNotDeleteWorkdirIfCached() { Context context = new Context(); workdirIsCached = true; - try (WorkingCopy workingCopy = simpleWorkdirFactory.createWorkingCopy(context, null)) {} + try (WorkingCopy workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, null)) {} assertThat(workdir).exists(); } @@ -152,7 +151,7 @@ public class SimpleWorkdirFactoryTest { @Test public void shouldPropagateInitialBranch() { Context context = new Context(); - try (WorkingCopy workingCopy = simpleWorkdirFactory.createWorkingCopy(context, "some")) { + try (WorkingCopy workingCopy = simpleWorkingCopyFactory.createWorkingCopy(context, "some")) { assertThat(initialBranchForLastCloneCall).isEqualTo("some"); } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java index d977cb242f..2760f59794 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitRepositoryHandler.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- @@ -83,7 +83,7 @@ public class GitRepositoryHandler private final Scheduler scheduler; - private final GitWorkdirFactory workdirFactory; + private final GitWorkingCopyFactory workingCopyFactory; private Task task; @@ -93,12 +93,12 @@ public class GitRepositoryHandler public GitRepositoryHandler(ConfigurationStoreFactory storeFactory, Scheduler scheduler, RepositoryLocationResolver repositoryLocationResolver, - GitWorkdirFactory workdirFactory, + GitWorkingCopyFactory workingCopyFactory, PluginLoader pluginLoader) { super(storeFactory, repositoryLocationResolver, pluginLoader); this.scheduler = scheduler; - this.workdirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; } //~--- get methods ---------------------------------------------------------- @@ -169,8 +169,8 @@ public class GitRepositoryHandler return getStringFromResource(RESOURCE_VERSION, DEFAULT_VERSION_INFORMATION); } - public GitWorkdirFactory getWorkdirFactory() { - return workdirFactory; + public GitWorkingCopyFactory getWorkingCopyFactory() { + return workingCopyFactory; } public String getRepositoryId(StoredConfig gitConfig) { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkdirFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkingCopyFactory.java similarity index 89% rename from scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkdirFactory.java rename to scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkingCopyFactory.java index bb9f40132d..7585d2824f 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkdirFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/GitWorkingCopyFactory.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; import org.eclipse.jgit.lib.Repository; import sonia.scm.repository.spi.GitContext; -import sonia.scm.repository.util.WorkdirFactory; +import sonia.scm.repository.util.WorkingCopyFactory; -public interface GitWorkdirFactory extends WorkdirFactory { +public interface GitWorkingCopyFactory extends WorkingCopyFactory { } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java index 4f3e31f4d7..11e2040f57 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/AbstractGitCommand.java @@ -42,7 +42,7 @@ import org.eclipse.jgit.transport.RemoteRefUpdate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitUtil; -import sonia.scm.repository.GitWorkdirFactory; +import sonia.scm.repository.GitWorkingCopyFactory; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Person; import sonia.scm.repository.util.WorkingCopy; @@ -135,8 +135,8 @@ class AbstractGitCommand } } - > R inClone(Function workerSupplier, GitWorkdirFactory workdirFactory, String initialBranch) { - try (WorkingCopy workingCopy = workdirFactory.createWorkingCopy(context, initialBranch)) { + > R inClone(Function workerSupplier, GitWorkingCopyFactory workingCopyFactory, String initialBranch) { + try (WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(context, initialBranch)) { Repository repository = workingCopy.getWorkingRepository(); logger.debug("cloned repository to folder {}", repository.getWorkTree()); return workerSupplier.apply(new Git(repository)).run(); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java index 5f915535b1..9f362edeb6 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitMergeCommand.java @@ -36,7 +36,7 @@ import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.merge.ResolveMerger; import org.eclipse.jgit.treewalk.CanonicalTreeParser; import org.eclipse.jgit.treewalk.filter.PathFilter; -import sonia.scm.repository.GitWorkdirFactory; +import sonia.scm.repository.GitWorkingCopyFactory; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.api.MergeCommandResult; import sonia.scm.repository.api.MergeDryRunCommandResult; @@ -53,7 +53,7 @@ import static sonia.scm.NotFoundException.notFound; public class GitMergeCommand extends AbstractGitCommand implements MergeCommand { - private final GitWorkdirFactory workdirFactory; + private final GitWorkingCopyFactory workingCopyFactory; private static final Set STRATEGIES = ImmutableSet.of( MergeStrategy.MERGE_COMMIT, @@ -61,9 +61,9 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand MergeStrategy.SQUASH ); - GitMergeCommand(GitContext context, GitWorkdirFactory workdirFactory) { + GitMergeCommand(GitContext context, GitWorkingCopyFactory workingCopyFactory) { super(context); - this.workdirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; } @Override @@ -73,19 +73,19 @@ public class GitMergeCommand extends AbstractGitCommand implements MergeCommand @Override public MergeConflictResult computeConflicts(MergeCommandRequest request) { - return inClone(git -> new ConflictWorker(git, request), workdirFactory, request.getTargetBranch()); + return inClone(git -> new ConflictWorker(git, request), workingCopyFactory, request.getTargetBranch()); } private MergeCommandResult mergeWithStrategy(MergeCommandRequest request) { switch(request.getMergeStrategy()) { case SQUASH: - return inClone(clone -> new GitMergeWithSquash(clone, request, context, repository), workdirFactory, request.getTargetBranch()); + return inClone(clone -> new GitMergeWithSquash(clone, request, context, repository), workingCopyFactory, request.getTargetBranch()); case FAST_FORWARD_IF_POSSIBLE: - return inClone(clone -> new GitFastForwardIfPossible(clone, request, context, repository), workdirFactory, request.getTargetBranch()); + return inClone(clone -> new GitFastForwardIfPossible(clone, request, context, repository), workingCopyFactory, request.getTargetBranch()); case MERGE_COMMIT: - return inClone(clone -> new GitMergeCommit(clone, request, context, repository), workdirFactory, request.getTargetBranch()); + return inClone(clone -> new GitMergeCommit(clone, request, context, repository), workingCopyFactory, request.getTargetBranch()); default: throw new MergeStrategyNotSupportedException(repository, request.getMergeStrategy()); diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java index d808434c1d..9e0f5449d3 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitModifyCommand.java @@ -34,7 +34,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ConcurrentModificationException; import sonia.scm.NoChangesMadeException; -import sonia.scm.repository.GitWorkdirFactory; +import sonia.scm.repository.GitWorkingCopyFactory; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import sonia.scm.web.lfs.LfsBlobStoreFactory; @@ -50,18 +50,18 @@ public class GitModifyCommand extends AbstractGitCommand implements ModifyComman private static final Logger LOG = LoggerFactory.getLogger(GitModifyCommand.class); private static final Striped REGISTER_LOCKS = Striped.lock(5); - private final GitWorkdirFactory workdirFactory; + private final GitWorkingCopyFactory workingCopyFactory; private final LfsBlobStoreFactory lfsBlobStoreFactory; - GitModifyCommand(GitContext context, GitWorkdirFactory workdirFactory, LfsBlobStoreFactory lfsBlobStoreFactory) { + GitModifyCommand(GitContext context, GitWorkingCopyFactory workingCopyFactory, LfsBlobStoreFactory lfsBlobStoreFactory) { super(context); - this.workdirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; this.lfsBlobStoreFactory = lfsBlobStoreFactory; } @Override public String execute(ModifyCommandRequest request) { - return inClone(clone -> new ModifyWorker(clone, request), workdirFactory, request.getBranch()); + return inClone(clone -> new ModifyWorker(clone, request), workingCopyFactory, request.getBranch()); } private class ModifyWorker extends GitCloneWorker implements ModifyWorkerHelper { diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java index 4aa6ab3a08..862631c32c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitRepositoryServiceProvider.java @@ -264,12 +264,12 @@ public class GitRepositoryServiceProvider extends RepositoryServiceProvider @Override public MergeCommand getMergeCommand() { - return new GitMergeCommand(context, handler.getWorkdirFactory()); + return new GitMergeCommand(context, handler.getWorkingCopyFactory()); } @Override public ModifyCommand getModifyCommand() { - return new GitModifyCommand(context, handler.getWorkdirFactory(), lfsBlobStoreFactory); + return new GitModifyCommand(context, handler.getWorkingCopyFactory(), lfsBlobStoreFactory); } @Override diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkdirFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java similarity index 89% rename from scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkdirFactory.java rename to scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java index e75b8775cc..e752042d74 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkdirFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java @@ -34,10 +34,10 @@ import org.eclipse.jgit.transport.ScmTransportProtocol; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitUtil; -import sonia.scm.repository.GitWorkdirFactory; +import sonia.scm.repository.GitWorkingCopyFactory; import sonia.scm.repository.InternalRepositoryException; -import sonia.scm.repository.util.CacheSupportingWorkdirProvider; -import sonia.scm.repository.util.SimpleWorkdirFactory; +import sonia.scm.repository.util.WorkingCopyPool; +import sonia.scm.repository.util.SimpleWorkingCopyFactory; import sonia.scm.util.SystemUtil; import javax.inject.Inject; @@ -47,12 +47,12 @@ import java.io.IOException; import static sonia.scm.ContextEntry.ContextBuilder.entity; import static sonia.scm.NotFoundException.notFound; -public class SimpleGitWorkdirFactory extends SimpleWorkdirFactory implements GitWorkdirFactory { +public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory implements GitWorkingCopyFactory { - private static final Logger LOG = LoggerFactory.getLogger(SimpleGitWorkdirFactory.class); + private static final Logger LOG = LoggerFactory.getLogger(SimpleGitWorkingCopyFactory.class); @Inject - public SimpleGitWorkdirFactory(CacheSupportingWorkdirProvider workdirProvider) { + public SimpleGitWorkingCopyFactory(WorkingCopyPool workdirProvider) { super(workdirProvider); } @@ -124,9 +124,9 @@ public class SimpleGitWorkdirFactory extends SimpleWorkdirFactory interceptor) { - return new GitMergeCommand(createContext(), new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(new WorkdirProvider()))) { + return new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider()))) { @Override - > R inClone(Function workerSupplier, GitWorkdirFactory workdirFactory, String initialBranch) { + > R inClone(Function workerSupplier, GitWorkingCopyFactory workingCopyFactory, String initialBranch) { Function interceptedWorkerSupplier = git -> { interceptor.accept(git); return workerSupplier.apply(git); }; - return super.inClone(interceptedWorkerSupplier, workdirFactory, initialBranch); + return super.inClone(interceptedWorkerSupplier, workingCopyFactory, initialBranch); } }; } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java index fc0a457a29..1581e2ec08 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitMergeCommand_Conflict_Test.java @@ -27,7 +27,7 @@ package sonia.scm.repository.spi; import org.junit.Rule; import org.junit.Test; import sonia.scm.repository.spi.MergeConflictResult.SingleMergeConflict; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import java.io.IOException; @@ -92,7 +92,7 @@ public class GitMergeCommand_Conflict_Test extends AbstractGitCommandTestBase { } private MergeConflictResult computeMergeConflictResult(String branchToMerge, String targetBranch) { - GitMergeCommand gitMergeCommand = new GitMergeCommand(createContext(), new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(new WorkdirProvider()))); + GitMergeCommand gitMergeCommand = new GitMergeCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider()))); MergeCommandRequest mergeCommandRequest = new MergeCommandRequest(); mergeCommandRequest.setBranchToMerge(branchToMerge); mergeCommandRequest.setTargetBranch(targetBranch); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java index 2f53b25a71..23799071b4 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java @@ -42,7 +42,7 @@ import sonia.scm.BadRequestException; import sonia.scm.ConcurrentModificationException; import sonia.scm.NotFoundException; import sonia.scm.repository.Person; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.web.lfs.LfsBlobStoreFactory; @@ -324,7 +324,7 @@ public class GitModifyCommandTest extends AbstractGitCommandTestBase { } private GitModifyCommand createCommand() { - return new GitModifyCommand(createContext(), new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(new WorkdirProvider())), lfsBlobStoreFactory); + return new GitModifyCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())), lfsBlobStoreFactory); } @FunctionalInterface diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java index 293c251a23..df3f2689a0 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java @@ -35,7 +35,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import sonia.scm.repository.Person; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.store.Blob; import sonia.scm.store.BlobStore; @@ -131,7 +131,7 @@ public class GitModifyCommand_LFSTest extends AbstractGitCommandTestBase { } private GitModifyCommand createCommand() { - return new GitModifyCommand(createContext(), new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(new WorkdirProvider())), lfsBlobStoreFactory); + return new GitModifyCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())), lfsBlobStoreFactory); } @Override diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java index e339817d0d..bf6d255538 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java @@ -38,7 +38,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import sonia.scm.repository.Person; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.web.lfs.LfsBlobStoreFactory; @@ -102,7 +102,7 @@ public class GitModifyCommand_withEmptyRepositoryTest extends AbstractGitCommand } private GitModifyCommand createCommand() { - return new GitModifyCommand(createContext(), new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(new WorkdirProvider())), lfsBlobStoreFactory); + return new GitModifyCommand(createContext(), new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())), lfsBlobStoreFactory); } @FunctionalInterface diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkdirFactoryTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactoryTest.java similarity index 83% rename from scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkdirFactoryTest.java rename to scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactoryTest.java index b9e4e1fd75..868c96c023 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkdirFactoryTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactoryTest.java @@ -38,7 +38,7 @@ import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.PreProcessorUtil; import sonia.scm.repository.RepositoryManager; import sonia.scm.repository.api.HookContextFactory; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.repository.util.WorkingCopy; @@ -51,7 +51,7 @@ import static com.google.inject.util.Providers.of; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; -public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { +public class SimpleGitWorkingCopyFactoryTest extends AbstractGitCommandTestBase { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @@ -72,7 +72,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void emptyPoolShouldCreateNewWorkdir() { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File masterRepo = createRepositoryDirectory(); try (WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null)) { @@ -90,7 +90,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void shouldCheckoutInitialBranch() { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); try (WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), "test-branch")) { assertThat(new File(workingCopy.getWorkingRepository().getWorkTree(), "a.txt")) @@ -102,7 +102,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void shouldCheckoutDefaultBranch() { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); try (WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null)) { assertThat(new File(workingCopy.getWorkingRepository().getWorkTree(), "a.txt")) @@ -114,7 +114,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void cloneFromPoolShouldNotBeReused() { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File firstDirectory; try (WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null)) { @@ -128,7 +128,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void cloneFromPoolShouldBeDeletedOnClose() { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File directory; try (WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null)) { @@ -139,7 +139,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void shouldReclaimCleanDirectoryWithSameBranch() throws Exception { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File workdir = createExistingClone(factory); factory.reclaimRepository(createContext(), workdir, "master"); @@ -149,7 +149,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void shouldReclaimCleanDirectoryWithOtherBranch() throws Exception { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File workdir = createExistingClone(factory); factory.reclaimRepository(createContext(), workdir, "test-branch"); @@ -159,7 +159,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void shouldReclaimDirectoryWithDeletedFileInIndex() throws Exception { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File workdir = createExistingClone(factory); Git.open(workdir).rm().addFilepattern("a.txt").call(); @@ -170,7 +170,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void shouldReclaimDirectoryWithDeletedFileInDirectory() throws Exception { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File workdir = createExistingClone(factory); Files.delete(workdir.toPath().resolve("a.txt")); @@ -181,7 +181,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { @Test public void shouldReclaimDirectoryWithAdditionalFileInDirectory() throws Exception { - SimpleGitWorkdirFactory factory = new SimpleGitWorkdirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleGitWorkingCopyFactory factory = new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File workdir = createExistingClone(factory); Path newDirectory = workdir.toPath().resolve("new"); Files.createDirectories(newDirectory); @@ -192,7 +192,7 @@ public class SimpleGitWorkdirFactoryTest extends AbstractGitCommandTestBase { assertBranchCheckedOutAndClean(workdir, "master"); } - public File createExistingClone(SimpleGitWorkdirFactory factory) throws Exception { + public File createExistingClone(SimpleGitWorkingCopyFactory factory) throws Exception { File workdir = temporaryFolder.newFolder(); extract(workdir, "sonia/scm/repository/spi/scm-git-spi-test-workdir.zip"); Git.open(workdir).remoteSetUrl().setRemoteUri(new URIish(factory.createScmTransportProtocolUri(repositoryDirectory))).setRemoteName("origin").call(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java index 386483a43a..6c33607750 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java @@ -42,7 +42,7 @@ import sonia.scm.io.INISection; import sonia.scm.plugin.Extension; import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.spi.HgRepositoryServiceProvider; -import sonia.scm.repository.spi.HgWorkdirFactory; +import sonia.scm.repository.spi.HgWorkingCopyFactory; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.util.IOUtil; import sonia.scm.util.SystemUtil; @@ -78,7 +78,7 @@ public class HgRepositoryHandler private final Provider hgContextProvider; - private final HgWorkdirFactory workdirFactory; + private final HgWorkingCopyFactory workingCopyFactory; private final JAXBContext jaxbContext; @@ -86,10 +86,10 @@ public class HgRepositoryHandler public HgRepositoryHandler(ConfigurationStoreFactory storeFactory, Provider hgContextProvider, RepositoryLocationResolver repositoryLocationResolver, - PluginLoader pluginLoader, HgWorkdirFactory workdirFactory) { + PluginLoader pluginLoader, HgWorkingCopyFactory workingCopyFactory) { super(storeFactory, repositoryLocationResolver, pluginLoader); this.hgContextProvider = hgContextProvider; - this.workdirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; try { @@ -259,8 +259,8 @@ public class HgRepositoryHandler } } - public HgWorkdirFactory getWorkdirFactory() { - return workdirFactory; + public HgWorkingCopyFactory getWorkingCopyFactory() { + return workingCopyFactory; } public JAXBContext getJaxbContext() { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java index 408daedd81..704e68343c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchCommand.java @@ -45,16 +45,16 @@ public class HgBranchCommand extends AbstractCommand implements BranchCommand { private static final Logger LOG = LoggerFactory.getLogger(HgBranchCommand.class); - private final HgWorkdirFactory workdirFactory; + private final HgWorkingCopyFactory workingCopyFactory; - HgBranchCommand(HgCommandContext context, HgWorkdirFactory workdirFactory) { + HgBranchCommand(HgCommandContext context, HgWorkingCopyFactory workingCopyFactory) { super(context); - this.workdirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; } @Override public Branch branch(BranchRequest request) { - try (WorkingCopy workingCopy = workdirFactory.createWorkingCopy(getContext(), request.getParentBranch())) { + try (WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(getContext(), request.getParentBranch())) { com.aragost.javahg.Repository repository = workingCopy.getWorkingRepository(); Changeset emptyChangeset = createNewBranchWithEmptyCommit(request, repository); @@ -70,7 +70,7 @@ public class HgBranchCommand extends AbstractCommand implements BranchCommand { @Override public void deleteOrClose(String branchName) { - try (WorkingCopy workingCopy = workdirFactory.createWorkingCopy(getContext(), branchName)) { + try (WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(getContext(), branchName)) { User currentUser = SecurityUtils.getSubject().getPrincipals().oneByType(User.class); LOG.debug("Closing branch '{}' in repository {}", branchName, getRepository().getNamespaceAndName()); @@ -104,7 +104,7 @@ public class HgBranchCommand extends AbstractCommand implements BranchCommand { private void pullChangesIntoCentralRepository(WorkingCopy workingCopy, String branch) { try { PullCommand pullCommand = PullCommand.on(workingCopy.getCentralRepository()); - workdirFactory.configure(pullCommand); + workingCopyFactory.configure(pullCommand); pullCommand.execute(workingCopy.getDirectory().getAbsolutePath()); } catch (Exception e) { // TODO handle failed update diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java index 8e63c5b3c8..ea496fe74c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; import com.aragost.javahg.Changeset; @@ -43,17 +43,17 @@ import java.util.List; public class HgModifyCommand implements ModifyCommand { private HgCommandContext context; - private final HgWorkdirFactory workdirFactory; + private final HgWorkingCopyFactory workingCopyFactory; - public HgModifyCommand(HgCommandContext context, HgWorkdirFactory workdirFactory) { + public HgModifyCommand(HgCommandContext context, HgWorkingCopyFactory workingCopyFactory) { this.context = context; - this.workdirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; } @Override public String execute(ModifyCommandRequest request) { - try (WorkingCopy workingCopy = workdirFactory.createWorkingCopy(context, request.getBranch())) { + try (WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(context, request.getBranch())) { Repository workingRepository = workingCopy.getWorkingRepository(); request.getRequests().forEach( partialRequest -> { @@ -112,7 +112,7 @@ public class HgModifyCommand implements ModifyCommand { private List pullModifyChangesToCentralRepository(ModifyCommandRequest request, WorkingCopy workingCopy) { try { com.aragost.javahg.commands.PullCommand pullCommand = PullCommand.on(workingCopy.getCentralRepository()); - workdirFactory.configure(pullCommand); + workingCopyFactory.configure(pullCommand); return pullCommand.execute(workingCopy.getDirectory().getAbsolutePath()); } catch (Exception e) { throw new IntegrateChangesFromWorkdirException(context.getScmRepository(), diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java index 3995146e42..ce64b06982 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java @@ -120,7 +120,7 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider @Override public BranchCommand getBranchCommand() { - return new HgBranchCommand(context, handler.getWorkdirFactory()); + return new HgBranchCommand(context, handler.getWorkingCopyFactory()); } /** @@ -232,7 +232,7 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider @Override public ModifyCommand getModifyCommand() { - return new HgModifyCommand(context, handler.getWorkdirFactory()); + return new HgModifyCommand(context, handler.getWorkingCopyFactory()); } /** diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgWorkdirFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgWorkingCopyFactory.java similarity index 89% rename from scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgWorkdirFactory.java rename to scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgWorkingCopyFactory.java index e4c816cb0c..1dfc938493 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgWorkdirFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgWorkingCopyFactory.java @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; import com.aragost.javahg.Repository; import com.aragost.javahg.commands.PullCommand; -import sonia.scm.repository.util.WorkdirFactory; +import sonia.scm.repository.util.WorkingCopyFactory; -public interface HgWorkdirFactory extends WorkdirFactory { +public interface HgWorkingCopyFactory extends WorkingCopyFactory { void configure(PullCommand pullCommand); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkdirFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java similarity index 87% rename from scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkdirFactory.java rename to scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java index 85f4a7bd4f..d84e6e163c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkdirFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java @@ -30,24 +30,23 @@ import com.aragost.javahg.commands.CloneCommand; import com.aragost.javahg.commands.PullCommand; import com.aragost.javahg.commands.UpdateCommand; import com.aragost.javahg.commands.flags.CloneCommandFlags; -import sonia.scm.repository.util.CacheSupportingWorkdirProvider; -import sonia.scm.repository.util.SimpleWorkdirFactory; +import sonia.scm.repository.util.WorkingCopyPool; +import sonia.scm.repository.util.SimpleWorkingCopyFactory; import sonia.scm.web.HgRepositoryEnvironmentBuilder; import javax.inject.Inject; import javax.inject.Provider; -import javax.servlet.ServletContextEvent; import java.io.File; import java.io.IOException; import java.util.Map; import java.util.function.BiConsumer; -public class SimpleHgWorkdirFactory extends SimpleWorkdirFactory implements HgWorkdirFactory { +public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory implements HgWorkingCopyFactory { private final Provider hgRepositoryEnvironmentBuilder; @Inject - public SimpleHgWorkdirFactory(Provider hgRepositoryEnvironmentBuilder, CacheSupportingWorkdirProvider workdirProvider) { + public SimpleHgWorkingCopyFactory(Provider hgRepositoryEnvironmentBuilder, WorkingCopyPool workdirProvider) { super(workdirProvider); this.hgRepositoryEnvironmentBuilder = hgRepositoryEnvironmentBuilder; } @@ -85,8 +84,8 @@ public class SimpleHgWorkdirFactory extends SimpleWorkdirFactory b.getName().equals("new_branch")).isNotEmpty(); assertThat(cmdContext.open().changeset(newBranch.getRevision()).getParent1().getBranch()).isEqualTo("default"); @@ -75,7 +75,7 @@ public class HgBranchCommandTest extends AbstractHgCommandTestBase { branchRequest.setParentBranch("test-branch"); branchRequest.setNewBranch("new_branch"); - Branch newBranch = new HgBranchCommand(cmdContext, workdirFactory).branch(branchRequest); + Branch newBranch = new HgBranchCommand(cmdContext, workingCopyFactory).branch(branchRequest); assertThat(readBranches()).filteredOn(b -> b.getName().equals("new_branch")).isNotEmpty(); assertThat(cmdContext.open().changeset(newBranch.getRevision()).getParent1().getBranch()).isEqualTo("test-branch"); @@ -85,7 +85,7 @@ public class HgBranchCommandTest extends AbstractHgCommandTestBase { public void shouldCloseBranch() { String branchToBeClosed = "test-branch"; - new HgBranchCommand(cmdContext, workdirFactory).deleteOrClose(branchToBeClosed); + new HgBranchCommand(cmdContext, workingCopyFactory).deleteOrClose(branchToBeClosed); assertThat(readBranches()).filteredOn(b -> b.getName().equals(branchToBeClosed)).isEmpty(); } @@ -93,8 +93,8 @@ public class HgBranchCommandTest extends AbstractHgCommandTestBase { public void shouldThrowInternalRepositoryException() { String branchToBeClosed = "default"; - new HgBranchCommand(cmdContext, workdirFactory).deleteOrClose(branchToBeClosed); - assertThrows(InternalRepositoryException.class, () -> new HgBranchCommand(cmdContext, workdirFactory).deleteOrClose(branchToBeClosed)); + new HgBranchCommand(cmdContext, workingCopyFactory).deleteOrClose(branchToBeClosed); + assertThrows(InternalRepositoryException.class, () -> new HgBranchCommand(cmdContext, workingCopyFactory).deleteOrClose(branchToBeClosed)); } private List readBranches() { diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java index 6cbc647447..872151ab6b 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java @@ -35,7 +35,7 @@ import sonia.scm.NotFoundException; import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.Person; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.web.HgRepositoryEnvironmentBuilder; @@ -56,13 +56,13 @@ public class HgModifyCommandTest extends AbstractHgCommandTestBase { public void initHgModifyCommand() { HgHookManager hookManager = HgTestUtil.createHookManager(); HgRepositoryEnvironmentBuilder environmentBuilder = new HgRepositoryEnvironmentBuilder(handler, hookManager); - SimpleHgWorkdirFactory workdirFactory = new SimpleHgWorkdirFactory(Providers.of(environmentBuilder), new NoneCachingWorkdirProvider(new WorkdirProvider())) { + SimpleHgWorkingCopyFactory workingCopyFactory = new SimpleHgWorkingCopyFactory(Providers.of(environmentBuilder), new NoneCachingWorkingCopyPool(new WorkdirProvider())) { @Override public void configure(com.aragost.javahg.commands.PullCommand pullCommand) { // we do not want to configure http hooks in this unit test } }; - hgModifyCommand = new HgModifyCommand(cmdContext, workdirFactory + hgModifyCommand = new HgModifyCommand(cmdContext, workingCopyFactory ); } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnWorkDirFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnWorkingCopyFactory.java similarity index 89% rename from scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnWorkDirFactory.java rename to scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnWorkingCopyFactory.java index c7969ed5a9..0c87f2d359 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnWorkDirFactory.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnWorkingCopyFactory.java @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; import sonia.scm.repository.spi.SvnContext; -import sonia.scm.repository.util.WorkdirFactory; +import sonia.scm.repository.util.WorkingCopyFactory; import java.io.File; -public interface SvnWorkDirFactory extends WorkdirFactory { +public interface SvnWorkingCopyFactory extends WorkingCopyFactory { } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java similarity index 85% rename from scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactory.java rename to scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java index c05fe6baf1..a0bfd8cd41 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactory.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java @@ -29,26 +29,23 @@ import org.tmatesoft.svn.core.SVNException; import org.tmatesoft.svn.core.SVNURL; import org.tmatesoft.svn.core.wc.SVNClientManager; import org.tmatesoft.svn.core.wc.SVNRevision; -import org.tmatesoft.svn.core.wc.SVNWCClient; 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.Repository; -import sonia.scm.repository.SvnWorkDirFactory; -import sonia.scm.repository.util.CacheSupportingWorkdirProvider; -import sonia.scm.repository.util.SimpleWorkdirFactory; +import sonia.scm.repository.SvnWorkingCopyFactory; +import sonia.scm.repository.util.WorkingCopyPool; +import sonia.scm.repository.util.SimpleWorkingCopyFactory; import javax.inject.Inject; -import javax.servlet.ServletContextEvent; import java.io.File; -import java.io.IOException; -public class SimpleSvnWorkDirFactory extends SimpleWorkdirFactory implements SvnWorkDirFactory { +public class SimpleSvnWorkingCopyFactory extends SimpleWorkingCopyFactory implements SvnWorkingCopyFactory { @Inject - public SimpleSvnWorkDirFactory(CacheSupportingWorkdirProvider workdirProvider) { - super(workdirProvider); + public SimpleSvnWorkingCopyFactory(WorkingCopyPool workingCopyPool) { + super(workingCopyPool); } @Override @@ -99,6 +96,6 @@ public class SimpleSvnWorkDirFactory extends SimpleWorkdirFactory workingCopy = workDirFactory.createWorkingCopy(context, null)) { + try (WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(context, null)) { File workingDirectory = workingCopy.getDirectory(); modifyWorkingDirectory(request, clientManager, workingDirectory); return commitChanges(clientManager, workingDirectory, request.getCommitMessage()); diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java index 65879834aa..1548fba869 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceProvider.java @@ -28,7 +28,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.io.Closeables; import sonia.scm.repository.Repository; import sonia.scm.repository.SvnRepositoryHandler; -import sonia.scm.repository.SvnWorkDirFactory; +import sonia.scm.repository.SvnWorkingCopyFactory; import sonia.scm.repository.api.Command; import javax.inject.Inject; @@ -54,10 +54,10 @@ public class SvnRepositoryServiceProvider extends RepositoryServiceProvider @Inject SvnRepositoryServiceProvider(SvnRepositoryHandler handler, - Repository repository, SvnWorkDirFactory workdirFactory) + Repository repository, SvnWorkingCopyFactory workingCopyFactory) { this.context = new SvnContext(repository, handler.getDirectory(repository.getId())); - this.workDirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; } //~--- methods -------------------------------------------------------------- @@ -153,7 +153,7 @@ public class SvnRepositoryServiceProvider extends RepositoryServiceProvider } public ModifyCommand getModifyCommand() { - return new SvnModifyCommand(context, workDirFactory); + return new SvnModifyCommand(context, workingCopyFactory); } /** @@ -185,5 +185,5 @@ public class SvnRepositoryServiceProvider extends RepositoryServiceProvider /** Field description */ private final SvnContext context; - private final SvnWorkDirFactory workDirFactory; + private final SvnWorkingCopyFactory workingCopyFactory; } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java index c615902b3e..0a5bff15b7 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SvnRepositoryServiceResolver.java @@ -21,25 +21,25 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; import com.google.inject.Inject; import sonia.scm.plugin.Extension; import sonia.scm.repository.Repository; import sonia.scm.repository.SvnRepositoryHandler; -import sonia.scm.repository.SvnWorkDirFactory; +import sonia.scm.repository.SvnWorkingCopyFactory; @Extension public class SvnRepositoryServiceResolver implements RepositoryServiceResolver { private SvnRepositoryHandler handler; - private SvnWorkDirFactory workdirFactory; + private SvnWorkingCopyFactory workingCopyFactory; @Inject - public SvnRepositoryServiceResolver(SvnRepositoryHandler handler, SvnWorkDirFactory workdirFactory) { + public SvnRepositoryServiceResolver(SvnRepositoryHandler handler, SvnWorkingCopyFactory workingCopyFactory) { this.handler = handler; - this.workdirFactory = workdirFactory; + this.workingCopyFactory = workingCopyFactory; } @Override @@ -47,7 +47,7 @@ public class SvnRepositoryServiceResolver implements RepositoryServiceResolver { SvnRepositoryServiceProvider provider = null; if (SvnRepositoryHandler.TYPE_NAME.equalsIgnoreCase(repository.getType())) { - provider = new SvnRepositoryServiceProvider(handler, repository, workdirFactory); + provider = new SvnRepositoryServiceProvider(handler, repository, workingCopyFactory); } return provider; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java index 52803adb61..078c613418 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnServletModule.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.web; import com.google.inject.servlet.ServletModule; @@ -29,8 +29,8 @@ import org.mapstruct.factory.Mappers; import sonia.scm.api.v2.resources.SvnConfigDtoToSvnConfigMapper; import sonia.scm.api.v2.resources.SvnConfigToSvnConfigDtoMapper; import sonia.scm.plugin.Extension; -import sonia.scm.repository.SvnWorkDirFactory; -import sonia.scm.repository.spi.SimpleSvnWorkDirFactory; +import sonia.scm.repository.SvnWorkingCopyFactory; +import sonia.scm.repository.spi.SimpleSvnWorkingCopyFactory; /** * @@ -43,6 +43,6 @@ public class SvnServletModule extends ServletModule { protected void configureServlets() { bind(SvnConfigDtoToSvnConfigMapper.class).to(Mappers.getMapper(SvnConfigDtoToSvnConfigMapper.class).getClass()); bind(SvnConfigToSvnConfigDtoMapper.class).to(Mappers.getMapper(SvnConfigToSvnConfigDtoMapper.class).getClass()); - bind(SvnWorkDirFactory.class).to(SimpleSvnWorkDirFactory.class); + bind(SvnWorkingCopyFactory.class).to(SimpleSvnWorkingCopyFactory.class); } } diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactoryTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactoryTest.java similarity index 84% rename from scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactoryTest.java rename to scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactoryTest.java index 8f1f7b00c9..5be444aed0 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkDirFactoryTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactoryTest.java @@ -30,7 +30,7 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.tmatesoft.svn.core.SVNException; import sonia.scm.repository.Repository; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.repository.util.WorkingCopy; @@ -39,7 +39,7 @@ import java.io.IOException; import static org.assertj.core.api.Assertions.assertThat; -public class SimpleSvnWorkDirFactoryTest extends AbstractSvnCommandTestBase { +public class SimpleSvnWorkingCopyFactoryTest extends AbstractSvnCommandTestBase { @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @@ -54,7 +54,7 @@ public class SimpleSvnWorkDirFactoryTest extends AbstractSvnCommandTestBase { @Test public void shouldCheckoutLatestRevision() throws SVNException, IOException { - SimpleSvnWorkDirFactory factory = new SimpleSvnWorkDirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); try (WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null)) { assertThat(new File(workingCopy.getWorkingRepository(), "a.txt")) @@ -66,7 +66,7 @@ public class SimpleSvnWorkDirFactoryTest extends AbstractSvnCommandTestBase { @Test public void cloneFromPoolshouldNotBeReused() { - SimpleSvnWorkDirFactory factory = new SimpleSvnWorkDirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File firstDirectory; try (WorkingCopy workingCopy = factory.createWorkingCopy(createContext(), null)) { @@ -80,7 +80,7 @@ public class SimpleSvnWorkDirFactoryTest extends AbstractSvnCommandTestBase { @Test public void shouldDeleteCloneOnClose() { - SimpleSvnWorkDirFactory factory = new SimpleSvnWorkDirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); File directory; File workingRepository; @@ -95,7 +95,7 @@ public class SimpleSvnWorkDirFactoryTest extends AbstractSvnCommandTestBase { @Test public void shouldReturnRepository() { - SimpleSvnWorkDirFactory factory = new SimpleSvnWorkDirFactory(new NoneCachingWorkdirProvider(workdirProvider)); + SimpleSvnWorkingCopyFactory factory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(workdirProvider)); Repository scmRepository = factory.getScmRepository(createContext()); assertThat(scmRepository).isSameAs(repository); } diff --git a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java index 4060060ed8..029ad5cd07 100644 --- a/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java +++ b/scm-plugins/scm-svn-plugin/src/test/java/sonia/scm/repository/spi/SvnModifyCommandTest.java @@ -33,7 +33,7 @@ import org.junit.Test; import org.junit.rules.TemporaryFolder; import sonia.scm.AlreadyExistsException; import sonia.scm.repository.Person; -import sonia.scm.repository.util.NoneCachingWorkdirProvider; +import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.repository.util.WorkingCopy; @@ -49,7 +49,7 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase { private SvnModifyCommand svnModifyCommand; private SvnContext context; - private SimpleSvnWorkDirFactory workDirFactory; + private SimpleSvnWorkingCopyFactory workingCopyFactory; @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @@ -57,8 +57,8 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase { @Before public void initSvnModifyCommand() { context = createContext(); - workDirFactory = new SimpleSvnWorkDirFactory(new NoneCachingWorkdirProvider(new WorkdirProvider(context.getDirectory()))); - svnModifyCommand = new SvnModifyCommand(context, workDirFactory); + workingCopyFactory = new SimpleSvnWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider(context.getDirectory()))); + svnModifyCommand = new SvnModifyCommand(context, workingCopyFactory); } @Before @@ -81,7 +81,7 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase { request.setAuthor(new Person("Arthur Dent", "dent@hitchhiker.com")); svnModifyCommand.execute(request); - WorkingCopy workingCopy = workDirFactory.createWorkingCopy(context, null); + WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(context, null); assertThat(new File(workingCopy.getWorkingRepository().getAbsolutePath() + "/a.txt")).doesNotExist(); assertThat(new File(workingCopy.getWorkingRepository().getAbsolutePath() + "/c")).exists(); } @@ -97,7 +97,7 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase { svnModifyCommand.execute(request); - WorkingCopy workingCopy = workDirFactory.createWorkingCopy(context, null); + WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(context, null); assertThat(new File(workingCopy.getWorkingRepository(), "Test123")).exists(); } @@ -124,7 +124,7 @@ public class SvnModifyCommandTest extends AbstractSvnCommandTestBase { svnModifyCommand.execute(request); - WorkingCopy workingCopy = workDirFactory.createWorkingCopy(context, null); + WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(context, null); assertThat(new File(workingCopy.getWorkingRepository(), "a.txt")).exists(); assertThat(new File(workingCopy.getWorkingRepository(), "a.txt")).hasContent(""); } diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java index b34610f8ce..08781b0070 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ApplicationModuleProvider.java @@ -77,7 +77,7 @@ public class ApplicationModuleProvider implements ModuleProvider { } moduleList.add(new MapperModule()); moduleList.add(new ExecutorModule()); - moduleList.add(new WorkdirModule(pluginLoader)); + moduleList.add(new WorkingCopyPoolModule(pluginLoader)); return moduleList; } diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkdirModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModule.java similarity index 63% rename from scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkdirModule.java rename to scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModule.java index 1f7e72ee9c..9ab838856c 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkdirModule.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/WorkingCopyPoolModule.java @@ -26,25 +26,25 @@ package sonia.scm.lifecycle.modules; import com.google.inject.AbstractModule; import sonia.scm.plugin.PluginLoader; -import sonia.scm.repository.util.CacheSupportingWorkdirProvider; +import sonia.scm.repository.util.WorkingCopyPool; -public class WorkdirModule extends AbstractModule { - public static final String DEFAULT_WORKDIR_CACHE_STRATEGY = "sonia.scm.repository.util.NoneCachingWorkdirProvider"; - public static final String WORKDIR_CACHE_STRATEGY_PROPERTY = "scm.workdirCacheStrategy"; +public class WorkingCopyPoolModule extends AbstractModule { + public static final String DEFAULT_WORKING_COPY_POOL_STRATEGY = "sonia.scm.repository.util.NoneCachingWorkingCopyPool"; + public static final String WORKING_COPY_POOL_STRATEGY_PROPERTY = "scm.workingCopyPoolStrategy"; private final PluginLoader pluginLoader; - public WorkdirModule(PluginLoader pluginLoader) { + public WorkingCopyPoolModule(PluginLoader pluginLoader) { this.pluginLoader = pluginLoader; } @Override protected void configure() { + String workingCopyPoolStrategy = System.getProperty(WORKING_COPY_POOL_STRATEGY_PROPERTY, DEFAULT_WORKING_COPY_POOL_STRATEGY); try { - String workdirCacheStrategy = System.getProperty(WORKDIR_CACHE_STRATEGY_PROPERTY, DEFAULT_WORKDIR_CACHE_STRATEGY); - Class strategyClass = (Class) pluginLoader.getUberClassLoader().loadClass(workdirCacheStrategy); - bind(CacheSupportingWorkdirProvider.class).to(strategyClass); + Class strategyClass = (Class) pluginLoader.getUberClassLoader().loadClass(workingCopyPoolStrategy); + bind(WorkingCopyPool.class).to(strategyClass); } catch (Exception e) { - throw new RuntimeException(e); + throw new RuntimeException("could not instantiate class for working copy pool: " + workingCopyPoolStrategy, e); } } }