diff --git a/scm-core/src/main/java/sonia/scm/repository/work/CachingAllWorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/work/CachingAllWorkingCopyPool.java index bb64a82d88..40cdf97d27 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/CachingAllWorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/CachingAllWorkingCopyPool.java @@ -27,7 +27,6 @@ package sonia.scm.repository.work; import com.google.common.base.Stopwatch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.repository.RepositoryProvider; import sonia.scm.util.IOUtil; import javax.inject.Inject; @@ -49,13 +48,13 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool { } @Override - public ParentAndClone getWorkingCopy(WorkingCopyContext workingCopyContext) { + public ParentAndClone getWorkingCopy(WorkingCopyContext workingCopyContext) { String id = workingCopyContext.getScmRepository().getId(); File existingWorkdir = workdirs.remove(id); if (existingWorkdir != null) { Stopwatch stopwatch = Stopwatch.createStarted(); try { - ParentAndClone reclaimed = workingCopyContext.getReclaimer().reclaim(existingWorkdir, workingCopyContext.getRequestedBranch()); + ParentAndClone reclaimed = workingCopyContext.reclaim(existingWorkdir); LOG.debug("reclaimed workdir for {} in path {} in {}", workingCopyContext.getScmRepository().getNamespaceAndName(), existingWorkdir, stopwatch.stop()); return reclaimed; } catch (SimpleWorkingCopyFactory.ReclaimFailedException e) { @@ -66,17 +65,16 @@ public class CachingAllWorkingCopyPool implements WorkingCopyPool { return createNewWorkingCopy(workingCopyContext); } - private ParentAndClone createNewWorkingCopy(WorkingCopyContext workingCopyContext) { + private ParentAndClone createNewWorkingCopy(WorkingCopyContext workingCopyContext) { Stopwatch stopwatch = Stopwatch.createStarted(); File newWorkdir = workdirProvider.createNewWorkdir(); - SimpleWorkingCopyFactory.WorkingCopyInitializer initializer = workingCopyContext.getInitializer(); - ParentAndClone parentAndClone = initializer.initialize(newWorkdir, workingCopyContext.getRequestedBranch()); + ParentAndClone parentAndClone = workingCopyContext.initialize(newWorkdir); LOG.debug("initialized new workdir for {} in path {} in {}", workingCopyContext.getScmRepository().getNamespaceAndName(), newWorkdir, stopwatch.stop()); return parentAndClone; } @Override - public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) { + public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) { String id = workingCopyContext.getScmRepository().getId(); File putResult = workdirs.putIfAbsent(id, workdir); if (putResult != null && putResult != workdir) { diff --git a/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java index 630b36b470..f4b493d3ab 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/NoneCachingWorkingCopyPool.java @@ -24,7 +24,6 @@ package sonia.scm.repository.work; -import sonia.scm.repository.RepositoryProvider; import sonia.scm.util.IOUtil; import javax.inject.Inject; @@ -40,12 +39,12 @@ public class NoneCachingWorkingCopyPool implements WorkingCopyPool { } @Override - public ParentAndClone getWorkingCopy(WorkingCopyContext context) { - return context.getInitializer().initialize(workdirProvider.createNewWorkdir(), context.getRequestedBranch()); + public ParentAndClone getWorkingCopy(WorkingCopyContext context) { + return context.initialize(workdirProvider.createNewWorkdir()); } @Override - public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) { + public void contextClosed(WorkingCopyContext workingCopyContext, File workdir) { IOUtil.deleteSilently(workdir); } diff --git a/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java b/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java index fa22d80131..727e54dffc 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/SimpleWorkingCopyFactory.java @@ -55,115 +55,109 @@ import java.io.File; *
Closes resources allocated for the central repository.
* *
- *                     ┌─────────────┐          ┌───────────────────────────┐                                                      ┌───────────────┐          ┌───────────────┐
- *                     │ModifyCommand│          │SimpleGitWorkingCopyFactory│                                                      │WorkingCopyPool│          │WorkdirProvider│
- *                     └──────┬──────┘          └─────────────┬─────────────┘                                                      └───────┬───────┘          └───────┬───────┘
- *                            │      createWorkingCopy        │                                                                            │                          │
- *                            │──────────────────────────────>│                                                                            │                          │
- *                            │                               │                                                                            │                          │
- *                            │                               ────┐                                                                        │                          │
- *                            │                                   │ createContext                                                          │                          │
- *                            │                               <───┘                                                                        │                          │
- *                            │                               │                                                                            │                          │
- *                            │                               │        create          ┌─────────┐                                         │                          │
- *                            │                               │──────────────────────> │Reclaimer│                                         │                          │
- *                            │                               │                        └────┬────┘                                         │                          │
- *                            │                               │                  create     │               ┌───────────┐                  │                          │
- *                            │                               │───────────────────────────────────────────> │Initializer│                  │                          │
- *                            │                               │                             │               └─────┬─────┘                  │                          │
- *                            │                               │                             │getWorkingCopy       │                        │                          │
- *                            │                               │───────────────────────────────────────────────────────────────────────────>│                          │
- *                            │                               │                             │                     │                        │                          │
- *                            │                               │                             │                     │                        │                          │
- *                            │                               │                             │                     │                        │                          │
- *                            │                               │                             │                     │                        │                          │
- *                            │                               │                             │                   reclaim                    │                          │
- *                            │                               │                             │<─────────────────────────────────────────────│                          │
- *                            │                               │                             │                     │                        │                          │
- *                            │                               │                             │                     │                        │                          │
- *                            │       ╔══════╤════════════════╪═════════════════════════════╪═════════════════════╪════════════════════════╪══════════════════════════╪═════════════════╗
- *                            │       ║ ALT  │  reclaim successful                          │                     │                        │                          │                 ║
- *                            │       ╟──────┘                │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │─────────────────────────────────────────────>│                          │                 ║
- *                            │       ╠═══════════════════════╪═════════════════════════════╪═════════════════════╪════════════════════════╪══════════════════════════╪═════════════════╣
- *                            │       ║ [reclaim fails; create new]                         │                     │                        │                          │                 ║
- *                            │       ║                       │                          ReclaimFailedException   │                        │                          │                 ║
- *                            │       ║                       │───────────────────────────────────────────────────────────────────────────>│                          │                 ║
- *                            │       ║                       │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │                     │                        │    createNewWorkdir      │                 ║
- *                            │       ║                       │                             │                     │                        │─────────────────────────>│                 ║
- *                            │       ║                       │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │                     │                        │<─────────────────────────│                 ║
- *                            │       ║                       │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │                     │      initialize        │                          │                 ║
- *                            │       ║                       │                             │                     │<───────────────────────│                          │                 ║
- *                            │       ║                       │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │                     │                        │                          │                 ║
- *                            │       ║                       │                             │                     │───────────────────────>│                          │                 ║
- *                            │       ╚═══════════════════════╪═════════════════════════════╪═════════════════════╪════════════════════════╪══════════════════════════╪═════════════════╝
- *                            │                               │                             │                     │                        │                          │
- *                            │                               │                             │ParentAndClone       │                        │                          │
- *                            │                               │<───────────────────────────────────────────────────────────────────────────│                          │
- *                            │                               │                             │                     │                        │                          │
- *                            │                               │                             │                     │                        │                          │                  ┌───────────┐
- *                            │                               │────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────> │WorkingCopy│
- *                            │                               │                             │                     │                        │                          │                  └─────┬─────┘
- *                            │         WorkingCopy           │                             │                     │                        │                          │                        │
- *                            │<──────────────────────────────│                             │                     │                        │                          │                        │
- *                            │                               │                             │                     │                        │                          │                        │
- *                            .                               .                             .                     .                        .                          .                        .
- *                            .                               .                             .                     .                        .                          .                        .
- *                            .                               .                             .                     .                        .                          .                        .
- *                            .                               .                             .                     .                        .                          .                        .
- *                            │                               │                             │              doWork │                        │                          │                        │
- *                            │───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────>│
- *                            │                               │                             │                     │                        │                          │                        │
- *                            .                               .                             .                     .                        .                          .                        .
- *                            .                               .                             .                     .                        .                          .                        .
- *                            .                               .                             .                     .                        .                          .                        .
- *                            .                               .                             .                     .                        .                          .                        .
- *                            │                               │                             │               close │                        │                          │                        │
- *                            │───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────>│
- *                            │                               │                             │                     │                        │                          │                        │
- *                            │                               │                             │                     │         close          │                          │                        │
- *                            │                               │<───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
- *                            │                               │                             │                     │                        │                          │                        │
- *                            │                               ────┐                         │                     │                        │                          │                        │
- *                            │                                   │ closeWorkingCopy        │                     │                        │                          │                        │
- *                            │                               <───┘                         │                     │                        │                          │                        │
- *                            │                               │                             │                     │                        │                          │                        │
- *                            │                               ────┐                         │                     │                        │                          │                        │
- *                            │                                   │ closeRepository         │                     │                        │                          │                        │
- *                            │                               <───┘                         │                     │                        │                          │                        │
- *                            │                               │                             │                     │                        │                          │                        │
- *                            │                               │                             │ contextClosed       │                        │                          │                        │
- *                            │                               │───────────────────────────────────────────────────────────────────────────>│                          │                        │
+ *                     ┌─────────────┐          ┌───────────────────────────┐                                        ┌───────────────┐          ┌───────────────┐
+ *                     │ModifyCommand│          │SimpleGitWorkingCopyFactory│                                        │WorkingCopyPool│          │WorkdirProvider│
+ *                     └──────┬──────┘          └─────────────┬─────────────┘                                        └───────┬───────┘          └───────┬───────┘
+ *                            │      createWorkingCopy        │                                                              │                          │
+ *                            │──────────────────────────────>│                                                              │                          │
+ *                            │                               │                                                              │                          │
+ *                            │                               │        create          ┌──────────────────┐                  │                          │
+ *                            │                               │──────────────────────> │WorkingCopyContext│                  │                          │
+ *                            │                               │                        └────────┬─────────┘                  │                          │
+ *                            │                               │                       getWorkingCopy                         │                          │
+ *                            │                               │─────────────────────────────────────────────────────────────>│                          │
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │                                 │          reclaim           │                          │
+ *                            │                               │                                 │ <──────────────────────────│                          │
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │              ╔══════╤═══════════╪════════════════════════════╪══════════════════════════╪═════════════════╗
+ *                            │                               │              ║ ALT  │  reclaim successful                    │                          │                 ║
+ *                            │                               │              ╟──────┘           │                            │                          │                 ║
+ *                            │                               │              ║                  │                            │                          │                 ║
+ *                            │                               │              ║                  │ ──────────────────────────>│                          │                 ║
+ *                            │                               │              ╠══════════════════╪════════════════════════════╪══════════════════════════╪═════════════════╣
+ *                            │                               │              ║ [reclaim fails; create new]                   │                          │                 ║
+ *                            │                               │              ║                  │   ReclaimFailedException   │                          │                 ║
+ *                            │                               │              ║                  │ ──────────────────────────>│                          │                 ║
+ *                            │                               │              ║                  │                            │                          │                 ║
+ *                            │                               │              ║                  │                            │    createNewWorkdir      │                 ║
+ *                            │                               │              ║                  │                            │─────────────────────────>│                 ║
+ *                            │                               │              ║                  │                            │                          │                 ║
+ *                            │                               │              ║                  │                            │                          │                 ║
+ *                            │                               │              ║                  │                            │<─────────────────────────│                 ║
+ *                            │                               │              ║                  │                            │                          │                 ║
+ *                            │                               │              ║                  │         initialize         │                          │                 ║
+ *                            │                               │              ║                  │ <──────────────────────────│                          │                 ║
+ *                            │                               │              ║                  │                            │                          │                 ║
+ *                            │                               │              ║                  │                            │                          │                 ║
+ *                            │                               │              ║                  │ ──────────────────────────>│                          │                 ║
+ *                            │                               │              ╚══════════════════╪════════════════════════════╪══════════════════════════╪═════════════════╝
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │                       ParentAndClone                         │                          │
+ *                            │                               │<─────────────────────────────────────────────────────────────│                          │
+ *                            │                               │                                 │                            │                          │
+ *                            │                               │                                 │                            │                          │                  ┌───────────┐
+ *                            │                               │──────────────────────────────────────────────────────────────────────────────────────────────────────────> │WorkingCopy│
+ *                            │                               │                                 │                            │                          │                  └─────┬─────┘
+ *                            │         WorkingCopy           │                                 │                            │                          │                        │
+ *                            │<──────────────────────────────│                                 │                            │                          │                        │
+ *                            │                               │                                 │                            │                          │                        │
+ *                            .                               .                                 .                            .                          .                        .
+ *                            .                               .                                 .                            .                          .                        .
+ *                            .                               .                                 .                            .                          .                        .
+ *                            .                               .                                 .                            .                          .                        .
+ *                            │                               │                                 │   doWork                   │                          │                        │
+ *                            │─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────>│
+ *                            │                               │                                 │                            │                          │                        │
+ *                            .                               .                                 .                            .                          .                        .
+ *                            .                               .                                 .                            .                          .                        .
+ *                            .                               .                                 .                            .                          .                        .
+ *                            .                               .                                 .                            .                          .                        .
+ *                            │                               │                                 │    close                   │                          │                        │
+ *                            │─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────>│
+ *                            │                               │                                 │                            │                          │                        │
+ *                            │                               │                                 │                    close   │                          │                        │
+ *                            │                               │<─────────────────────────────────────────────────────────────────────────────────────────────────────────────────│
+ *                            │                               │                                 │                            │                          │                        │
+ *                            │                               ────┐                             │                            │                          │                        │
+ *                            │                                   │ closeWorkingCopy            │                            │                          │                        │
+ *                            │                               <───┘                             │                            │                          │                        │
+ *                            │                               │                                 │                            │                          │                        │
+ *                            │                               ────┐                             │                            │                          │                        │
+ *                            │                                   │ closeRepository             │                            │                          │                        │
+ *                            │                               <───┘                             │                            │                          │                        │
+ *                            │                               │                                 │                            │                          │                        │
+ *                            │                               │                        contextClosed                         │                          │                        │
+ *                            │                               │─────────────────────────────────────────────────────────────>│                          │                        │
+ *                     ┌──────┴──────┐          ┌─────────────┴─────────────┐          ┌────────┴─────────┐          ┌───────┴───────┐          ┌───────┴───────┐          ┌─────┴─────┐
+ *                     │ModifyCommand│          │SimpleGitWorkingCopyFactory│          │WorkingCopyContext│          │WorkingCopyPool│          │WorkdirProvider│          │WorkingCopy│
+ *                     └─────────────┘          └───────────────────────────┘          └──────────────────┘          └───────────────┘          └───────────────┘          └───────────┘
  * 
- * + * * @param Type of central repository location * @param Type of working copy for repository * @param Type of repository context */ /* -http://www.plantuml.com/plantuml/uml/fPF1QiCm38RlVWgV0-a3U10wmZfss2ZTO6TZgqLCiOBjhCsUVeIcmKkPcx5RB7t_7qcsrY5g7xk6n3DRtFSrDursjgnUiMa97Z6-i_z0TwYvxJVQHFQzLD9uq16IbCZmMJDrjghPHJZ5l8tSWI6D3VYY67Kt14yE8sh2hyMI9BPb9dM051C7prqhttml8qj_BaVCD6KrrQakYAPumMNeZ84GzXs92IohIivi1520IRJNIE5k7BnqSCotSPgxgV5N6uq4zk5ae8t8xhhs8M3HRpr_eWK_3kq5ZcD2p82oci_isZEv1eNJjvZ2l_JlxBLLzYrjjGSNxvsjYTtoYowAF5hzs0sL5YfMgzLyTPAqiZoSRb66E43IQtvbHZn3B90dyNywxQ3bWCFvRvjbpYjV3nvMhC7Phg5l +http://www.plantuml.com/plantuml/uml/fPFHQlCm38Nl_HI-3gGFu1zCVyAwgutI3NPjRBM8ALQmdRNPqu_ITBX9yJ9sQUax9-H8MiTaGkfR4a_iS3yqtBR6krg_ODiHF69wu_2E_j1mDsoCJHm6gQGDO19aBL7WQospOiC-mIbLbRgOb9LPRSjCwW0v9Ww1-qw-Xa4cbW4i6Mp5H5Fh-TVLbJMKhZePUsiXndrFOgwejPOJOm4KuLkzDqZntvYCz72yQtAQcgZTHRynIE0UJXQwXEpl_uJ3i0tyWGx2cDup7CU6c02rdeQtA1ZqcD0GViBI4BoR6vVMHsrD09_-UzSG--NphweogcysMCcC4QlLQhhWMLivFhz-eYnnl4cbU2KZNY0MoBFw7vrsq774y_jt1sSlas_E7awimRk-fIy0 @startuml ModifyCommand->SimpleGitWorkingCopyFactory : createWorkingCopy -SimpleGitWorkingCopyFactory->SimpleGitWorkingCopyFactory:createContext -SimpleGitWorkingCopyFactory-> Reclaimer**:create -SimpleGitWorkingCopyFactory-> Initializer**:create +SimpleGitWorkingCopyFactory-> WorkingCopyContext**:create SimpleGitWorkingCopyFactory->WorkingCopyPool:getWorkingCopy group Try to reclaim -WorkingCopyPool->Reclaimer:reclaim +WorkingCopyPool->WorkingCopyContext:reclaim alt reclaim successful -Reclaimer->> WorkingCopyPool +WorkingCopyContext->> WorkingCopyPool else reclaim fails; create new -SimpleGitWorkingCopyFactory->x WorkingCopyPool:ReclaimFailedException +WorkingCopyContext->x WorkingCopyPool:ReclaimFailedException WorkingCopyPool->WorkdirProvider:createNewWorkdir WorkdirProvider->>WorkingCopyPool -WorkingCopyPool->Initializer:initialize -Initializer->> WorkingCopyPool +WorkingCopyPool->WorkingCopyContext:initialize +WorkingCopyContext->> WorkingCopyPool end WorkingCopyPool->>SimpleGitWorkingCopyFactory:ParentAndClone SimpleGitWorkingCopyFactory->WorkingCopy** @@ -176,8 +170,7 @@ WorkingCopy->SimpleGitWorkingCopyFactory:close SimpleGitWorkingCopyFactory->SimpleGitWorkingCopyFactory:closeWorkingCopy SimpleGitWorkingCopyFactory->SimpleGitWorkingCopyFactory:closeRepository SimpleGitWorkingCopyFactory->WorkingCopyPool:contextClosed -@enduml -*/ +@enduml*/ public abstract class SimpleWorkingCopyFactory implements WorkingCopyFactory, ServletContextListener { private static final Logger LOG = LoggerFactory.getLogger(SimpleWorkingCopyFactory.class); @@ -190,21 +183,21 @@ public abstract class SimpleWorkingCopyFactory createWorkingCopy(C repositoryContext, String initialBranch) { - WorkingCopyContext workingCopyContext = createWorkingCopyContext(repositoryContext, initialBranch); + WorkingCopyContext workingCopyContext = createWorkingCopyContext(repositoryContext, initialBranch); WorkingCopyPool.ParentAndClone parentAndClone = workingCopyPool.getWorkingCopy(workingCopyContext); return new WorkingCopy<>(parentAndClone.getClone(), parentAndClone.getParent(), () -> this.close(workingCopyContext, parentAndClone), parentAndClone.getDirectory()); } - private WorkingCopyContext createWorkingCopyContext(C repositoryContext, String initialBranch) { + private WorkingCopyContext createWorkingCopyContext(C repositoryContext, String initialBranch) { return new WorkingCopyContext<>( initialBranch, - repositoryContext, + repositoryContext.get(), getInitializer(repositoryContext), getReclaimer(repositoryContext) ); } - private void close(WorkingCopyContext workingCopyContext, WorkingCopyPool.ParentAndClone parentAndClone) { + private void close(WorkingCopyContext workingCopyContext, WorkingCopyPool.ParentAndClone parentAndClone) { try { closeWorkingCopy(parentAndClone.getClone()); } catch (Exception e) { diff --git a/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyContext.java b/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyContext.java index e4574bc454..0fa90729fa 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyContext.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyContext.java @@ -25,38 +25,31 @@ package sonia.scm.repository.work; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryProvider; -public class WorkingCopyContext { +import java.io.File; + +public class WorkingCopyContext { private final String requestedBranch; - private final C context; + private final Repository repository; private final SimpleWorkingCopyFactory.WorkingCopyInitializer initializer; private final SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer; - public WorkingCopyContext(String requestedBranch, C context, SimpleWorkingCopyFactory.WorkingCopyInitializer initializer, SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer) { + public WorkingCopyContext(String requestedBranch, Repository repository, SimpleWorkingCopyFactory.WorkingCopyInitializer initializer, SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer) { this.requestedBranch = requestedBranch; - this.context = context; + this.repository = repository; this.initializer = initializer; this.reclaimer = reclaimer; } public Repository getScmRepository() { - return context.get(); + return repository; } - public String getRequestedBranch() { - return requestedBranch; + public WorkingCopyPool.ParentAndClone reclaim(File workdir) throws SimpleWorkingCopyFactory.ReclaimFailedException { + return reclaimer.reclaim(workdir, requestedBranch); } - public C getContext() { - return context; - } - - public SimpleWorkingCopyFactory.WorkingCopyInitializer getInitializer() { - return initializer; - } - - public SimpleWorkingCopyFactory.WorkingCopyReclaimer getReclaimer() { - return reclaimer; + public WorkingCopyPool.ParentAndClone initialize(File workdir) { + return initializer.initialize(workdir, requestedBranch); } } diff --git a/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyPool.java b/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyPool.java index c389fe6bae..e64d52bddb 100644 --- a/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyPool.java +++ b/scm-core/src/main/java/sonia/scm/repository/work/WorkingCopyPool.java @@ -24,14 +24,12 @@ package sonia.scm.repository.work; -import sonia.scm.repository.RepositoryProvider; - import java.io.File; public interface WorkingCopyPool { - ParentAndClone getWorkingCopy(WorkingCopyContext context); + ParentAndClone getWorkingCopy(WorkingCopyContext context); - void contextClosed(WorkingCopyContext workingCopyContext, File workdir); + void contextClosed(WorkingCopyContext workingCopyContext, File workdir); void shutdown(); @@ -46,15 +44,15 @@ public interface WorkingCopyPool { this.directory = directory; } - public R getParent() { + R getParent() { return parent; } - public W getClone() { + W getClone() { return clone; } - public File getDirectory() { + File getDirectory() { return directory; } } diff --git a/scm-core/src/test/java/sonia/scm/repository/work/CachingAllWorkingCopyPoolTest.java b/scm-core/src/test/java/sonia/scm/repository/work/CachingAllWorkingCopyPoolTest.java index 51ed82a01a..3c378acea3 100644 --- a/scm-core/src/test/java/sonia/scm/repository/work/CachingAllWorkingCopyPoolTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/work/CachingAllWorkingCopyPoolTest.java @@ -32,7 +32,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.repository.Repository; -import sonia.scm.repository.RepositoryProvider; import java.io.File; import java.nio.file.Path; @@ -55,20 +54,14 @@ class CachingAllWorkingCopyPoolTest { CachingAllWorkingCopyPool cachingAllWorkingCopyPool; @Mock - WorkingCopyContext workingCopyContext; - @Mock - SimpleWorkingCopyFactory.WorkingCopyInitializer initializer; - @Mock - SimpleWorkingCopyFactory.WorkingCopyReclaimer reclaimer; + WorkingCopyContext workingCopyContext; @BeforeEach void initContext() throws SimpleWorkingCopyFactory.ReclaimFailedException { - lenient().when(workingCopyContext.getInitializer()).thenReturn(initializer); - lenient().when(workingCopyContext.getReclaimer()).thenReturn(reclaimer); - lenient().when(initializer.initialize(any(), any())) + lenient().when(workingCopyContext.initialize(any())) .thenAnswer(invocationOnMock -> new WorkingCopyPool.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); - lenient().when(reclaimer.reclaim(any(), any())) + lenient().when(workingCopyContext.reclaim(any())) .thenAnswer(invocationOnMock -> new WorkingCopyPool.ParentAndClone<>(null, null, invocationOnMock.getArgument(0, File.class))); } @@ -79,7 +72,7 @@ class CachingAllWorkingCopyPoolTest { WorkingCopyPool.ParentAndClone workdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); - verify(initializer).initialize(temp.toFile(), null); + verify(workingCopyContext).initialize(temp.toFile()); } @Test @@ -91,8 +84,8 @@ class CachingAllWorkingCopyPoolTest { cachingAllWorkingCopyPool.contextClosed(workingCopyContext, firstWorkdir.getDirectory()); WorkingCopyPool.ParentAndClone secondWorkdir = cachingAllWorkingCopyPool.getWorkingCopy(workingCopyContext); - verify(initializer).initialize(temp.toFile(), null); - verify(reclaimer).reclaim(temp.toFile(), null); + verify(workingCopyContext).initialize(temp.toFile()); + verify(workingCopyContext).reclaim(temp.toFile()); assertThat(secondWorkdir.getDirectory()).isEqualTo(temp.toFile()); } @@ -112,9 +105,9 @@ class CachingAllWorkingCopyPoolTest { cachingAllWorkingCopyPool.contextClosed(workingCopyContext, firstWorkdir.getDirectory()); cachingAllWorkingCopyPool.contextClosed(workingCopyContext, secondWorkdir.getDirectory()); - verify(reclaimer, never()).reclaim(any(), any()); - verify(initializer).initialize(firstDirectory, null); - verify(initializer).initialize(secondDirectory, null); + verify(workingCopyContext, never()).reclaim(any()); + verify(workingCopyContext).initialize(firstDirectory); + verify(workingCopyContext).initialize(secondDirectory); assertThat(firstWorkdir.getDirectory()).isNotEqualTo(secondWorkdir.getDirectory()); assertThat(firstWorkdir.getDirectory()).exists(); assertThat(secondWorkdir.getDirectory()).doesNotExist(); diff --git a/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java b/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java index 2e8e8ef5d2..b3e2cb5e07 100644 --- a/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/work/SimpleWorkingCopyFactoryTest.java @@ -61,13 +61,13 @@ public class SimpleWorkingCopyFactoryTest { WorkdirProvider workdirProvider = new WorkdirProvider(temporaryFolder.newFolder()); WorkingCopyPool configurableTestWorkingCopyPool = new WorkingCopyPool() { @Override - public ParentAndClone getWorkingCopy(WorkingCopyContext context) { + public ParentAndClone getWorkingCopy(WorkingCopyContext context) { workdir = workdirProvider.createNewWorkdir(); - return context.getInitializer().initialize(workdir, context.getRequestedBranch()); + return context.initialize(workdir); } @Override - public void contextClosed(WorkingCopyContext createWorkdirContext, File workdir) { + public void contextClosed(WorkingCopyContext createWorkdirContext, File workdir) { if (!workdirIsCached) { IOUtil.deleteSilently(workdir); }