From e968aa17ef6bfcf294b00571f9845a5edb644069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 8 May 2020 18:11:27 +0200 Subject: [PATCH] Cleanup --- .../util/CachingAllWorkingCopyPool.java | 16 +++--- .../util/NoneCachingWorkingCopyPool.java | 7 ++- .../util/SimpleWorkingCopyFactory.java | 53 ++++++------------- .../util/WorkingCopyFailedException.java | 39 ++++++++++++++ .../scm/repository/util/WorkingCopyPool.java | 28 +++++++++- .../util/CachingAllWorkingCopyPoolTest.java | 23 ++++---- .../util/SimpleWorkingCopyFactoryTest.java | 12 ++--- .../spi/SimpleGitWorkingCopyFactory.java | 15 ++++-- .../spi/SimpleHgWorkingCopyFactory.java | 10 +++- .../spi/SimpleHgWorkingCopyFactoryTest.java | 4 -- .../spi/SimpleSvnWorkingCopyFactory.java | 1 + 11 files changed, 131 insertions(+), 77 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyFailedException.java diff --git a/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkingCopyPool.java index 76e3c0b9b0..612701bdc5 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/CachingAllWorkingCopyPool.java @@ -27,11 +27,11 @@ package sonia.scm.repository.util; import com.google.common.base.Stopwatch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.repository.InternalRepositoryException; import sonia.scm.util.IOUtil; import javax.inject.Inject; import java.io.File; -import java.io.IOException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -49,13 +49,13 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool { } @Override - public SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext workingCopyContext) throws IOException { + public ParentAndClone getWorkingCopy(WorkingCopyContext workingCopyContext) { String id = workingCopyContext.getScmRepository().getId(); File existingWorkdir = workdirs.remove(id); if (existingWorkdir != null) { Stopwatch stopwatch = Stopwatch.createStarted(); try { - SimpleWorkingCopyFactory.ParentAndClone reclaimed = workingCopyContext.getReclaimer().reclaim(existingWorkdir); + ParentAndClone reclaimed = workingCopyContext.getReclaimer().reclaim(existingWorkdir); LOG.debug("reclaimed workdir for {} in path {} in {}", workingCopyContext.getScmRepository().getNamespaceAndName(), existingWorkdir, stopwatch.stop()); return reclaimed; } catch (SimpleWorkingCopyFactory.ReclaimFailedException e) { @@ -63,13 +63,17 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool { deleteWorkdir(existingWorkdir); } } - return createNewWorkdir(workingCopyContext); + try { + return createNewWorkdir(workingCopyContext); + } catch (WorkingCopyFailedException e) { + throw new InternalRepositoryException(workingCopyContext.getScmRepository(), "failed to create working copy", e); + } } - private SimpleWorkingCopyFactory.ParentAndClone createNewWorkdir(WorkingCopyContext workingCopyContext) throws IOException { + private ParentAndClone createNewWorkdir(WorkingCopyContext workingCopyContext) throws WorkingCopyFailedException { Stopwatch stopwatch = Stopwatch.createStarted(); File newWorkdir = workdirProvider.createNewWorkdir(); - SimpleWorkingCopyFactory.ParentAndClone parentAndClone = workingCopyContext.getInitializer().initialize(newWorkdir); + ParentAndClone parentAndClone = workingCopyContext.getInitializer().initialize(newWorkdir); LOG.debug("initialized new workdir for {} in path {} in {}", workingCopyContext.getScmRepository().getNamespaceAndName(), newWorkdir, stopwatch.stop()); return parentAndClone; } diff --git a/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkingCopyPool.java index a00ee5d3eb..5a5d40bf44 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/NoneCachingWorkingCopyPool.java @@ -28,7 +28,6 @@ import sonia.scm.util.IOUtil; import javax.inject.Inject; import java.io.File; -import java.io.IOException; public class NoneCachingWorkingCopyPool implements WorkingCopyPool { @@ -40,13 +39,13 @@ public class NoneCachingWorkingCopyPool implements WorkingCopyPool { } @Override - public SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext context) throws IOException { + public ParentAndClone getWorkingCopy(WorkingCopyContext context) throws WorkingCopyFailedException { return context.getInitializer().initialize(workdirProvider.createNewWorkdir()); } @Override - public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) throws IOException { - IOUtil.delete(workdir, true); + public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) { + IOUtil.deleteSilently(workdir); } @Override diff --git a/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkingCopyFactory.java b/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkingCopyFactory.java index 4a1c69a8bb..7bcf7514b0 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkingCopyFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/SimpleWorkingCopyFactory.java @@ -26,14 +26,12 @@ package sonia.scm.repository.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.plugin.Extension; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.Repository; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import java.io.File; -import java.io.IOException; public abstract class SimpleWorkingCopyFactory implements WorkingCopyFactory, ServletContextListener { @@ -49,16 +47,14 @@ public abstract class SimpleWorkingCopyFactory implements WorkingCopyFa public WorkingCopy createWorkingCopy(C repositoryContext, String initialBranch) { try { WorkingCopyContext workingCopyContext = createWorkingCopyContext(repositoryContext, initialBranch); - ParentAndClone parentAndClone = workingCopyPool.getWorkingCopy(workingCopyContext); + WorkingCopyPool.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(repositoryContext), "could not clone repository in temporary directory", e); + } catch (WorkingCopyFailedException e) { + throw new InternalRepositoryException(getScmRepository(repositoryContext), "could not create working copy for repository in temporary directory", e); } } - public WorkingCopyContext createWorkingCopyContext(C repositoryContext, String initialBranch) { + private WorkingCopyContext createWorkingCopyContext(C repositoryContext, String initialBranch) { return new WorkingCopyContext<>( getScmRepository(repositoryContext), initialBranch, @@ -68,7 +64,7 @@ public abstract class SimpleWorkingCopyFactory implements WorkingCopyFa ); } - private void close(WorkingCopyContext workingCopyContext, ParentAndClone parentAndClone) { + private void close(WorkingCopyContext workingCopyContext, WorkingCopyPool.ParentAndClone parentAndClone) { try { closeRepository(parentAndClone.getParent()); } catch (Exception e) { @@ -98,12 +94,12 @@ public abstract class SimpleWorkingCopyFactory implements WorkingCopyFa @FunctionalInterface public interface WorkingCopyInitializer { - ParentAndClone initialize(File target) throws IOException; + WorkingCopyPool.ParentAndClone initialize(File target) throws WorkingCopyFailedException; } @FunctionalInterface public interface WorkingCopyReclaimer { - ParentAndClone reclaim(File target) throws IOException, ReclaimFailedException; + WorkingCopyPool.ParentAndClone reclaim(File target) throws ReclaimFailedException; } protected abstract Repository getScmRepository(C context); @@ -115,40 +111,21 @@ public abstract class SimpleWorkingCopyFactory implements WorkingCopyFa // We do allow implementations to throw arbitrary exceptions here, so that we can handle them in closeWorkingCopy protected abstract void closeWorkingCopyInternal(W workingCopy) throws Exception; - protected abstract ParentAndClone cloneRepository(C context, File target, String initialBranch) throws IOException; + protected abstract WorkingCopyPool.ParentAndClone cloneRepository(C context, File target, String initialBranch) throws WorkingCopyFailedException; - protected abstract ParentAndClone reclaimRepository(C context, File target, String initialBranch) throws IOException, ReclaimFailedException; - - protected static class ParentAndClone { - private final R parent; - private final W clone; - private final File directory; - - public ParentAndClone(R parent, W clone, File directory) { - this.parent = parent; - this.clone = clone; - this.directory = directory; - } - - public R getParent() { - return parent; - } - - public W getClone() { - return clone; - } - - public File getDirectory() { - return directory; - } - } + protected abstract WorkingCopyPool.ParentAndClone reclaimRepository(C context, File target, String initialBranch) throws ReclaimFailedException; public static class ReclaimFailedException extends Exception { - public ReclaimFailedException() { + public ReclaimFailedException(String message) { + super(message); } public ReclaimFailedException(Throwable cause) { super(cause); } + + public ReclaimFailedException(String message, Throwable cause) { + super(message, cause); + } } } diff --git a/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyFailedException.java b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyFailedException.java new file mode 100644 index 0000000000..943fc4c495 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyFailedException.java @@ -0,0 +1,39 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.util; + +public class WorkingCopyFailedException extends Exception { + public WorkingCopyFailedException(String message) { + super(message); + } + + public WorkingCopyFailedException(Throwable cause) { + super(cause); + } + + public WorkingCopyFailedException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyPool.java index 92bc081bb4..e54deb729c 100644 --- a/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/util/WorkingCopyPool.java @@ -27,9 +27,33 @@ package sonia.scm.repository.util; import java.io.File; public interface WorkingCopyPool { - SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext context) throws Exception; + ParentAndClone getWorkingCopy(WorkingCopyContext context) throws WorkingCopyFailedException; - void contextClosed(WorkingCopyContext workingCopyContext, File workdir) throws Exception; + void contextClosed(WorkingCopyContext workingCopyContext, File workdir); void shutdown(); + + class ParentAndClone { + private final R parent; + private final W clone; + private final File directory; + + public ParentAndClone(R parent, W clone, File directory) { + this.parent = parent; + this.clone = clone; + this.directory = directory; + } + + public R getParent() { + return parent; + } + + public W getClone() { + return clone; + } + + public File getDirectory() { + return directory; + } + } } diff --git a/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkingCopyPoolTest.java b/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkingCopyPoolTest.java index b5e011964c..6982b7c8d2 100644 --- a/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkingCopyPoolTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/util/CachingAllWorkingCopyPoolTest.java @@ -34,7 +34,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.Repository; import java.io.File; -import java.io.IOException; import java.nio.file.Path; import static org.assertj.core.api.Assertions.assertThat; @@ -62,34 +61,34 @@ class CachingAllWorkingCopyPoolTest { SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer; @BeforeEach - void initContext() throws IOException, SimpleWorkingCopyFactory.ReclaimFailedException { + void initContext() throws SimpleWorkingCopyFactory.ReclaimFailedException, WorkingCopyFailedException { lenient().when(workingCopyContext.getInitializer()).thenReturn(initializer); lenient().when(workingCopyContext.getReclaimer()).thenReturn(reclaimer); lenient().when(initializer.initialize(any())) - .thenAnswer(invocationOnMock -> new SimpleWorkingCopyFactory.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); + .thenAnswer(invocationOnMock -> new WorkingCopyPool.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); lenient().when(reclaimer.reclaim(any())) - .thenAnswer(invocationOnMock -> new SimpleWorkingCopyFactory.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); + .thenAnswer(invocationOnMock -> new WorkingCopyPool.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); } @Test - void shouldCreateNewWorkdirForTheFirstRequest(@TempDir Path temp) throws IOException { + void shouldCreateNewWorkdirForTheFirstRequest(@TempDir Path temp) throws WorkingCopyFailedException { when(workingCopyContext.getScmRepository()).thenReturn(REPOSITORY); when(workdirProvider.createNewWorkdir()).thenReturn(temp.toFile()); - SimpleWorkingCopyFactory.ParentAndClone workdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + WorkingCopyPool.ParentAndClone workdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); verify(initializer).initialize(temp.toFile()); } @Test - void shouldCreateWorkdirOnlyOnceForTheSameRepository(@TempDir Path temp) throws IOException, SimpleWorkingCopyFactory.ReclaimFailedException { + void shouldCreateWorkdirOnlyOnceForTheSameRepository(@TempDir Path temp) throws SimpleWorkingCopyFactory.ReclaimFailedException, WorkingCopyFailedException { when(workingCopyContext.getScmRepository()).thenReturn(REPOSITORY); when(workdirProvider.createNewWorkdir()).thenReturn(temp.toFile()); - SimpleWorkingCopyFactory.ParentAndClone firstWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + WorkingCopyPool.ParentAndClone firstWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); cachingAllWorkingCopyPool.contextClosed(workingCopyContext, firstWorkdir.getDirectory()); - SimpleWorkingCopyFactory.ParentAndClone secondWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + WorkingCopyPool.ParentAndClone secondWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); verify(initializer).initialize(temp.toFile()); verify(reclaimer).reclaim(temp.toFile()); @@ -97,7 +96,7 @@ class CachingAllWorkingCopyPoolTest { } @Test - void shouldCacheOnlyOneWorkdirForRepository(@TempDir Path temp) throws IOException, SimpleWorkingCopyFactory.ReclaimFailedException { + void shouldCacheOnlyOneWorkdirForRepository(@TempDir Path temp) throws SimpleWorkingCopyFactory.ReclaimFailedException, WorkingCopyFailedException { when(workingCopyContext.getScmRepository()).thenReturn(REPOSITORY); File firstDirectory = temp.resolve("first").toFile(); firstDirectory.mkdirs(); @@ -107,8 +106,8 @@ class CachingAllWorkingCopyPoolTest { firstDirectory, secondDirectory); - SimpleWorkingCopyFactory.ParentAndClone firstWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); - SimpleWorkingCopyFactory.ParentAndClone secondWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + WorkingCopyPool.ParentAndClone firstWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); + WorkingCopyPool.ParentAndClone secondWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); cachingAllWorkingCopyPool.contextClosed(workingCopyContext, firstWorkdir.getDirectory()); cachingAllWorkingCopyPool.contextClosed(workingCopyContext, secondWorkdir.getDirectory()); diff --git a/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkingCopyFactoryTest.java b/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkingCopyFactoryTest.java index 87e80d65bd..97364e12ec 100644 --- a/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkingCopyFactoryTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/util/SimpleWorkingCopyFactoryTest.java @@ -61,15 +61,15 @@ public class SimpleWorkingCopyFactoryTest { WorkdirProvider workdirProvider = new WorkdirProvider(temporaryFolder.newFolder()); WorkingCopyPool configurableTestWorkingCopyPool = new WorkingCopyPool() { @Override - public SimpleWorkingCopyFactory.ParentAndClone getWorkingCopy(WorkingCopyContext context) throws IOException { + public ParentAndClone getWorkingCopy(WorkingCopyContext context) throws WorkingCopyFailedException { workdir = workdirProvider.createNewWorkdir(); return context.getInitializer().initialize(workdir); } @Override - public void contextClosed(WorkingCopyContext createWorkdirContext, File workdir) throws Exception { + public void contextClosed(WorkingCopyContext createWorkdirContext, File workdir) { if (!workdirIsCached) { - IOUtil.delete(workdir); + IOUtil.deleteSilently(workdir); } } @@ -89,7 +89,7 @@ public class SimpleWorkingCopyFactoryTest { } @Override - protected ParentAndClone reclaimRepository(Context context, File target, String initialBranch) throws IOException { + protected WorkingCopyPool.ParentAndClone reclaimRepository(Context context, File target, String initialBranch) { throw new UnsupportedOperationException(); } @@ -99,9 +99,9 @@ public class SimpleWorkingCopyFactoryTest { } @Override - protected ParentAndClone cloneRepository(Context context, File target, String initialBranch) { + protected WorkingCopyPool.ParentAndClone cloneRepository(Context context, File target, String initialBranch) { initialBranchForLastCloneCall = initialBranch; - return new ParentAndClone<>(parent, clone, target); + return new WorkingCopyPool.ParentAndClone<>(parent, clone, target); } }; } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java index e752042d74..088eb099eb 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/SimpleGitWorkingCopyFactory.java @@ -38,6 +38,7 @@ import sonia.scm.repository.GitWorkingCopyFactory; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.util.WorkingCopyPool; import sonia.scm.repository.util.SimpleWorkingCopyFactory; +import sonia.scm.repository.util.WorkingCopyPool.ParentAndClone; import sonia.scm.util.SystemUtil; import javax.inject.Inject; @@ -85,10 +86,10 @@ public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory reclaimRepository(GitContext context, File target, String initialBranch) throws IOException, ReclaimFailedException { + protected ParentAndClone reclaimRepository(GitContext context, File target, String initialBranch) throws ReclaimFailedException { LOG.trace("reclaim repository {}", context.getRepository().getId()); long start = System.nanoTime(); - Repository repo = GitUtil.open(target); + Repository repo = openTarget(target); try (Git git = Git.open(target)) { git.reset().setMode(ResetCommand.ResetType.HARD).call(); git.clean().setForce(true).setCleanDirectories(true).call(); @@ -97,7 +98,7 @@ public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory(null, repo, target); - } catch (GitAPIException e) { + } catch (GitAPIException | IOException e) { throw new ReclaimFailedException(e); } finally { long end = System.nanoTime(); @@ -106,6 +107,14 @@ public class SimpleGitWorkingCopyFactory extends SimpleWorkingCopyFactory cloneRepository(HgCommandContext context, File target, String initialBranch) throws IOException { + public ParentAndClone cloneRepository(HgCommandContext context, File target, String initialBranch) throws WorkingCopyFailedException { Repository centralRepository = openCentral(context); CloneCommand cloneCommand = CloneCommandFlags.on(centralRepository); if (initialBranch != null) { cloneCommand.updaterev(initialBranch); } - cloneCommand.execute(target.getAbsolutePath()); + try { + cloneCommand.execute(target.getAbsolutePath()); + } catch (IOException e) { + throw new WorkingCopyFailedException(e); + } BaseRepository clone = Repository.open(target); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java index 0c1edcbe9f..9199a23c92 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java @@ -31,13 +31,10 @@ import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.junit.jupiter.api.extension.ExtendWith; import org.junit.rules.TemporaryFolder; -import org.junitpioneer.jupiter.TempDirectory; import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.util.CachingAllWorkingCopyPool; -import sonia.scm.repository.util.NoneCachingWorkingCopyPool; import sonia.scm.repository.util.WorkdirProvider; import sonia.scm.repository.util.WorkingCopy; import sonia.scm.web.HgRepositoryEnvironmentBuilder; @@ -50,7 +47,6 @@ import java.util.Collections; import static org.assertj.core.api.Assertions.assertThat; -@ExtendWith(TempDirectory.class) public class SimpleHgWorkingCopyFactoryTest extends AbstractHgCommandTestBase { @Rule diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java index a0bfd8cd41..922eb3bc38 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/spi/SimpleSvnWorkingCopyFactory.java @@ -37,6 +37,7 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.SvnWorkingCopyFactory; import sonia.scm.repository.util.WorkingCopyPool; import sonia.scm.repository.util.SimpleWorkingCopyFactory; +import sonia.scm.repository.util.WorkingCopyPool.ParentAndClone; import javax.inject.Inject; import java.io.File;