From 845f0688f78b50fb3d9dcdbe72e4006aa1373347 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 28 Jan 2021 14:35:45 +0100 Subject: [PATCH] Use proper repository file extension on import/export with metadata --- .../scm/importexport/FullScmRepositoryExporter.java | 6 +++++- .../scm/importexport/FullScmRepositoryImporter.java | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java index 6b148f108f..b2beb5a983 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryExporter.java @@ -113,7 +113,7 @@ public class FullScmRepositoryExporter { try (FileOutputStream repositoryFos = new FileOutputStream(repositoryFile)) { service.getBundleCommand().bundle(repositoryFos); } - TarArchiveEntry entry = new TarArchiveEntry(service.getRepository().getName() + ".dump"); + TarArchiveEntry entry = new TarArchiveEntry(createRepositoryEntryName(service)); entry.setSize(repositoryFile.length()); taos.putArchiveEntry(entry); Files.copy(repositoryFile.toPath(), taos); @@ -123,6 +123,10 @@ public class FullScmRepositoryExporter { } } + private String createRepositoryEntryName(RepositoryService service) { + return String.format("%s.%s", service.getRepository().getName(), service.getBundleCommand().getFileExtension()); + } + private void writeStoreData(Repository repository, TarArchiveOutputStream taos) throws IOException { File newWorkdir = workdirProvider.createNewWorkdir(repository.getId()); try { diff --git a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java index 743521c143..392a0308f9 100644 --- a/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java +++ b/scm-webapp/src/main/java/sonia/scm/importexport/FullScmRepositoryImporter.java @@ -109,7 +109,8 @@ public class FullScmRepositoryImporter { private Repository importRepositoryFromFile(Repository repository, TarArchiveInputStream tais) throws IOException { ArchiveEntry repositoryEntry = tais.getNextEntry(); - if (repositoryEntry.getName().endsWith(".dump") && !repositoryEntry.isDirectory()) { + String repositoryEntryFileExtension = resolveFileExtensionForRepository(repository); + if (repositoryEntry.getName().endsWith(repositoryEntryFileExtension) && !repositoryEntry.isDirectory()) { return repositoryManager.create(repository, repo -> { try (RepositoryService service = serviceFactory.create(repo)) { service.getUnbundleCommand().unbundle(new NoneClosingInputStream(tais)); @@ -129,6 +130,12 @@ public class FullScmRepositoryImporter { } } + private String resolveFileExtensionForRepository(Repository repository) { + try (RepositoryService repoService = serviceFactory.create(repository)) { + return "." + repoService.getBundleCommand().getFileExtension(); + } + } + private void checkScmEnvironment(Repository repository, TarArchiveInputStream tais) throws IOException { ArchiveEntry environmentEntry = tais.getNextEntry(); if (environmentEntry.getName().equals(SCM_ENVIRONMENT_FILE_NAME) && !environmentEntry.isDirectory() && environmentEntry.getSize() < _1_MB) {