import static java.lang.System.Logger.Level.DEBUG;
import static java.lang.System.Logger.Level.ERROR;
import static java.lang.System.Logger.Level.INFO;
+import static java.lang.System.Logger.Level.TRACE;
import static java.lang.System.Logger.Level.WARNING;
import java.io.File;
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;
}
// sources
- for (String bundle : bundles) {
+ boolean atLeastOneBundleToCompile = false;
+ bundles: for (String bundle : bundles) {
StringBuilder sb = new StringBuilder();
Path bundlePath = execDirectory.resolve(bundle);
if (!Files.exists(bundlePath)) {
} else
throw new IllegalArgumentException("Bundle " + bundle + " not found in " + execDirectory);
}
- sb.append(bundlePath.resolve("src"));
+ Path bundleSrc = bundlePath.resolve("src");
+ if (!Files.exists(bundleSrc)) {
+ logger.log(TRACE, bundleSrc + " does not exist, skipping it, as this is not a Java bundle");
+ continue bundles;
+ }
+ sb.append(bundleSrc);
sb.append("[-d");
compilerArgs.add(sb.toString());
sb = new StringBuilder();
sb.append(buildBase.resolve(bundle).resolve("bin"));
sb.append("]");
compilerArgs.add(sb.toString());
+ atLeastOneBundleToCompile = true;
}
+ if (!atLeastOneBundleToCompile)
+ return;
+
if (logger.isLoggable(INFO))
compilerArgs.add("-time");
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++;
}
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;
// Add all resources from src/
Files.walkFileTree(srcP, new SimpleFileVisitor<Path>() {
+ @Override
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
+ // skip directories ending with .js
+ // TODO find something more robust?
+ if (dir.getFileName().toString().endsWith(".js"))
+ return FileVisitResult.SKIP_SUBTREE;
+ return super.preVisitDirectory(dir, attrs);
+ }
+
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
if (file.getFileName().toString().endsWith(".java")