mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-17 10:41:06 +01:00
Query initial repository location only once at creation
This commit is contained in:
@@ -10,8 +10,8 @@ import java.io.File;
|
||||
* <p>
|
||||
* <b>WARNING:</b> The Locations provided with this class may not be used from the plugins to store any plugin specific files.
|
||||
* <p>
|
||||
* Please use the {@link sonia.scm.store.DataStoreFactory } and the {@link sonia.scm.store.DataStore} classes to store data
|
||||
* Please use the {@link sonia.scm.store.BlobStoreFactory } and the {@link sonia.scm.store.BlobStore} classes to store binary files
|
||||
* Please use the {@link sonia.scm.store.DataStoreFactory } and the {@link sonia.scm.store.DataStore} classes to store data<br>
|
||||
* Please use the {@link sonia.scm.store.BlobStoreFactory } and the {@link sonia.scm.store.BlobStore} classes to store binary files<br>
|
||||
* Please use the {@link sonia.scm.store.ConfigurationStoreFactory} and the {@link sonia.scm.store.ConfigurationStore} classes to store configurations
|
||||
*
|
||||
* @author Mohamed Karray
|
||||
@@ -28,12 +28,26 @@ public class InitialRepositoryLocationResolver {
|
||||
this.context = context;
|
||||
}
|
||||
|
||||
public File getDefaultDirectory(Repository repository) {
|
||||
String initialRepoFolder = getRelativeRepositoryPath(repository);
|
||||
return new File(context.getBaseDirectory(), initialRepoFolder);
|
||||
public InitialRepositoryLocation getRelativeRepositoryPath(Repository repository) {
|
||||
String relativePath = DEFAULT_REPOSITORY_PATH + File.separator + repository.getId();
|
||||
return new InitialRepositoryLocation(new File(context.getBaseDirectory(), relativePath), relativePath);
|
||||
}
|
||||
|
||||
public String getRelativeRepositoryPath(Repository repository) {
|
||||
return DEFAULT_REPOSITORY_PATH + File.separator + repository.getId();
|
||||
public static class InitialRepositoryLocation {
|
||||
private final File absolutePath;
|
||||
private final String relativePath;
|
||||
|
||||
public InitialRepositoryLocation(File absolutePath, String relativePath) {
|
||||
this.absolutePath = absolutePath;
|
||||
this.relativePath = relativePath;
|
||||
}
|
||||
|
||||
public File getAbsolutePath() {
|
||||
return absolutePath;
|
||||
}
|
||||
|
||||
public String getRelativePath() {
|
||||
return relativePath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,13 +6,12 @@ import javax.inject.Inject;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
*
|
||||
* A Location Resolver for File based Repository Storage.
|
||||
*
|
||||
* WARNING: The Locations provided with this class may not be used from the plugins to store any plugin specific files.
|
||||
*
|
||||
* Please use the {@link sonia.scm.store.DataStoreFactory } and the {@link sonia.scm.store.DataStore} classes to store data
|
||||
* Please use the {@link sonia.scm.store.BlobStoreFactory } and the {@link sonia.scm.store.BlobStore} classes to store binary files
|
||||
* <p>
|
||||
* <b>WARNING:</b> The Locations provided with this class may not be used from the plugins to store any plugin specific files.
|
||||
* <p>
|
||||
* Please use the {@link sonia.scm.store.DataStoreFactory } and the {@link sonia.scm.store.DataStore} classes to store data<br>
|
||||
* Please use the {@link sonia.scm.store.BlobStoreFactory } and the {@link sonia.scm.store.BlobStore} classes to store binary files<br>
|
||||
* Please use the {@link sonia.scm.store.ConfigurationStoreFactory} and the {@link sonia.scm.store.ConfigurationStore} classes to store configurations
|
||||
*
|
||||
* @author Mohamed Karray
|
||||
@@ -35,6 +34,6 @@ public class RepositoryLocationResolver {
|
||||
PathBasedRepositoryDAO pathBasedRepositoryDAO = (PathBasedRepositoryDAO) repositoryDAO;
|
||||
return pathBasedRepositoryDAO.getPath(repository).toFile();
|
||||
}
|
||||
return initialRepositoryLocationResolver.getDefaultDirectory(repository);
|
||||
return initialRepositoryLocationResolver.getRelativeRepositoryPath(repository).getAbsolutePath();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,8 +34,9 @@ public class InitialRepositoryLocationResolverTest {
|
||||
InitialRepositoryLocationResolver resolver = new InitialRepositoryLocationResolver(context);
|
||||
Repository repository = new Repository();
|
||||
repository.setId("ABC");
|
||||
File directory = resolver.getDefaultDirectory(repository);
|
||||
InitialRepositoryLocationResolver.InitialRepositoryLocation directory = resolver.getRelativeRepositoryPath(repository);
|
||||
|
||||
assertThat(directory).isEqualTo(new File(context.getBaseDirectory(), "repositories/ABC"));
|
||||
assertThat(directory.getAbsolutePath()).isEqualTo(new File(context.getBaseDirectory(), "repositories/ABC"));
|
||||
assertThat(directory.getRelativePath()).isEqualTo( "repositories/ABC");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ import sonia.scm.NotFoundException;
|
||||
import sonia.scm.SCMContextProvider;
|
||||
import sonia.scm.io.FileSystem;
|
||||
import sonia.scm.repository.InitialRepositoryLocationResolver;
|
||||
import sonia.scm.repository.InitialRepositoryLocationResolver.InitialRepositoryLocation;
|
||||
import sonia.scm.repository.InternalRepositoryException;
|
||||
import sonia.scm.repository.NamespaceAndName;
|
||||
import sonia.scm.repository.PathBasedRepositoryDAO;
|
||||
@@ -111,14 +112,13 @@ public class XmlRepositoryDAO
|
||||
|
||||
@Override
|
||||
public void add(Repository repository) {
|
||||
File repositoryRootDirectory = initialRepositoryLocationResolver.getDefaultDirectory(repository);
|
||||
InitialRepositoryLocation initialLocation = initialRepositoryLocationResolver.getRelativeRepositoryPath(repository);
|
||||
try {
|
||||
fileSystem.create(repositoryRootDirectory);
|
||||
fileSystem.create(initialLocation.getAbsolutePath());
|
||||
} catch (IOException e) {
|
||||
throw new InternalRepositoryException(repository, "could not create directory for repository data: " + repositoryRootDirectory, e);
|
||||
throw new InternalRepositoryException(repository, "could not create directory for repository data: " + initialLocation.getAbsolutePath(), e);
|
||||
}
|
||||
String relativeRepositoryPath = initialRepositoryLocationResolver.getRelativeRepositoryPath(repository);
|
||||
RepositoryPath repositoryPath = new RepositoryPath(relativeRepositoryPath, repository.getId(), repository.clone());
|
||||
RepositoryPath repositoryPath = new RepositoryPath(initialLocation.getRelativePath(), repository.getId(), repository.clone());
|
||||
repositoryPath.setToBeSynchronized(true);
|
||||
synchronized (store) {
|
||||
db.add(repositoryPath);
|
||||
|
||||
Reference in New Issue
Block a user