diff --git a/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java b/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java index 6740de464f..61318a729f 100644 --- a/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java +++ b/scm-core/src/main/java/sonia/scm/repository/InitialRepositoryLocationResolver.java @@ -10,8 +10,8 @@ import java.io.File; *

* 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 + * 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.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; + } } } diff --git a/scm-core/src/main/java/sonia/scm/repository/RepositoryLocationResolver.java b/scm-core/src/main/java/sonia/scm/repository/RepositoryLocationResolver.java index ad6020f5e1..e9355e4b89 100644 --- a/scm-core/src/main/java/sonia/scm/repository/RepositoryLocationResolver.java +++ b/scm-core/src/main/java/sonia/scm/repository/RepositoryLocationResolver.java @@ -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 + *

+ * 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
* 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(); } } diff --git a/scm-core/src/test/java/sonia/scm/repository/InitialRepositoryLocationResolverTest.java b/scm-core/src/test/java/sonia/scm/repository/InitialRepositoryLocationResolverTest.java index 1e471d3461..dc596980cf 100644 --- a/scm-core/src/test/java/sonia/scm/repository/InitialRepositoryLocationResolverTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/InitialRepositoryLocationResolverTest.java @@ -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"); } } diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java index 930df7a153..116d546f34 100644 --- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java +++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/XmlRepositoryDAO.java @@ -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);