mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 00:15:44 +01:00
Let dao create repository base directory before native creation
This commit is contained in:
@@ -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);
|
||||
}
|
||||
File repositoryRootDirectory = repositoryLocationResolver.getRepositoryDirectory(repository);
|
||||
File nativeDirectory = new File(repositoryRootDirectory, RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY);
|
||||
try {
|
||||
fileSystem.create(repositoryRootDirectory);
|
||||
File nativeDirectory = new File(repositoryRootDirectory, RepositoryLocationResolver.REPOSITORIES_NATIVE_DIRECTORY);
|
||||
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;
|
||||
} catch (IOException e) {
|
||||
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");
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -38,8 +38,4 @@ public class RepositoryLocationResolver {
|
||||
}
|
||||
return initialRepositoryLocationResolver.getDefaultDirectory(repository);
|
||||
}
|
||||
|
||||
File getNativeDirectory(Repository repository) {
|
||||
return new File (getRepositoryDirectory(repository), REPOSITORIES_NATIVE_DIRECTORY);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user