diff --git a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java
index 14efd0995b..cde4b3c3e2 100644
--- a/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java
+++ b/scm-dao-xml/src/main/java/sonia/scm/repository/xml/PathBasedRepositoryLocationResolver.java
@@ -96,6 +96,10 @@ public class PathBasedRepositoryLocationResolver extends BasicRepositoryLocation
pathById.forEach((id, path) -> consumer.accept(id, contextProvider.resolve(path)));
}
+ void updateModificationDate() {
+ this.writePathDatabase();
+ }
+
private void writePathDatabase() {
lastModified = clock.millis();
pathDatabase.write(creationTime, lastModified, pathById);
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 c19b81d574..9b3105b5ed 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
@@ -33,12 +33,9 @@ package sonia.scm.repository.xml;
//~--- non-JDK imports --------------------------------------------------------
-import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
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;
import sonia.scm.repository.Repository;
@@ -48,7 +45,6 @@ import sonia.scm.store.StoreConstants;
import javax.inject.Inject;
import java.io.IOException;
import java.nio.file.Path;
-import java.time.Clock;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -88,8 +84,7 @@ public class XmlRepositoryDAO implements RepositoryDAO {
});
}
- @VisibleForTesting
- Path resolveDataPath(Path repositoryPath) {
+ private Path resolveDataPath(Path repositoryPath) {
return repositoryPath.resolve(StoreConstants.REPOSITORY_METADATA.concat(StoreConstants.FILE_EXTENSION));
}
@@ -167,6 +162,7 @@ public class XmlRepositoryDAO implements RepositoryDAO {
.create(Path.class)
.getLocation(repository.getId());
Path metadataPath = resolveDataPath(repositoryPath);
+ repositoryLocationResolver.updateModificationDate();
metadataStore.write(metadataPath, clone);
}
diff --git a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java
index fd23091beb..5b9a00aec8 100644
--- a/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java
+++ b/scm-dao-xml/src/test/java/sonia/scm/repository/xml/XmlRepositoryDAOTest.java
@@ -15,23 +15,17 @@ import org.mockito.invocation.InvocationOnMock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
-import sonia.scm.SCMContextProvider;
import sonia.scm.io.DefaultFileSystem;
import sonia.scm.io.FileSystem;
import sonia.scm.repository.NamespaceAndName;
import sonia.scm.repository.Repository;
import sonia.scm.repository.RepositoryPermission;
-import sonia.scm.util.IOUtil;
-import sun.misc.IOUtils;
-import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.Arrays;
import java.util.Collection;
-import java.util.Collections;
import java.util.function.BiConsumer;
import static java.util.Arrays.asList;
@@ -40,8 +34,9 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.fail;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import static sonia.scm.repository.RepositoryTestData.createHeartOfGold;
@ExtendWith({MockitoExtension.class, TempDirectory.class})
@MockitoSettings(strictness = Strictness.LENIENT)
@@ -259,10 +254,20 @@ class XmlRepositoryDAOTest {
dao.add(REPOSITORY);
String content = getXmlFileContent(REPOSITORY.getId());
- System.out.println(content);
assertThat(content).containsSubsequence("trillian", "read", "write");
assertThat(content).containsSubsequence("vogons", "delete");
}
+
+ @Test
+ void shouldUpdateRepositoryPathDatabse() {
+ dao.add(REPOSITORY);
+
+ verify(locationResolver, never()).updateModificationDate();
+
+ dao.modify(REPOSITORY);
+
+ verify(locationResolver).updateModificationDate();
+ }
}
@Test