From ab62b121d7d071e71c86ae1f7f2ebc53105be37f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 3 Jul 2019 08:16:08 +0200 Subject: [PATCH 1/4] Store repository id in svn config for each repository This is needed after migration from v1 to v2 and is done in SvnV1UpdateStep.java. --- .../sonia/scm/repository/SvnConfigHelper.java | 33 +++++++++++ .../scm/repository/SvnRepositoryHandler.java | 20 +------ .../sonia/scm/repository/SvnV1UpdateStep.java | 56 +++++++++++++++++++ 3 files changed, 91 insertions(+), 18 deletions(-) create mode 100644 scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfigHelper.java create mode 100644 scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfigHelper.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfigHelper.java new file mode 100644 index 0000000000..ab01393b29 --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnConfigHelper.java @@ -0,0 +1,33 @@ +package sonia.scm.repository; + +import sonia.scm.ContextEntry; +import sonia.scm.io.INIConfiguration; +import sonia.scm.io.INIConfigurationReader; +import sonia.scm.io.INIConfigurationWriter; +import sonia.scm.io.INISection; + +import java.io.File; +import java.io.IOException; + +class SvnConfigHelper { + + private static final String CONFIG_FILE_NAME = "scm-manager.conf"; + private static final String CONFIG_SECTION_SCMM = "scmm"; + private static final String CONFIG_KEY_REPOSITORY_ID = "repositoryid"; + + void writeRepositoryId(Repository repository, File directory) throws IOException { + INISection iniSection = new INISection(CONFIG_SECTION_SCMM); + iniSection.setParameter(CONFIG_KEY_REPOSITORY_ID, repository.getId()); + INIConfiguration iniConfiguration = new INIConfiguration(); + iniConfiguration.addSection(iniSection); + new INIConfigurationWriter().write(iniConfiguration, new File(directory, CONFIG_FILE_NAME)); + } + + String getRepositoryId(File directory) { + try { + return new INIConfigurationReader().read(new File(directory, CONFIG_FILE_NAME)).getSection(CONFIG_SECTION_SCMM).getParameter(CONFIG_KEY_REPOSITORY_ID); + } catch (IOException e) { + throw new InternalRepositoryException(ContextEntry.ContextBuilder.entity("Directory", directory.toString()), "could not read scm configuration file", e); + } + } +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java index c32310e7e7..f3be47e0c2 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnRepositoryHandler.java @@ -46,11 +46,6 @@ import org.tmatesoft.svn.core.internal.io.fs.FSRepositoryFactory; import org.tmatesoft.svn.core.io.SVNRepository; import org.tmatesoft.svn.core.io.SVNRepositoryFactory; import org.tmatesoft.svn.util.SVNDebugLog; -import sonia.scm.ContextEntry; -import sonia.scm.io.INIConfiguration; -import sonia.scm.io.INIConfigurationReader; -import sonia.scm.io.INIConfigurationWriter; -import sonia.scm.io.INISection; import sonia.scm.logging.SVNKitLogger; import sonia.scm.plugin.Extension; import sonia.scm.plugin.PluginLoader; @@ -87,9 +82,6 @@ public class SvnRepositoryHandler public static final RepositoryType TYPE = new RepositoryType(TYPE_NAME, TYPE_DISPLAYNAME, SvnRepositoryServiceProvider.COMMANDS); - private static final String CONFIG_FILE_NAME = "scm-manager.conf"; - private static final String CONFIG_SECTION_SCMM = "scmm"; - private static final String CONFIG_KEY_REPOSITORY_ID = "repositoryid"; private static final Logger logger = LoggerFactory.getLogger(SvnRepositoryHandler.class); @@ -223,18 +215,10 @@ public class SvnRepositoryHandler @Override protected void postCreate(Repository repository, File directory) throws IOException { - INISection iniSection = new INISection(CONFIG_SECTION_SCMM); - iniSection.setParameter(CONFIG_KEY_REPOSITORY_ID, repository.getId()); - INIConfiguration iniConfiguration = new INIConfiguration(); - iniConfiguration.addSection(iniSection); - new INIConfigurationWriter().write(iniConfiguration, new File(directory, CONFIG_FILE_NAME)); + new SvnConfigHelper().writeRepositoryId(repository, directory); } String getRepositoryId(File directory) { - try { - return new INIConfigurationReader().read(new File(directory, CONFIG_FILE_NAME)).getSection(CONFIG_SECTION_SCMM).getParameter(CONFIG_KEY_REPOSITORY_ID); - } catch (IOException e) { - throw new InternalRepositoryException(ContextEntry.ContextBuilder.entity("Directory", directory.toString()), "could not read scm configuration file", e); - } + return new SvnConfigHelper().getRepositoryId(directory); } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java new file mode 100644 index 0000000000..fe96a7e945 --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java @@ -0,0 +1,56 @@ +package sonia.scm.repository; + +import sonia.scm.migration.UpdateException; +import sonia.scm.migration.UpdateStep; +import sonia.scm.plugin.Extension; +import sonia.scm.update.UpdateStepRepositoryMetadataAccess; +import sonia.scm.version.Version; + +import javax.inject.Inject; +import java.io.IOException; +import java.nio.file.Path; + +import static sonia.scm.version.Version.parse; + +@Extension +public class SvnV1UpdateStep implements UpdateStep { + + private final RepositoryLocationResolver locationResolver; + private final UpdateStepRepositoryMetadataAccess repositoryMetadataAccess; + + @Inject + public SvnV1UpdateStep(RepositoryLocationResolver locationResolver, UpdateStepRepositoryMetadataAccess repositoryMetadataAccess) { + this.locationResolver = locationResolver; + this.repositoryMetadataAccess = repositoryMetadataAccess; + } + + @Override + public void doUpdate() { + locationResolver.forClass(Path.class).forAllLocations( + (repositoryId, path) -> { + Repository repository = repositoryMetadataAccess.read(path); + if (isSvnDirectory(repository)) { + try { + new SvnConfigHelper().writeRepositoryId(repository, path.toFile()); + } catch (IOException e) { + throw new UpdateException("could not update repository with id " + repositoryId + " in path " + path, e); + } + } + } + ); + } + + private boolean isSvnDirectory(Repository repository) { + return SvnRepositoryHandler.TYPE_NAME.equals(repository.getType()); + } + + @Override + public Version getTargetVersion() { + return parse("2.0.0"); + } + + @Override + public String getAffectedDataType() { + return "sonia.scm.plugin.svn"; + } +} From 61b51f0063cec3e030e4b8d84659e863196328e5 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 3 Jul 2019 13:06:11 +0200 Subject: [PATCH 2/4] Fix configuration path --- .../src/main/java/sonia/scm/repository/SvnV1UpdateStep.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java index fe96a7e945..2fadc4a6e1 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java @@ -31,7 +31,7 @@ public class SvnV1UpdateStep implements UpdateStep { Repository repository = repositoryMetadataAccess.read(path); if (isSvnDirectory(repository)) { try { - new SvnConfigHelper().writeRepositoryId(repository, path.toFile()); + new SvnConfigHelper().writeRepositoryId(repository, path.resolve(RepositoryDirectoryHandler.REPOSITORIES_NATIVE_DIRECTORY).toFile()); } catch (IOException e) { throw new UpdateException("could not update repository with id " + repositoryId + " in path " + path, e); } From 431902ff91f28002ec543dd602545050529cb7f5 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Wed, 3 Jul 2019 13:32:59 +0200 Subject: [PATCH 3/4] Rename classes --- .../update/{GitV1UpdateStep.java => GitV2UpdateStep.java} | 4 ++-- .../repository/{SvnV1UpdateStep.java => SvnV2UpdateStep.java} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/{GitV1UpdateStep.java => GitV2UpdateStep.java} (94%) rename scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/{SvnV1UpdateStep.java => SvnV2UpdateStep.java} (93%) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV1UpdateStep.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV2UpdateStep.java similarity index 94% rename from scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV1UpdateStep.java rename to scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV2UpdateStep.java index 7cab0765a7..afcde567e3 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV1UpdateStep.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/update/GitV2UpdateStep.java @@ -19,13 +19,13 @@ import java.nio.file.Path; import static sonia.scm.version.Version.parse; @Extension -public class GitV1UpdateStep implements UpdateStep { +public class GitV2UpdateStep implements UpdateStep { private final RepositoryLocationResolver locationResolver; private final UpdateStepRepositoryMetadataAccess repositoryMetadataAccess; @Inject - public GitV1UpdateStep(RepositoryLocationResolver locationResolver, UpdateStepRepositoryMetadataAccess repositoryMetadataAccess) { + public GitV2UpdateStep(RepositoryLocationResolver locationResolver, UpdateStepRepositoryMetadataAccess repositoryMetadataAccess) { this.locationResolver = locationResolver; this.repositoryMetadataAccess = repositoryMetadataAccess; } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV2UpdateStep.java similarity index 93% rename from scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java rename to scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV2UpdateStep.java index 2fadc4a6e1..2423040f60 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV1UpdateStep.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/repository/SvnV2UpdateStep.java @@ -13,13 +13,13 @@ import java.nio.file.Path; import static sonia.scm.version.Version.parse; @Extension -public class SvnV1UpdateStep implements UpdateStep { +public class SvnV2UpdateStep implements UpdateStep { private final RepositoryLocationResolver locationResolver; private final UpdateStepRepositoryMetadataAccess repositoryMetadataAccess; @Inject - public SvnV1UpdateStep(RepositoryLocationResolver locationResolver, UpdateStepRepositoryMetadataAccess repositoryMetadataAccess) { + public SvnV2UpdateStep(RepositoryLocationResolver locationResolver, UpdateStepRepositoryMetadataAccess repositoryMetadataAccess) { this.locationResolver = locationResolver; this.repositoryMetadataAccess = repositoryMetadataAccess; } From 2f58428d2cdf220af8797d00c80911f7ab21be8e Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Fri, 5 Jul 2019 06:28:10 +0000 Subject: [PATCH 4/4] Close branch bugfix/repoid_svn_migration