Introduce osgi-uninstall
authorMathieu Baudier <mbaudier@argeo.org>
Tue, 23 May 2023 09:31:05 +0000 (11:31 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Tue, 23 May 2023 09:31:05 +0000 (11:31 +0200)
osgi.mk
src/org/argeo/build/Make.java

diff --git a/osgi.mk b/osgi.mk
index 8200ece27a07e65d713f05e8133d574d2ec70be4..7b92dd8c8c4f40a309241407a099776da53f0e7b 100644 (file)
--- a/osgi.mk
+++ b/osgi.mk
@@ -81,6 +81,11 @@ osgi-install:
         install --category $(A2_CATEGORY) --bundles $(BUNDLES) \
         --target $(DESTDIR)$(A2_INSTALL_TARGET)
 
+osgi-uninstall:
+       $(ARGEO_MAKE) \
+        uninstall --category $(A2_CATEGORY) --bundles $(BUNDLES) \
+        --target $(DESTDIR)$(A2_INSTALL_TARGET)
+
 # Javadoc generation
 javadoc: $(BUILD_BASE)/built
        $(JAVADOC) -noindex -quiet -Xmaxwarns 1 -d $(BUILD_BASE)/api --source-path $(subst $(space),$(pathsep),$(strip $(JAVADOC_SRCS))) -subpackages $(JAVADOC_PACKAGES)
index 741500602766d264d6d63272e84c4075daf5c50b..a9676f86d8ac05ccb6487c1e69cb77cb061f2ef7 100644 (file)
@@ -302,7 +302,7 @@ public class Make {
        }
 
        /** Install the bundles. */
-       void install(Map<String, List<String>> options) throws IOException {
+       void install(Map<String, List<String>> options, boolean uninstall) throws IOException {
                // check arguments
                List<String> bundles = options.get("--bundles");
                Objects.requireNonNull(bundles, "--bundles argument must be set");
@@ -320,7 +320,7 @@ public class Make {
                if (targetDirs.size() != 1)
                        throw new IllegalArgumentException("One and only one --target must be specified");
                Path targetA2 = Paths.get(targetDirs.get(0));
-               logger.log(INFO, "Installing to " + targetA2);
+               logger.log(INFO, (uninstall ? "Uninstalling from " : "Installing to ") + targetA2);
 
                final String branch;
                Path branchMk = sdkSrcBase.resolve(BRANCH_MK);
@@ -342,6 +342,7 @@ public class Make {
                String minor = properties.getProperty("minor");
                Objects.requireNonNull(minor, "'minor' must be set");
 
+               int count = 0;
                for (String bundle : bundles) {
                        Path bundlePath = Paths.get(bundle);
                        Path bundleParent = bundlePath.getParent();
@@ -349,10 +350,21 @@ public class Make {
                                        : a2Output.resolve(category);
                        Path jarP = a2JarDirectory.resolve(bundlePath.getFileName() + "." + major + "." + minor + ".jar");
 
-                       Path targetJarP = targetA2.resolve(a2JarDirectory.relativize(jarP));
-                       Files.createDirectories(targetJarP.getParent());
-                       Files.copy(jarP, targetJarP);
+                       Path targetJarP = targetA2.resolve(a2Output.relativize(jarP));
+                       if (uninstall) { // uninstall
+                               if (Files.exists(targetJarP)) {
+                                       Files.delete(targetJarP);
+                                       logger.log(DEBUG, "Removed " + targetJarP);
+                                       count++;
+                               }
+                       } else { // install
+                               Files.createDirectories(targetJarP.getParent());
+                               boolean update = Files.exists(targetJarP);
+                               Files.copy(jarP, targetJarP);
+                               logger.log(DEBUG, (update ? "Updated " : "Installed ") + targetJarP);
+                       }
                }
+               logger.log(INFO, uninstall ? count + " bundles removed" : count + " bundles installed or updated");
        }
 
        /** Package a single bundle. */
@@ -641,7 +653,8 @@ public class Make {
                        case "compile" -> argeoMake.compile(options);
                        case "bundle" -> argeoMake.bundle(options);
                        case "all" -> argeoMake.all(options);
-                       case "install" -> argeoMake.install(options);
+                       case "install" -> argeoMake.install(options, false);
+                       case "uninstall" -> argeoMake.install(options, true);
 
                        default -> throw new IllegalArgumentException("Unkown action: " + action);
                        }