Cleanup usage of InitialRepositoryLocationResolver and RepositoryLocationResolver

This commit is contained in:
René Pfeuffer
2018-11-22 17:06:29 +01:00
parent d329ca56f8
commit 20f5e7be1f
16 changed files with 71 additions and 83 deletions

View File

@@ -69,15 +69,19 @@ public abstract class AbstractSimpleRepositoryHandler<C extends RepositoryConfig
private static final Logger logger =
LoggerFactory.getLogger(AbstractSimpleRepositoryHandler.class);
private FileSystem fileSystem;
private final FileSystem fileSystem;
private final RepositoryLocationResolver repositoryLocationResolver;
private final InitialRepositoryLocationResolver initialRepositoryLocationResolver;
public AbstractSimpleRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem, RepositoryLocationResolver repositoryLocationResolver) {
FileSystem fileSystem,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver) {
super(storeFactory);
this.fileSystem = fileSystem;
this.repositoryLocationResolver = repositoryLocationResolver;
this.initialRepositoryLocationResolver = initialRepositoryLocationResolver;
}
@Override
@@ -159,7 +163,7 @@ public abstract class AbstractSimpleRepositoryHandler<C extends RepositoryConfig
@Override
public File getInitialBaseDirectory() {
return repositoryLocationResolver.getInitialBaseDirectory();
return initialRepositoryLocationResolver.getBaseDirectory();
}
@Override

View File

@@ -22,30 +22,21 @@ import java.io.IOException;
public class InitialRepositoryLocationResolver {
public static final String DEFAULT_REPOSITORY_PATH = "repositories";
public static final String REPOSITORIES_NATIVE_DIRECTORY = "data";
private SCMContextProvider context;
private FileSystem fileSystem;
private final SCMContextProvider context;
@Inject
public InitialRepositoryLocationResolver(SCMContextProvider context, FileSystem fileSystem) {
public InitialRepositoryLocationResolver(SCMContextProvider context) {
this.context = context;
this.fileSystem = fileSystem;
}
public File getBaseDirectory() {
File getBaseDirectory() {
return new File(context.getBaseDirectory(), DEFAULT_REPOSITORY_PATH);
}
public File createDirectory(Repository repository) {
File getDefaultDirectory(Repository repository) {
String initialRepoFolder = getRelativeRepositoryPath(repository);
try {
File directory = new File(context.getBaseDirectory(), initialRepoFolder);
fileSystem.create(directory);
return directory;
} catch (IOException e) {
throw new InternalRepositoryException(repository, "Cannot create repository directory for " + repository.getNamespaceAndName(), e);
}
return new File(context.getBaseDirectory(), initialRepoFolder);
}
public String getRelativeRepositoryPath(Repository repository) {

View File

@@ -4,9 +4,6 @@ import groovy.lang.Singleton;
import javax.inject.Inject;
import java.io.File;
import java.io.IOException;
import static sonia.scm.repository.InitialRepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY;
/**
*
@@ -24,6 +21,7 @@ import static sonia.scm.repository.InitialRepositoryLocationResolver.REPOSITORIE
@Singleton
public class RepositoryLocationResolver {
private static final String REPOSITORIES_NATIVE_DIRECTORY = "data";
private RepositoryDAO repositoryDAO;
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
@@ -33,22 +31,12 @@ public class RepositoryLocationResolver {
this.initialRepositoryLocationResolver = initialRepositoryLocationResolver;
}
/**
* Get the current repository directory from the dao or create the initial directory if the repository does not exists
* @param repository
* @return the current repository directory from the dao or the initial directory if the repository does not exists
* @throws IOException
*/
public File getRepositoryDirectory(Repository repository){
if (repositoryDAO instanceof PathBasedRepositoryDAO) {
PathBasedRepositoryDAO pathBasedRepositoryDAO = (PathBasedRepositoryDAO) repositoryDAO;
return pathBasedRepositoryDAO.getPath(repository).toFile();
}
return initialRepositoryLocationResolver.createDirectory(repository);
}
public File getInitialBaseDirectory() {
return initialRepositoryLocationResolver.getBaseDirectory();
return initialRepositoryLocationResolver.getDefaultDirectory(repository);
}
public File getNativeDirectory(Repository repository) {

View File

@@ -83,7 +83,7 @@ public final class RepositoryUtil {
"repository path %s is not in the main repository path %s", path, basePath
);
String id = IOUtil.trimSeperatorChars(path.substring(basePath.length()).replace(InitialRepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, ""));
String id = IOUtil.trimSeperatorChars(path.substring(basePath.length()).replace(RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, ""));
Preconditions.checkArgument(
!id.contains("\\") && !id.contains("/"),

View File

@@ -8,7 +8,6 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.SCMContextProvider;
import sonia.scm.io.DefaultFileSystem;
import java.io.File;
import java.io.IOException;
@@ -31,13 +30,12 @@ public class InitialRepositoryLocationResolverTest {
}
@Test
public void x() {
InitialRepositoryLocationResolver resolver = new InitialRepositoryLocationResolver(context, new DefaultFileSystem());
public void shouldCreateInitialDirectory() {
InitialRepositoryLocationResolver resolver = new InitialRepositoryLocationResolver(context);
Repository repository = new Repository();
repository.setId("ABC");
File directory = resolver.createDirectory(repository);
File directory = resolver.getDefaultDirectory(repository);
assertThat(directory).isEqualTo(new File(context.getBaseDirectory(), "repositories/ABC"));
assertThat(context.getBaseDirectory().exists()).isTrue();
}
}

View File

@@ -48,7 +48,7 @@ public class XmlRepositoryDAOTest {
@Test
public void addShouldCreateNewRepositoryPathWithRelativePath() {
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(context, null);
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, initialRepositoryLocationResolver, context);
dao.add(new Repository("id", null, null, null));
@@ -67,7 +67,7 @@ public class XmlRepositoryDAOTest {
RepositoryPath repositoryPath = new RepositoryPath("/path", "id", oldRepository);
when(db.getPaths()).thenReturn(asList(repositoryPath));
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context, null), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), context);
Repository newRepository = new Repository("id", "new", null, null);
dao.modify(newRepository);
@@ -82,7 +82,7 @@ public class XmlRepositoryDAOTest {
RepositoryPath repositoryPath = new RepositoryPath("path", "id", existingRepository);
when(db.getPaths()).thenReturn(asList(repositoryPath));
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context, null), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), context);
Path path = dao.getPath(existingRepository);
@@ -95,7 +95,7 @@ public class XmlRepositoryDAOTest {
RepositoryPath repositoryPath = new RepositoryPath("/tmp/path", "id", existingRepository);
when(db.getPaths()).thenReturn(asList(repositoryPath));
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context, null), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), context);
Path path = dao.getPath(existingRepository);
@@ -106,7 +106,7 @@ public class XmlRepositoryDAOTest {
public void shouldGetPathForNewRepository() {
when(db.getPaths()).thenReturn(emptyList());
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(context, null);
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, initialRepositoryLocationResolver, context);
Repository newRepository = new Repository("id", "new", null, null);

View File

@@ -107,9 +107,14 @@ public class GitRepositoryHandler
* @param repositoryLocationResolver
*/
@Inject
public GitRepositoryHandler(ConfigurationStoreFactory storeFactory, FileSystem fileSystem, Scheduler scheduler, RepositoryLocationResolver repositoryLocationResolver, GitWorkdirFactory workdirFactory)
public GitRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem,
Scheduler scheduler,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver,
GitWorkdirFactory workdirFactory)
{
super(storeFactory, fileSystem, repositoryLocationResolver);
super(storeFactory, fileSystem, repositoryLocationResolver, initialRepositoryLocationResolver);
this.scheduler = scheduler;
this.workdirFactory = workdirFactory;
}

View File

@@ -64,6 +64,7 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
private GitWorkdirFactory gitWorkdirFactory;
RepositoryLocationResolver repositoryLocationResolver;
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
@Override
@@ -90,10 +91,10 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
File directory) {
DefaultFileSystem fileSystem = new DefaultFileSystem();
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider, fileSystem);
initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
GitRepositoryHandler repositoryHandler = new GitRepositoryHandler(factory,
fileSystem, scheduler, repositoryLocationResolver, gitWorkdirFactory);
fileSystem, scheduler, repositoryLocationResolver, initialRepositoryLocationResolver, gitWorkdirFactory);
repositoryHandler.init(contextProvider);
GitConfig config = new GitConfig();
@@ -107,7 +108,7 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Test
public void getDirectory() {
GitRepositoryHandler repositoryHandler = new GitRepositoryHandler(factory,
new DefaultFileSystem(), scheduler, repositoryLocationResolver, gitWorkdirFactory);
new DefaultFileSystem(), scheduler, repositoryLocationResolver, initialRepositoryLocationResolver, gitWorkdirFactory);
GitConfig config = new GitConfig();
config.setDisabled(false);
config.setGcExpression("gc exp");
@@ -116,6 +117,6 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
initRepository();
File path = repositoryHandler.getDirectory(repository);
assertEquals(repoPath.toString() + File.separator + InitialRepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath());
assertEquals(repoPath.toString() + File.separator + RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath());
}
}

View File

@@ -44,19 +44,13 @@ import sonia.scm.ConfigurationException;
import sonia.scm.SCMContextProvider;
import sonia.scm.installer.HgInstaller;
import sonia.scm.installer.HgInstallerFactory;
import sonia.scm.io.DirectoryFileFilter;
import sonia.scm.io.ExtendedCommand;
import sonia.scm.io.FileSystem;
import sonia.scm.io.INIConfiguration;
import sonia.scm.io.INIConfigurationReader;
import sonia.scm.io.INIConfigurationWriter;
import sonia.scm.io.INISection;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.spi.HgRepositoryServiceProvider;
import sonia.scm.store.ConfigurationStoreFactory;
import sonia.scm.util.IOUtil;
import sonia.scm.util.SystemUtil;
import sonia.scm.util.Util;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
@@ -117,10 +111,13 @@ public class HgRepositoryHandler
* @param repositoryLocationResolver
*/
@Inject
public HgRepositoryHandler(ConfigurationStoreFactory storeFactory, FileSystem fileSystem,
Provider<HgContext> hgContextProvider, RepositoryLocationResolver repositoryLocationResolver)
public HgRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem,
Provider<HgContext> hgContextProvider,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver)
{
super(storeFactory, fileSystem, repositoryLocationResolver);
super(storeFactory, fileSystem, repositoryLocationResolver, initialRepositoryLocationResolver);
this.hgContextProvider = hgContextProvider;
try

View File

@@ -60,7 +60,8 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Mock
private com.google.inject.Provider<HgContext> provider;
RepositoryLocationResolver repositoryLocationResolver;
private RepositoryLocationResolver repositoryLocationResolver;
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
@Override
protected void checkDirectory(File directory) {
@@ -73,11 +74,11 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Override
protected RepositoryHandler createRepositoryHandler(ConfigurationStoreFactory factory,
File directory) {
DefaultFileSystem fileSystem = new DefaultFileSystem();
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, new InitialRepositoryLocationResolver(contextProvider, fileSystem));
initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
HgRepositoryHandler handler = new HgRepositoryHandler(factory,
new DefaultFileSystem(),
new HgContextProvider(), repositoryLocationResolver);
new HgContextProvider(), repositoryLocationResolver, initialRepositoryLocationResolver);
handler.init(contextProvider);
HgTestUtil.checkForSkip(handler);
@@ -88,7 +89,7 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Test
public void getDirectory() {
HgRepositoryHandler repositoryHandler = new HgRepositoryHandler(factory,
new DefaultFileSystem(), provider, repositoryLocationResolver);
new DefaultFileSystem(), provider, repositoryLocationResolver, initialRepositoryLocationResolver);
HgConfig hgConfig = new HgConfig();
hgConfig.setHgBinary("hg");
@@ -97,6 +98,6 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
initRepository();
File path = repositoryHandler.getDirectory(repository);
assertEquals(repoPath.toString() + File.separator + InitialRepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath());
assertEquals(repoPath.toString() + File.separator + RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath());
}
}

View File

@@ -105,10 +105,11 @@ public final class HgTestUtil
FileSystem fileSystem = mock(FileSystem.class);
PathBasedRepositoryDAO repoDao = mock(PathBasedRepositoryDAO.class);
RepositoryLocationResolver repositoryLocationResolver = new RepositoryLocationResolver(repoDao, new InitialRepositoryLocationResolver(context,fileSystem));
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(context);
RepositoryLocationResolver repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
HgRepositoryHandler handler =
new HgRepositoryHandler(new InMemoryConfigurationStoreFactory(), fileSystem,
new HgContextProvider(), repositoryLocationResolver);
new HgContextProvider(), repositoryLocationResolver, initialRepositoryLocationResolver);
Path repoDir = directory.toPath();
when(repoDao.getPath(any())).thenReturn(repoDir);
handler.init(context);

View File

@@ -86,10 +86,13 @@ public class SvnRepositoryHandler
LoggerFactory.getLogger(SvnRepositoryHandler.class);
@Inject
public SvnRepositoryHandler(ConfigurationStoreFactory storeFactory, FileSystem fileSystem,
HookEventFacade eventFacade, RepositoryLocationResolver repositoryLocationResolver)
public SvnRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem,
HookEventFacade eventFacade,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver)
{
super(storeFactory, fileSystem, repositoryLocationResolver);
super(storeFactory, fileSystem, repositoryLocationResolver, initialRepositoryLocationResolver);
// register logger
SVNDebugLog.setDefaultLog(new SVNKitLogger());

View File

@@ -43,7 +43,6 @@ import sonia.scm.store.ConfigurationStore;
import sonia.scm.store.ConfigurationStoreFactory;
import java.io.File;
import java.nio.file.Path;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -73,7 +72,8 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
private HookEventFacade facade = new HookEventFacade(repositoryManagerProvider, hookContextFactory);
RepositoryLocationResolver repositoryLocationResolver ;
private RepositoryLocationResolver repositoryLocationResolver;
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
@Override
protected void checkDirectory(File directory) {
@@ -91,10 +91,9 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Override
protected RepositoryHandler createRepositoryHandler(ConfigurationStoreFactory factory,
File directory) {
DefaultFileSystem fileSystem = new DefaultFileSystem();
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, new InitialRepositoryLocationResolver(contextProvider,fileSystem));
SvnRepositoryHandler handler = new SvnRepositoryHandler(factory,
new DefaultFileSystem(), null, repositoryLocationResolver);
initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
SvnRepositoryHandler handler = new SvnRepositoryHandler(factory, new DefaultFileSystem(), null, repositoryLocationResolver, initialRepositoryLocationResolver);
handler.init(contextProvider);
@@ -110,13 +109,13 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
public void getDirectory() {
when(factory.getStore(any(), any())).thenReturn(store);
SvnRepositoryHandler repositoryHandler = new SvnRepositoryHandler(factory,
new DefaultFileSystem(), facade, repositoryLocationResolver);
new DefaultFileSystem(), facade, repositoryLocationResolver, initialRepositoryLocationResolver);
SvnConfig svnConfig = new SvnConfig();
repositoryHandler.setConfig(svnConfig);
initRepository();
File path = repositoryHandler.getDirectory(repository);
assertEquals(repoPath.toString()+File.separator+InitialRepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath());
assertEquals(repoPath.toString()+File.separator+ RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath());
}
}

View File

@@ -59,8 +59,8 @@ public class DummyRepositoryHandler
private final Set<String> existingRepoNames = new HashSet<>();
public DummyRepositoryHandler(ConfigurationStoreFactory storeFactory, RepositoryLocationResolver repositoryLocationResolver) {
super(storeFactory, new DefaultFileSystem(), repositoryLocationResolver);
public DummyRepositoryHandler(ConfigurationStoreFactory storeFactory, RepositoryLocationResolver repositoryLocationResolver, InitialRepositoryLocationResolver initialRepositoryLocationResolver) {
super(storeFactory, new DefaultFileSystem(), repositoryLocationResolver, initialRepositoryLocationResolver);
}
@Override

View File

@@ -126,7 +126,7 @@ public abstract class SimpleRepositoryHandlerTestBase extends AbstractTestBase {
File repoDirectory = new File(baseDirectory, repository.getId());
repoPath = repoDirectory.toPath();
when(repoDao.getPath(repository)).thenReturn(repoPath);
return new File(repoDirectory, InitialRepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY);
return new File(repoDirectory, RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY);
}
protected File baseDirectory;

View File

@@ -434,17 +434,17 @@ public class DefaultRepositoryManagerTest extends ManagerTestBase<Repository> {
DefaultFileSystem fileSystem = new DefaultFileSystem();
Set<RepositoryHandler> handlerSet = new HashSet<>();
ConfigurationStoreFactory factory = new JAXBConfigurationStoreFactory(contextProvider);
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider, fileSystem);
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider);
XmlRepositoryDAO repositoryDAO = new XmlRepositoryDAO(factory, initialRepositoryLocationResolver, contextProvider);
RepositoryLocationResolver repositoryLocationResolver = new RepositoryLocationResolver(repositoryDAO, initialRepositoryLocationResolver);
handlerSet.add(new DummyRepositoryHandler(factory, repositoryLocationResolver));
handlerSet.add(new DummyRepositoryHandler(factory, repositoryLocationResolver) {
handlerSet.add(new DummyRepositoryHandler(factory, repositoryLocationResolver, initialRepositoryLocationResolver));
handlerSet.add(new DummyRepositoryHandler(factory, repositoryLocationResolver, initialRepositoryLocationResolver) {
@Override
public RepositoryType getType() {
return new RepositoryType("hg", "Mercurial", Sets.newHashSet());
}
});
handlerSet.add(new DummyRepositoryHandler(factory, repositoryLocationResolver) {
handlerSet.add(new DummyRepositoryHandler(factory, repositoryLocationResolver, initialRepositoryLocationResolver) {
@Override
public RepositoryType getType() {
return new RepositoryType("git", "Git", Sets.newHashSet());