diff --git a/src/main/java/com/diffplug/gradle/p2/P2Declarative.java b/src/main/java/com/diffplug/gradle/p2/P2Declarative.java index 37a37e3f1..83ae8b134 100644 --- a/src/main/java/com/diffplug/gradle/p2/P2Declarative.java +++ b/src/main/java/com/diffplug/gradle/p2/P2Declarative.java @@ -74,6 +74,10 @@ default void feature(String feature, String version) { getP2().addFeature(feature, version); } + default void slicingOption(String option, String value) { + getP2().addSlicingOption(option, value); + } + public static void populate(P2Model model, Action action) { action.execute(new P2Declarative() { @Override diff --git a/src/main/java/com/diffplug/gradle/p2/P2Model.java b/src/main/java/com/diffplug/gradle/p2/P2Model.java index b14992b51..97bc59718 100644 --- a/src/main/java/com/diffplug/gradle/p2/P2Model.java +++ b/src/main/java/com/diffplug/gradle/p2/P2Model.java @@ -18,12 +18,7 @@ import java.io.File; import java.io.Serializable; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Supplier; @@ -67,12 +62,14 @@ public void copyFrom(P2Model other) { repos.addAll(other.repos); metadataRepos.addAll(other.metadataRepos); artifactRepos.addAll(other.artifactRepos); + slicingOptions.putAll(other.slicingOptions); } private Set ius = new LinkedHashSet<>(); private Set repos = new LinkedHashSet<>(); private Set metadataRepos = new LinkedHashSet<>(); private Set artifactRepos = new LinkedHashSet<>(); + private Map slicingOptions = new HashMap<>(); /** Combines all fields for easy implementation of equals and hashCode. */ private final List content = Arrays.asList(ius, repos, metadataRepos, artifactRepos); @@ -165,6 +162,10 @@ public void addArtifactRepoBundlePool() { addArtifactRepo(GoomphCacheLocations.bundlePool()); } + public void addSlicingOption(String option, String value) { + slicingOptions.put(option, value); + } + /** * There are places where we add the local bundle pool * to act as an artifact cache. But sometimes, that cache @@ -257,6 +258,10 @@ public P2AntRunner mirrorApp(File dstFolder) { iuNode.attributes().put("version", iu.substring(slash + 1)); } } + + if (slicingOptions.size() > 0) { + slicingOptionsNode(taskNode); + } }); }); } @@ -278,6 +283,15 @@ private Node sourceNode(Node parent) { return source; } + /** Creates an XML node for slicingOptions. */ + private Node slicingOptionsNode(Node parent) { + Node slicingOptionsNode = new Node(parent, "slicingOptions"); + for (Map.Entry option : slicingOptions.entrySet()) { + slicingOptionsNode.attributes().put(option.getKey(), option.getValue()); + } + return slicingOptionsNode; + } + //////////////// // P2DIRECTOR // //////////////// diff --git a/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java b/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java index 70862df73..b8c589cbb 100644 --- a/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java +++ b/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java @@ -74,4 +74,33 @@ public void testMirrorAntFile() { ""); Assert.assertEquals(expected, actual); } + + @Test + public void testMirrorAntFileWithSlicingOptions() { + File dest = new File("dest"); + P2Model p2 = testData(); + p2.addSlicingOption("latestVersionOnly", "true"); + p2.addSlicingOption("platformfilter", "win32,win32,x86"); + p2.addSlicingOption("filter", "key=value"); + String actual = p2.mirrorApp(dest).completeState(); + String expected = StringPrinter.buildStringFromLines( + "### ARGS ###", + "-application org.eclipse.ant.core.antRunner", + "", + "### BUILD.XML ###", + "", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + ""); + Assert.assertEquals(expected, actual); + } }