diff --git a/src/main/java/com/diffplug/gradle/p2/AsMavenGroupImpl.java b/src/main/java/com/diffplug/gradle/p2/AsMavenGroupImpl.java index e7cc730b9..e144d27e2 100644 --- a/src/main/java/com/diffplug/gradle/p2/AsMavenGroupImpl.java +++ b/src/main/java/com/diffplug/gradle/p2/AsMavenGroupImpl.java @@ -68,7 +68,6 @@ public void run() throws Exception { project.getLogger().lifecycle("p2AsMaven " + def.group + " is dirty."); } // else, we'll need to run our own little thing - FileMisc.cleanDir(dirP2()); FileMisc.cleanDir(dirP2Runnable()); FileMisc.cleanDir(dirMavenGroup()); diff --git a/src/main/java/com/diffplug/gradle/p2/AsMavenPlugin.java b/src/main/java/com/diffplug/gradle/p2/AsMavenPlugin.java index d338d68f5..e5c4ef397 100644 --- a/src/main/java/com/diffplug/gradle/p2/AsMavenPlugin.java +++ b/src/main/java/com/diffplug/gradle/p2/AsMavenPlugin.java @@ -133,6 +133,23 @@ * * You can see all the available slicing options [here](https://wiki.eclipse.org/Equinox/p2/Ant_Tasks#SlicingOptions). * + * ## Append option + * + * You can control whether iu's should be appended to destination repository + * true: already downloaded iu's are preserved, new iu's are downloaded into the existing repo + * false: Default value for goomph, repository will be completely cleared before download new iu's + * + * * ```groovy + * p2AsMaven { + * group 'eclipse-deps', { + * ... + * append true + * } + * } + * ``` + * + * More info [here]{https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fp2_repositorytasks.htm}. + * * ## Acknowledgements and comparisons to other options * * Inspired by Andrey Hihlovskiy's [unpuzzle](https://github.com/akhikhl/unpuzzle). diff --git a/src/main/java/com/diffplug/gradle/p2/P2Declarative.java b/src/main/java/com/diffplug/gradle/p2/P2Declarative.java index 83ae8b134..9063aeef7 100644 --- a/src/main/java/com/diffplug/gradle/p2/P2Declarative.java +++ b/src/main/java/com/diffplug/gradle/p2/P2Declarative.java @@ -78,6 +78,10 @@ default void slicingOption(String option, String value) { getP2().addSlicingOption(option, value); } + default void append(boolean append) { + getP2().setAppend(append); + } + 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 813375f4f..e188bf6e0 100644 --- a/src/main/java/com/diffplug/gradle/p2/P2Model.java +++ b/src/main/java/com/diffplug/gradle/p2/P2Model.java @@ -63,8 +63,10 @@ public void copyFrom(P2Model other) { metadataRepos.addAll(other.metadataRepos); artifactRepos.addAll(other.artifactRepos); slicingOptions.putAll(other.slicingOptions); + append = other.append; } + private boolean append = false; private Set ius = new LinkedHashSet<>(); private Set repos = new LinkedHashSet<>(); private Set metadataRepos = new LinkedHashSet<>(); @@ -105,6 +107,7 @@ public String toString() { add.accept("metadataRepo", metadataRepos); add.accept("artifactRepo", artifactRepos); add.accept("ius", ius); + printer.print("append: " + append); }); } @@ -167,6 +170,11 @@ public void addSlicingOption(String option, String value) { slicingOptions.put(option, value); } + /** https://help.eclipse.org/neon/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fp2_repositorytasks.htm **/ + public void setAppend(boolean append) { + this.append = append; + } + /** * There are places where we add the local bundle pool * to act as an artifact cache. But sometimes, that cache @@ -247,6 +255,7 @@ public P2AntRunner mirrorApp(File dstFolder) { sourceNode(taskNode); Node destination = new Node(taskNode, "destination"); destination.attributes().put("location", FileMisc.asUrl(dstFolder)); + destination.attributes().put("append", append); for (String iu : ius) { Node iuNode = new Node(taskNode, "iu"); diff --git a/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java b/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java index b8c589cbb..c75f56565 100644 --- a/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java +++ b/src/test/java/com/diffplug/gradle/p2/P2ModelTest.java @@ -67,7 +67,7 @@ public void testMirrorAntFile() { " ", " ", " ", - " ", + " ", " ", " ", " ", @@ -95,7 +95,7 @@ public void testMirrorAntFileWithSlicingOptions() { " ", " ", " ", - " ", + " ", " ", " ", " ", @@ -103,4 +103,55 @@ public void testMirrorAntFileWithSlicingOptions() { ""); Assert.assertEquals(expected, actual); } + + @Test + public void testMirrorAntFileWithAppend() { + File dest = new File("dest"); + P2Model p2 = testData(); + p2.setAppend(true); + String actual = p2.mirrorApp(dest).completeState(); + String expected = StringPrinter.buildStringFromLines( + "### ARGS ###", + "-application org.eclipse.ant.core.antRunner", + "", + "### BUILD.XML ###", + "", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + ""); + Assert.assertEquals(expected, actual); + } + + @Test + public void testMirrorAntFileWithAppendDefault() { + File dest = new File("dest"); + P2Model p2 = testData(); + String actual = p2.mirrorApp(dest).completeState(); + String expected = StringPrinter.buildStringFromLines( + "### ARGS ###", + "-application org.eclipse.ant.core.antRunner", + "", + "### BUILD.XML ###", + "", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + ""); + Assert.assertEquals(expected, actual); + } }