Let dao create repository base directory before native creation

This commit is contained in:
René Pfeuffer
2018-11-23 15:04:59 +01:00
parent 1e655e9c97
commit 3d671caada
16 changed files with 75 additions and 146 deletions

View File

@@ -34,16 +34,12 @@ package sonia.scm.repository;
//~--- non-JDK imports --------------------------------------------------------
import com.google.common.base.Charsets;
import com.google.common.base.Throwables;
import com.google.common.io.Resources;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.AlreadyExistsException;
import sonia.scm.ConfigurationException;
import sonia.scm.ContextEntry;
import sonia.scm.io.CommandResult;
import sonia.scm.io.ExtendedCommand;
import sonia.scm.io.FileSystem;
import sonia.scm.store.ConfigurationStoreFactory;
import java.io.File;
@@ -69,47 +65,25 @@ public abstract class AbstractSimpleRepositoryHandler<C extends RepositoryConfig
private static final Logger logger =
LoggerFactory.getLogger(AbstractSimpleRepositoryHandler.class);
private final FileSystem fileSystem;
private final RepositoryLocationResolver repositoryLocationResolver;
private final InitialRepositoryLocationResolver initialRepositoryLocationResolver;
public AbstractSimpleRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver) {
RepositoryLocationResolver repositoryLocationResolver) {
super(storeFactory);
this.fileSystem = fileSystem;
this.repositoryLocationResolver = repositoryLocationResolver;
this.initialRepositoryLocationResolver = initialRepositoryLocationResolver;
}
@Override
public Repository create(Repository repository) {
File repositoryRootDirectory = initialRepositoryLocationResolver.getDefaultDirectory(repository);
if (repositoryRootDirectory != null && repositoryRootDirectory.exists()) {
throw new AlreadyExistsException(repository);
}
try {
fileSystem.create(repositoryRootDirectory);
File repositoryRootDirectory = repositoryLocationResolver.getRepositoryDirectory(repository);
File nativeDirectory = new File(repositoryRootDirectory, RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY);
try {
create(repository, nativeDirectory);
postCreate(repository, nativeDirectory);
return repository;
} catch (Exception ex) {
if (repositoryRootDirectory != null && repositoryRootDirectory.exists()) {
logger.warn("delete repository directory {}, because of failed repository creation", repositoryRootDirectory);
try {
fileSystem.destroy(repositoryRootDirectory);
} catch (IOException e) {
logger.error("Could not destroy directory: " + repositoryRootDirectory, e);
}
}
Throwables.propagateIfPossible(ex, AlreadyExistsException.class);
// This point will never be reached
return null;
throw new InternalRepositoryException(repository, "could not create native repository directory", e);
}
return repository;
}
@Override
@@ -119,16 +93,6 @@ public abstract class AbstractSimpleRepositoryHandler<C extends RepositoryConfig
@Override
public void delete(Repository repository) {
File directory = repositoryLocationResolver.getRepositoryDirectory(repository);
try {
if (directory.exists()) {
fileSystem.destroy(directory);
} else {
logger.warn("repository {} not found", repository.getNamespaceAndName());
}
} catch (IOException e) {
throw new InternalRepositoryException(ContextEntry.ContextBuilder.entity("directory", directory.toString()).in(repository), "could not delete repository directory", e);
}
}
@Override
@@ -150,7 +114,7 @@ public abstract class AbstractSimpleRepositoryHandler<C extends RepositoryConfig
public File getDirectory(Repository repository) {
File directory;
if (isConfigured()) {
directory = repositoryLocationResolver.getNativeDirectory(repository);
directory = new File(repositoryLocationResolver.getRepositoryDirectory(repository), RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY);
} else {
throw new ConfigurationException("RepositoryHandler is not configured");
}

View File

@@ -1,11 +1,9 @@
package sonia.scm.repository;
import sonia.scm.SCMContextProvider;
import sonia.scm.io.FileSystem;
import javax.inject.Inject;
import java.io.File;
import java.io.IOException;
/**
* A Location Resolver for File based Repository Storage.
@@ -30,7 +28,7 @@ public class InitialRepositoryLocationResolver {
this.context = context;
}
File getDefaultDirectory(Repository repository) {
public File getDefaultDirectory(Repository repository) {
String initialRepoFolder = getRelativeRepositoryPath(repository);
return new File(context.getBaseDirectory(), initialRepoFolder);
}

View File

@@ -38,8 +38,4 @@ public class RepositoryLocationResolver {
}
return initialRepositoryLocationResolver.getDefaultDirectory(repository);
}
File getNativeDirectory(Repository repository) {
return new File (getRepositoryDirectory(repository), REPOSITORIES_NATIVE_DIRECTORY);
}
}

View File

@@ -36,6 +36,7 @@ package sonia.scm.repository.xml;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import sonia.scm.SCMContextProvider;
import sonia.scm.io.FileSystem;
import sonia.scm.repository.InitialRepositoryLocationResolver;
import sonia.scm.repository.InternalRepositoryException;
import sonia.scm.repository.NamespaceAndName;
@@ -59,21 +60,24 @@ public class XmlRepositoryDAO
implements PathBasedRepositoryDAO {
public static final String STORE_NAME = "repositories";
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
private final FileSystem fileSystem;
private final SCMContextProvider context;
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
* @param storeFactory
* @param fileSystem
* @param context
*/
@Inject
public XmlRepositoryDAO(ConfigurationStoreFactory storeFactory, InitialRepositoryLocationResolver initialRepositoryLocationResolver, SCMContextProvider context) {
public XmlRepositoryDAO(ConfigurationStoreFactory storeFactory, InitialRepositoryLocationResolver initialRepositoryLocationResolver, FileSystem fileSystem, SCMContextProvider context) {
super(storeFactory.getStore(XmlRepositoryDatabase.class, STORE_NAME));
this.initialRepositoryLocationResolver = initialRepositoryLocationResolver;
this.fileSystem = fileSystem;
this.context = context;
}
@@ -104,6 +108,12 @@ public class XmlRepositoryDAO
@Override
public void add(Repository repository) {
File repositoryRootDirectory = initialRepositoryLocationResolver.getDefaultDirectory(repository);
try {
fileSystem.create(repositoryRootDirectory);
} catch (IOException e) {
throw new InternalRepositoryException(repository, "could not create directory for repository data: " + repositoryRootDirectory, e);
}
String relativeRepositoryPath = initialRepositoryLocationResolver.getRelativeRepositoryPath(repository);
RepositoryPath repositoryPath = new RepositoryPath(relativeRepositoryPath, repository.getId(), repository.clone());
repositoryPath.setToBeSynchronized(true);
@@ -138,6 +148,17 @@ public class XmlRepositoryDAO
return repository.clone();
}
@Override
public void delete(Repository repository) {
Path directory = getPath(repository);
super.delete(repository);
try {
fileSystem.destroy(directory.toFile());
} catch (IOException e) {
throw new InternalRepositoryException(repository, "could not delete repository directory", e);
}
}
/**
* Method description
*

View File

@@ -8,6 +8,8 @@ import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.SCMContextProvider;
import sonia.scm.io.DefaultFileSystem;
import sonia.scm.io.FileSystem;
import sonia.scm.repository.InitialRepositoryLocationResolver;
import sonia.scm.repository.Repository;
import sonia.scm.store.ConfigurationStore;
@@ -18,7 +20,6 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import static java.util.Collections.emptyList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.codehaus.groovy.runtime.InvokerHelper.asList;
import static org.mockito.ArgumentMatchers.argThat;
@@ -41,6 +42,8 @@ public class XmlRepositoryDAOTest {
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
private final FileSystem fileSystem = new DefaultFileSystem();
@Before
public void init() throws IOException {
when(storeFactory.getStore(XmlRepositoryDatabase.class, STORE_NAME)).thenReturn(store);
@@ -51,7 +54,7 @@ public class XmlRepositoryDAOTest {
@Test
public void addShouldCreateNewRepositoryPathWithRelativePath() {
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, initialRepositoryLocationResolver, context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, initialRepositoryLocationResolver, fileSystem, context);
dao.add(new Repository("id", null, null, null));
@@ -69,7 +72,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), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
Repository newRepository = new Repository("id", "new", null, null);
dao.modify(newRepository);
@@ -84,7 +87,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), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
Path path = dao.getPath(existingRepository);
@@ -97,7 +100,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), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
Path path = dao.getPath(existingRepository);
@@ -111,7 +114,7 @@ public class XmlRepositoryDAOTest {
RepositoryPath repositoryPath = new RepositoryPath("relative/path", "id", existingRepository);
when(db.getPaths()).thenReturn(asList(repositoryPath));
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
String id = dao.getIdForDirectory(new File(context.getBaseDirectory(), "relative/path/data"));
@@ -125,7 +128,7 @@ public class XmlRepositoryDAOTest {
RepositoryPath repositoryPath = new RepositoryPath(folder.getParent(), "id", existingRepository);
when(db.getPaths()).thenReturn(asList(repositoryPath));
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
String id = dao.getIdForDirectory(folder);
@@ -141,7 +144,7 @@ public class XmlRepositoryDAOTest {
RepositoryPath repositoryPath = new RepositoryPath(new File(link, "data").getPath(), "id", existingRepository);
when(db.getPaths()).thenReturn(asList(repositoryPath));
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), context);
XmlRepositoryDAO dao = new XmlRepositoryDAO(storeFactory, new InitialRepositoryLocationResolver(context), fileSystem, context);
String id = dao.getIdForDirectory(folder);

View File

@@ -97,24 +97,13 @@ public class GitRepositoryHandler
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
*
* @param storeFactory
* @param fileSystem
* @param scheduler
* @param repositoryLocationResolver
*/
@Inject
public GitRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem,
Scheduler scheduler,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver,
GitWorkdirFactory workdirFactory)
{
super(storeFactory, fileSystem, repositoryLocationResolver, initialRepositoryLocationResolver);
super(storeFactory, repositoryLocationResolver);
this.scheduler = scheduler;
this.workdirFactory = workdirFactory;
}

View File

@@ -64,7 +64,6 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
private GitWorkdirFactory gitWorkdirFactory;
RepositoryLocationResolver repositoryLocationResolver;
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
@Override
@@ -89,12 +88,9 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Override
protected RepositoryHandler createRepositoryHandler(ConfigurationStoreFactory factory,
File directory) {
DefaultFileSystem fileSystem = new DefaultFileSystem();
initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, new InitialRepositoryLocationResolver(contextProvider));
GitRepositoryHandler repositoryHandler = new GitRepositoryHandler(factory,
fileSystem, scheduler, repositoryLocationResolver, initialRepositoryLocationResolver, gitWorkdirFactory);
scheduler, repositoryLocationResolver, gitWorkdirFactory);
repositoryHandler.init(contextProvider);
GitConfig config = new GitConfig();
@@ -108,7 +104,7 @@ public class GitRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Test
public void getDirectory() {
GitRepositoryHandler repositoryHandler = new GitRepositoryHandler(factory,
new DefaultFileSystem(), scheduler, repositoryLocationResolver, initialRepositoryLocationResolver, gitWorkdirFactory);
scheduler, repositoryLocationResolver, gitWorkdirFactory);
GitConfig config = new GitConfig();
config.setDisabled(false);
config.setGcExpression("gc exp");

View File

@@ -45,7 +45,6 @@ import sonia.scm.SCMContextProvider;
import sonia.scm.installer.HgInstaller;
import sonia.scm.installer.HgInstallerFactory;
import sonia.scm.io.ExtendedCommand;
import sonia.scm.io.FileSystem;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.spi.HgRepositoryServiceProvider;
import sonia.scm.store.ConfigurationStoreFactory;
@@ -102,22 +101,12 @@ public class HgRepositoryHandler
//~--- constructors ---------------------------------------------------------
/**
* Constructs ...
*
* @param storeFactory
* @param fileSystem
* @param hgContextProvider
* @param repositoryLocationResolver
*/
@Inject
public HgRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem,
Provider<HgContext> hgContextProvider,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver)
RepositoryLocationResolver repositoryLocationResolver)
{
super(storeFactory, fileSystem, repositoryLocationResolver, initialRepositoryLocationResolver);
super(storeFactory, repositoryLocationResolver);
this.hgContextProvider = hgContextProvider;
try

View File

@@ -38,7 +38,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.io.DefaultFileSystem;
import sonia.scm.store.ConfigurationStoreFactory;
import java.io.File;
@@ -61,7 +60,6 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
private com.google.inject.Provider<HgContext> provider;
private RepositoryLocationResolver repositoryLocationResolver;
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
@Override
protected void checkDirectory(File directory) {
@@ -74,11 +72,9 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Override
protected RepositoryHandler createRepositoryHandler(ConfigurationStoreFactory factory,
File directory) {
initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, new InitialRepositoryLocationResolver(contextProvider));
HgRepositoryHandler handler = new HgRepositoryHandler(factory,
new DefaultFileSystem(),
new HgContextProvider(), repositoryLocationResolver, initialRepositoryLocationResolver);
new HgContextProvider(), repositoryLocationResolver);
handler.init(contextProvider);
HgTestUtil.checkForSkip(handler);
@@ -89,7 +85,7 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Test
public void getDirectory() {
HgRepositoryHandler repositoryHandler = new HgRepositoryHandler(factory,
new DefaultFileSystem(), provider, repositoryLocationResolver, initialRepositoryLocationResolver);
provider, repositoryLocationResolver);
HgConfig hgConfig = new HgConfig();
hgConfig.setHgBinary("hg");

View File

@@ -36,19 +36,18 @@ package sonia.scm.repository;
//~--- non-JDK imports --------------------------------------------------------
import org.junit.Assume;
import sonia.scm.SCMContext;
import sonia.scm.io.FileSystem;
import sonia.scm.store.InMemoryConfigurationStoreFactory;
import static org.mockito.Mockito.*;
//~--- JDK imports ------------------------------------------------------------
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.nio.file.Path;
import javax.servlet.http.HttpServletRequest;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
//~--- JDK imports ------------------------------------------------------------
/**
*
@@ -102,14 +101,11 @@ public final class HgTestUtil
context.setBaseDirectory(directory);
FileSystem fileSystem = mock(FileSystem.class);
PathBasedRepositoryDAO repoDao = mock(PathBasedRepositoryDAO.class);
InitialRepositoryLocationResolver initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(context);
RepositoryLocationResolver repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
RepositoryLocationResolver repositoryLocationResolver = new RepositoryLocationResolver(repoDao, new InitialRepositoryLocationResolver(context));
HgRepositoryHandler handler =
new HgRepositoryHandler(new InMemoryConfigurationStoreFactory(), fileSystem,
new HgContextProvider(), repositoryLocationResolver, initialRepositoryLocationResolver);
new HgRepositoryHandler(new InMemoryConfigurationStoreFactory(), new HgContextProvider(), repositoryLocationResolver);
Path repoDir = directory.toPath();
when(repoDao.getPath(any())).thenReturn(repoDir);
handler.init(context);

View File

@@ -46,7 +46,6 @@ import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory;
import org.tmatesoft.svn.core.io.SVNRepository;
import org.tmatesoft.svn.core.io.SVNRepositoryFactory;
import org.tmatesoft.svn.util.SVNDebugLog;
import sonia.scm.io.FileSystem;
import sonia.scm.logging.SVNKitLogger;
import sonia.scm.plugin.Extension;
import sonia.scm.repository.spi.HookEventFacade;
@@ -87,13 +86,11 @@ public class SvnRepositoryHandler
@Inject
public SvnRepositoryHandler(ConfigurationStoreFactory storeFactory,
FileSystem fileSystem,
HookEventFacade eventFacade,
RepositoryLocationResolver repositoryLocationResolver,
InitialRepositoryLocationResolver initialRepositoryLocationResolver,
RepositoryDAO repositoryDAO)
{
super(storeFactory, fileSystem, repositoryLocationResolver, initialRepositoryLocationResolver);
super(storeFactory, repositoryLocationResolver);
// register logger
SVNDebugLog.setDefaultLog(new SVNKitLogger());

View File

@@ -36,7 +36,6 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import sonia.scm.io.DefaultFileSystem;
import sonia.scm.repository.api.HookContextFactory;
import sonia.scm.repository.spi.HookEventFacade;
import sonia.scm.store.ConfigurationStore;
@@ -76,7 +75,6 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
private HookEventFacade facade = new HookEventFacade(repositoryManagerProvider, hookContextFactory);
private RepositoryLocationResolver repositoryLocationResolver;
private InitialRepositoryLocationResolver initialRepositoryLocationResolver;
@Override
protected void checkDirectory(File directory) {
@@ -94,9 +92,8 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
@Override
protected RepositoryHandler createRepositoryHandler(ConfigurationStoreFactory factory,
File directory) {
initialRepositoryLocationResolver = new InitialRepositoryLocationResolver(contextProvider);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, initialRepositoryLocationResolver);
SvnRepositoryHandler handler = new SvnRepositoryHandler(factory, new DefaultFileSystem(), null, repositoryLocationResolver, initialRepositoryLocationResolver, repositoryDAO);
repositoryLocationResolver = new RepositoryLocationResolver(repoDao, new InitialRepositoryLocationResolver(contextProvider));
SvnRepositoryHandler handler = new SvnRepositoryHandler(factory, null, repositoryLocationResolver, repositoryDAO);
handler.init(contextProvider);
@@ -112,7 +109,7 @@ public class SvnRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase {
public void getDirectory() {
when(factory.getStore(any(), any())).thenReturn(store);
SvnRepositoryHandler repositoryHandler = new SvnRepositoryHandler(factory,
new DefaultFileSystem(), facade, repositoryLocationResolver, initialRepositoryLocationResolver, repositoryDAO);
facade, repositoryLocationResolver, repositoryDAO);
SvnConfig svnConfig = new SvnConfig();
repositoryHandler.setConfig(svnConfig);

View File

@@ -35,7 +35,6 @@ package sonia.scm.repository;
import com.google.common.collect.Sets;
import sonia.scm.AlreadyExistsException;
import sonia.scm.io.DefaultFileSystem;
import sonia.scm.store.ConfigurationStoreFactory;
import javax.xml.bind.annotation.XmlRootElement;
@@ -59,8 +58,8 @@ public class DummyRepositoryHandler
private final Set<String> existingRepoNames = new HashSet<>();
public DummyRepositoryHandler(ConfigurationStoreFactory storeFactory, RepositoryLocationResolver repositoryLocationResolver, InitialRepositoryLocationResolver initialRepositoryLocationResolver) {
super(storeFactory, new DefaultFileSystem(), repositoryLocationResolver, initialRepositoryLocationResolver);
public DummyRepositoryHandler(ConfigurationStoreFactory storeFactory, RepositoryLocationResolver repositoryLocationResolver) {
super(storeFactory, repositoryLocationResolver);
}
@Override

View File

@@ -43,7 +43,6 @@ import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
@@ -82,17 +81,6 @@ public abstract class SimpleRepositoryHandlerTestBase extends AbstractTestBase {
assertTrue(path.contains(repository.getId()));
}
@Test
public void testDelete() {
createRepository();
handler.delete(repository);
File directory = new File(baseDirectory, repository.getId());
assertFalse(directory.exists());
}
@Override
protected void postSetUp() throws IOException, RepositoryPathNotFoundException {
InMemoryConfigurationStoreFactory storeFactory = new InMemoryConfigurationStoreFactory();

View File

@@ -39,7 +39,6 @@ import com.google.inject.Singleton;
import org.apache.shiro.concurrent.SubjectAwareExecutorService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sonia.scm.AlreadyExistsException;
import sonia.scm.ConfigurationException;
import sonia.scm.HandlerEventType;
import sonia.scm.ManagerDaoAdapter;
@@ -138,17 +137,18 @@ public class DefaultRepositoryManager extends AbstractRepositoryManager {
return managerDaoAdapter.create(
repository,
RepositoryPermissions::create,
newRepository -> fireEvent(HandlerEventType.BEFORE_CREATE, newRepository),
newRepository -> {
fireEvent(HandlerEventType.CREATE, newRepository);
if (initRepository) {
try {
getHandler(newRepository).create(newRepository);
} catch (AlreadyExistsException e) {
throw new InternalRepositoryException(repository, "directory for repository does already exist", e);
} catch (InternalRepositoryException e) {
delete(repository);
throw e;
}
}
fireEvent(HandlerEventType.BEFORE_CREATE, newRepository);
},
newRepository -> fireEvent(HandlerEventType.CREATE, newRepository),
newRepository -> repositoryDAO.contains(newRepository.getNamespaceAndName())
);
}

View File

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