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);