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