mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-12 16:35:45 +01:00
Backup old repositories file
This commit is contained in:
@@ -4,6 +4,7 @@ import com.google.inject.Injector;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import sonia.scm.SCMContextProvider;
|
import sonia.scm.SCMContextProvider;
|
||||||
|
import sonia.scm.migration.UpdateException;
|
||||||
import sonia.scm.migration.UpdateStep;
|
import sonia.scm.migration.UpdateStep;
|
||||||
import sonia.scm.plugin.Extension;
|
import sonia.scm.plugin.Extension;
|
||||||
import sonia.scm.repository.Repository;
|
import sonia.scm.repository.Repository;
|
||||||
@@ -22,10 +23,11 @@ import javax.xml.bind.annotation.XmlAccessorType;
|
|||||||
import javax.xml.bind.annotation.XmlElement;
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -100,10 +102,23 @@ public class XmlRepositoryV1UpdateStep implements UpdateStep {
|
|||||||
v1Database -> {
|
v1Database -> {
|
||||||
v1Database.repositoryList.repositories.forEach(this::readMigrationStrategy);
|
v1Database.repositoryList.repositories.forEach(this::readMigrationStrategy);
|
||||||
v1Database.repositoryList.repositories.forEach(this::update);
|
v1Database.repositoryList.repositories.forEach(this::update);
|
||||||
|
backupOldRepositoriesFile();
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void backupOldRepositoriesFile() {
|
||||||
|
Path configDir = contextProvider.getBaseDirectory().toPath().resolve(StoreConstants.CONFIG_DIRECTORY_NAME);
|
||||||
|
Path oldRepositoriesFile = configDir.resolve("repositories.xml");
|
||||||
|
Path backupFile = configDir.resolve("repositories.xml.v1.backup");
|
||||||
|
LOG.info("moving old repositories database files to backup file {}", backupFile);
|
||||||
|
try {
|
||||||
|
Files.move(oldRepositoriesFile, backupFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new UpdateException("could not backup old repository database file", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void update(V1Repository v1Repository) {
|
private void update(V1Repository v1Repository) {
|
||||||
Path destination = handleDataDirectory(v1Repository);
|
Path destination = handleDataDirectory(v1Repository);
|
||||||
Repository repository = new Repository(
|
Repository repository = new Repository(
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import org.junit.jupiter.api.extension.ExtendWith;
|
|||||||
import org.junitpioneer.jupiter.TempDirectory;
|
import org.junitpioneer.jupiter.TempDirectory;
|
||||||
import org.mockito.ArgumentCaptor;
|
import org.mockito.ArgumentCaptor;
|
||||||
import org.mockito.Captor;
|
import org.mockito.Captor;
|
||||||
import org.mockito.InjectMocks;
|
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.junit.jupiter.MockitoExtension;
|
import org.mockito.junit.jupiter.MockitoExtension;
|
||||||
import sonia.scm.SCMContextProvider;
|
import sonia.scm.SCMContextProvider;
|
||||||
@@ -190,10 +189,18 @@ class XmlRepositoryV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldFailForMissingMigrationStrategy() throws JAXBException {
|
void shouldFailForMissingMigrationStrategy() {
|
||||||
lenient().when(migrationStrategyDao.get("c1597b4f-a9f0-49f7-ad1f-37d3aae1c55f")).thenReturn(empty());
|
lenient().when(migrationStrategyDao.get("c1597b4f-a9f0-49f7-ad1f-37d3aae1c55f")).thenReturn(empty());
|
||||||
assertThrows(IllegalStateException.class, () -> updateStep.doUpdate());
|
assertThrows(IllegalStateException.class, () -> updateStep.doUpdate());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldBackupOldRepositoryDatabaseFile(@TempDirectory.TempDir Path tempDir) throws JAXBException {
|
||||||
|
updateStep.doUpdate();
|
||||||
|
|
||||||
|
assertThat(tempDir.resolve("config").resolve("repositories.xml")).doesNotExist();
|
||||||
|
assertThat(tempDir.resolve("config").resolve("repositories.xml.v1.backup")).exists();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -202,12 +209,27 @@ class XmlRepositoryV1UpdateStepTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void shouldNotFailIfFormerV1DatabaseExists(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
|
void shouldNotFailIfFormerV2DatabaseExists(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
|
||||||
|
createFormerV2RepositoriesFile(tempDir);
|
||||||
|
|
||||||
|
updateStep.doUpdate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldNotBackupFormerV2DatabaseFile(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
|
||||||
|
createFormerV2RepositoriesFile(tempDir);
|
||||||
|
|
||||||
|
updateStep.doUpdate();
|
||||||
|
|
||||||
|
assertThat(tempDir.resolve("config").resolve("repositories.xml")).exists();
|
||||||
|
assertThat(tempDir.resolve("config").resolve("repositories.xml.v1.backup")).doesNotExist();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void createFormerV2RepositoriesFile(@TempDirectory.TempDir Path tempDir) throws IOException {
|
||||||
URL url = Resources.getResource("sonia/scm/repository/update/formerV2RepositoryFile.xml");
|
URL url = Resources.getResource("sonia/scm/repository/update/formerV2RepositoryFile.xml");
|
||||||
Path configDir = tempDir.resolve("config");
|
Path configDir = tempDir.resolve("config");
|
||||||
Files.createDirectories(configDir);
|
Files.createDirectories(configDir);
|
||||||
Files.copy(url.openStream(), configDir.resolve("repositories.xml"));
|
Files.copy(url.openStream(), configDir.resolve("repositories.xml"));
|
||||||
updateStep.doUpdate();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<Repository> findByNamespace(String namespace) {
|
private Optional<Repository> findByNamespace(String namespace) {
|
||||||
|
|||||||
Reference in New Issue
Block a user