From b465e4b18bc20cbecdd87c518a6086152a451414 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 13 Sep 2014 20:07:07 +0200 Subject: [PATCH] introduce scm version to be sure the plugin is for the correct scm-manager major version --- .../main/java/sonia/scm/plugin/Plugin.java | 29 +++++++++++++++---- .../main/resources/META-INF/scm/plugin.xml | 2 ++ .../main/resources/META-INF/scm/plugin.xml | 2 ++ .../main/resources/META-INF/scm/plugin.xml | 2 ++ .../main/resources/META-INF/scm/plugin.xml | 2 ++ .../java/sonia/scm/plugin/PluginTree.java | 17 ++++++++++- .../sonia/scm/plugin/ExplodedSmpTest.java | 3 +- .../java/sonia/scm/plugin/PluginTreeTest.java | 22 ++++++++++++-- 8 files changed, 69 insertions(+), 10 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/plugin/Plugin.java b/scm-core/src/main/java/sonia/scm/plugin/Plugin.java index 7c52d47f19..d55555e747 100644 --- a/scm-core/src/main/java/sonia/scm/plugin/Plugin.java +++ b/scm-core/src/main/java/sonia/scm/plugin/Plugin.java @@ -67,16 +67,18 @@ public final class Plugin extends ScmModule * Constructs ... * * + * @param scmVersion * @param information * @param resources * @param condition * @param childFirstClassLoader * @param dependencies */ - public Plugin(PluginInformation information, PluginResources resources, - PluginCondition condition, boolean childFirstClassLoader, - Set dependencies) + public Plugin(int scmVersion, PluginInformation information, + PluginResources resources, PluginCondition condition, + boolean childFirstClassLoader, Set dependencies) { + this.scmVersion = scmVersion; this.information = information; this.resources = resources; this.condition = condition; @@ -109,7 +111,8 @@ public final class Plugin extends ScmModule final Plugin other = (Plugin) obj; - return Objects.equal(condition, other.condition) + return Objects.equal(scmVersion, other.scmVersion) + && Objects.equal(condition, other.condition) && Objects.equal(information, other.information) && Objects.equal(resources, other.resources) && Objects.equal(childFirstClassLoader, other.childFirstClassLoader) @@ -125,7 +128,7 @@ public final class Plugin extends ScmModule @Override public int hashCode() { - return Objects.hashCode(condition, information, resources, + return Objects.hashCode(scmVersion, condition, information, resources, childFirstClassLoader, dependencies); } @@ -140,6 +143,7 @@ public final class Plugin extends ScmModule { //J- return Objects.toStringHelper(this) + .add("scmVersion", scmVersion) .add("condition", condition) .add("information", information) .add("resources", resources) @@ -202,6 +206,17 @@ public final class Plugin extends ScmModule return resources; } + /** + * Method description + * + * + * @return + */ + public int getScmVersion() + { + return scmVersion; + } + /** * Method description * @@ -233,4 +248,8 @@ public final class Plugin extends ScmModule /** Field description */ private PluginResources resources; + + /** Field description */ + @XmlElement(name = "scm-version") + private int scmVersion = 1; } diff --git a/scm-maven-plugins/scm-plugin-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/scm/plugin.xml b/scm-maven-plugins/scm-plugin-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/scm/plugin.xml index efae4e8c99..19e5931f3e 100644 --- a/scm-maven-plugins/scm-plugin-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/scm/plugin.xml +++ b/scm-maven-plugins/scm-plugin-archetype/src/main/resources/archetype-resources/src/main/resources/META-INF/scm/plugin.xml @@ -33,6 +33,8 @@ --> + + 2 + + 2 Sebastian Sdorra diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml b/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml index 1a13de8c1a..4137d8dfb5 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml +++ b/scm-plugins/scm-hg-plugin/src/main/resources/META-INF/scm/plugin.xml @@ -41,6 +41,8 @@ --> + + 2 Sebastian Sdorra diff --git a/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml b/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml index a3716c5e3e..8d58d2d7ab 100644 --- a/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml +++ b/scm-plugins/scm-svn-plugin/src/main/resources/META-INF/scm/plugin.xml @@ -41,6 +41,8 @@ --> + + 2 Sebastian Sdorra diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java index e44076e65f..9757fa2513 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java @@ -52,6 +52,9 @@ import java.util.Set; public final class PluginTree { + /** Field description */ + private static final int SCM_VERSION = 2; + /** * the logger for PluginTree */ @@ -84,6 +87,19 @@ public final class PluginTree for (ExplodedSmp smp : smpOrdered) { Plugin plugin = smp.getPlugin(); + + if (plugin.getScmVersion() != SCM_VERSION) + { + //J- + throw new PluginException( + String.format( + "scm version %s of plugin %s does not match, required is version %s", + plugin.getScmVersion(), plugin.getInformation().getId(), SCM_VERSION + ) + ); + //J+ + } + PluginCondition condition = plugin.getCondition(); if ((condition == null) || condition.isSupported()) @@ -202,7 +218,6 @@ public final class PluginTree return found; } - //~--- fields --------------------------------------------------------------- /** Field description */ diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java index 952f7c7195..b7bde65677 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/ExplodedSmpTest.java @@ -135,7 +135,8 @@ public class ExplodedSmpTest info.setArtifactId(artifactId); info.setVersion(version); - Plugin plugin = new Plugin(info, null, null, false, Sets.newSet(dependencies)); + Plugin plugin = new Plugin(2, info, null, null, false, + Sets.newSet(dependencies)); return new ExplodedSmp(null, plugin); } diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java index a94a41a10e..06d6c1732c 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java @@ -71,7 +71,7 @@ public class PluginTreeTest { PluginCondition condition = new PluginCondition("999", new ArrayList(), "hit"); - Plugin plugin = new Plugin(createInfo("a", "b", "1"), null, condition, + Plugin plugin = new Plugin(2, createInfo("a", "b", "1"), null, condition, false, null); ExplodedSmp smp = createSmp(plugin); @@ -105,6 +105,22 @@ public class PluginTreeTest assertThat(nodes, containsInAnyOrder("a:a", "b:b", "c:c")); } + /** + * Method description + * + * + * @throws IOException + */ + @Test(expected = PluginException.class) + public void testScmVersion() throws IOException + { + Plugin plugin = new Plugin(1, createInfo("a", "b", "1"), null, null, false, + null); + ExplodedSmp smp = createSmp(plugin); + + new PluginTree(smp).getRootNodes(); + } + /** * Method description * @@ -185,7 +201,7 @@ public class PluginTreeTest */ private ExplodedSmp createSmp(String name) throws IOException { - return createSmp(new Plugin(createInfo(name, name, "1.0.0"), null, null, + return createSmp(new Plugin(2, createInfo(name, name, "1.0.0"), null, null, false, null)); } @@ -211,7 +227,7 @@ public class PluginTreeTest dependencySet.add(d.concat(":").concat(d)); } - Plugin plugin = new Plugin(createInfo(name, name, "1"), null, null, + Plugin plugin = new Plugin(2, createInfo(name, name, "1"), null, null, false, dependencySet); return createSmp(plugin);