Merge branch 'master' of github.com:apache/sling-whiteboard
diff --git a/feature-model-compare/compare.groovy b/feature-model-compare/compare.groovy
new file mode 100755
index 0000000..923e1eb
--- /dev/null
+++ b/feature-model-compare/compare.groovy
@@ -0,0 +1,57 @@
+#!/usr/bin/env groovy
+
+@Grab("org.apache.sling:org.apache.sling.feature:1.2.10")
+@Grab("org.apache.johnzon:johnzon-core:1.2.3")
+@Grab("org.apache.sling:org.apache.sling.commons.johnzon:1.2.2")
+@Grab("org.apache.felix:org.apache.felix.cm.json:1.0.2")
+@Grab("org.osgi:org.osgi.util.function:1.0.0")
+@Grab("org.apache.felix:org.apache.felix.converter:1.0.14")
+@Grab("org.apache.sling:org.apache.sling.feature.diff:0.0.6")
+@Grab("org.osgi:osgi.core:6.0.0")
+
+import org.apache.sling.feature.ArtifactId
+import org.apache.sling.feature.Feature
+import org.apache.sling.feature.diff.DiffRequest
+
+import java.io.FileReader
+import java.io.PrintWriter
+import java.io.Reader
+
+import static org.apache.sling.feature.io.json.FeatureJSONReader.read
+import static org.apache.sling.feature.diff.FeatureDiff.compareFeatures
+import static org.apache.sling.feature.io.json.FeatureJSONWriter.write
+
+Feature loadFeature(String jsonFile, String classifierSuffix) {
+ println "Loading feature from '${jsonFile}'"
+ File file = new File(jsonFile)
+ Feature feature = null
+ try(Reader reader = new FileReader(file)) {
+ feature = read(reader, null)
+ println "Loaded feature: ${feature}"
+ }
+ ArtifactId newArtifactId = feature.getId().changeClassifier("${feature.getId().getClassifier()}_${classifierSuffix}")
+ feature = feature.copy(newArtifactId)
+ return feature
+}
+
+if (args.length != 2) {
+ println 'Usage ./compare.groovy feature-a.json feature-b.json'
+ System.exit(1)
+}
+
+Feature featureA = loadFeature(args[0], 'a')
+Feature featureB = loadFeature(args[1], 'b')
+
+DiffRequest diffRequest = new DiffRequest()
+ .setPrevious(featureA)
+ .setCurrent(featureB)
+
+Feature featureDiff = compareFeatures(diffRequest)
+
+String mvnPath = featureDiff.getId().toMvnPath()
+mvnPath = mvnPath.substring(mvnPath.lastIndexOf('/') + 1)
+println "Writing to: ${mvnPath}"
+
+try(Writer writer = new FileWriter(new File(mvnPath))) {
+ write(writer, featureDiff)
+}