X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=src%2Forg%2Fargeo%2Fbuild%2FMake.java;h=798e1ea8627758a5a6ba1ff08ed74e14f405e255;hb=1e3a99635cbb59a71fd894f68478b69c882249b2;hp=33291b20ba05289043ba7aab26ede874ba6391a3;hpb=50cbbacad0b4d43a7bc7e65bb75ffc7d3266e3ef;p=cc0%2Fargeo-build.git diff --git a/src/org/argeo/build/Make.java b/src/org/argeo/build/Make.java index 33291b2..798e1ea 100644 --- a/src/org/argeo/build/Make.java +++ b/src/org/argeo/build/Make.java @@ -20,6 +20,7 @@ import java.nio.file.Path; import java.nio.file.PathMatcher; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; +import java.nio.file.StandardCopyOption; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Arrays; @@ -354,16 +355,15 @@ public class Make { if (uninstall) { // uninstall if (Files.exists(targetJarP)) { Files.delete(targetJarP); - Path targetParent = targetJarP.getParent(); - if (!Files.list(targetParent).iterator().hasNext()) - Files.delete(targetParent); logger.log(DEBUG, "Removed " + targetJarP); count++; } + Path targetParent = targetJarP.getParent(); + deleteEmptyParents(targetA2, targetParent); } else { // install Files.createDirectories(targetJarP.getParent()); boolean update = Files.exists(targetJarP); - Files.copy(jarP, targetJarP); + Files.copy(jarP, targetJarP, StandardCopyOption.REPLACE_EXISTING); logger.log(DEBUG, (update ? "Updated " : "Installed ") + targetJarP); count++; } @@ -371,6 +371,19 @@ public class Make { logger.log(INFO, uninstall ? count + " bundles removed" : count + " bundles installed or updated"); } + /** Delete empty parent directory up to the A2 target (included). */ + void deleteEmptyParents(Path targetA2, Path targetParent) throws IOException { + if (!Files.isDirectory(targetParent)) + throw new IllegalArgumentException(targetParent + " must be a directory"); + boolean isA2target = Files.isSameFile(targetA2, targetParent); + if (!Files.list(targetParent).iterator().hasNext()) { + Files.delete(targetParent); + if (isA2target) + return;// stop after deleting A2 base + deleteEmptyParents(targetA2, targetParent.getParent()); + } + } + /** Package a single bundle. */ void createBundle(String branch, String bundle, String category) throws IOException { final Path source;