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.
This commit is contained in:
René Pfeuffer
2020-05-03 15:41:03 +02:00
parent 5f96244b9b
commit 8bd17a03d7
43 changed files with 280 additions and 283 deletions

View File

@@ -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<File, File, SvnContext> {
public interface SvnWorkingCopyFactory extends WorkingCopyFactory<File, File, SvnContext> {
}

View File

@@ -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<File, File, SvnContext> implements SvnWorkDirFactory {
public class SimpleSvnWorkingCopyFactory extends SimpleWorkingCopyFactory<File, File, SvnContext> 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<File, File, Sv
}
@Override
protected void closeWorkdirInternal(File workdir) {
protected void closeWorkingCopyInternal(File workingCopy) {
}
}

View File

@@ -33,7 +33,7 @@ import org.tmatesoft.svn.core.wc.SVNWCClient;
import org.tmatesoft.svn.core.wc.SVNWCUtil;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.Repository;
import sonia.scm.repository.SvnWorkDirFactory;
import sonia.scm.repository.SvnWorkingCopyFactory;
import sonia.scm.repository.util.WorkingCopy;
import java.io.File;
@@ -43,19 +43,19 @@ import java.nio.file.Path;
public class SvnModifyCommand implements ModifyCommand {
private SvnContext context;
private SvnWorkDirFactory workDirFactory;
private SvnWorkingCopyFactory workingCopyFactory;
private Repository repository;
SvnModifyCommand(SvnContext context, SvnWorkDirFactory workDirFactory) {
SvnModifyCommand(SvnContext context, SvnWorkingCopyFactory workingCopyFactory) {
this.context = context;
this.repository = context.getRepository();
this.workDirFactory = workDirFactory;
this.workingCopyFactory = workingCopyFactory;
}
@Override
public String execute(ModifyCommandRequest request) {
SVNClientManager clientManager = SVNClientManager.newInstance();
try (WorkingCopy<File, File> workingCopy = workDirFactory.createWorkingCopy(context, null)) {
try (WorkingCopy<File, File> workingCopy = workingCopyFactory.createWorkingCopy(context, null)) {
File workingDirectory = workingCopy.getDirectory();
modifyWorkingDirectory(request, clientManager, workingDirectory);
return commitChanges(clientManager, workingDirectory, request.getCommitMessage());

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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);
}
}

View File

@@ -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<File, File> 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<File, File> 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);
}

View File

@@ -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<File, File> workingCopy = workDirFactory.createWorkingCopy(context, null);
WorkingCopy<File, File> 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<File, File> workingCopy = workDirFactory.createWorkingCopy(context, null);
WorkingCopy<File, File> 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<File, File> workingCopy = workDirFactory.createWorkingCopy(context, null);
WorkingCopy<File, File> workingCopy = workingCopyFactory.createWorkingCopy(context, null);
assertThat(new File(workingCopy.getWorkingRepository(), "a.txt")).exists();
assertThat(new File(workingCopy.getWorkingRepository(), "a.txt")).hasContent("");
}