Fix uninstall of repackaged jars
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 6 Mar 2024 10:54:54 +0000 (11:54 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 6 Mar 2024 10:54:54 +0000 (11:54 +0100)
src/org/argeo/build/Make.java

index 71976c00188d70cdff9125efb6912865fcf610f2..9f6f0846d1a6447c7664bb04ad66db3f5451a482 100644 (file)
@@ -378,7 +378,10 @@ public class Make {
                                        count++;
                                }
                                Path targetParent = targetJarP.getParent();
-                               deleteEmptyParents(targetA2, targetParent);
+                               if (targetParent.startsWith(targetA2))
+                                       deleteEmptyParents(targetA2, targetParent);
+                               if (targetParent.startsWith(nativeTargetA2))
+                                       deleteEmptyParents(nativeTargetA2, targetParent);
                        } else { // install
                                Files.createDirectories(targetJarP.getParent());
                                boolean update = Files.exists(targetJarP);
@@ -411,16 +414,16 @@ public class Make {
                return values != null ? values : new ArrayList<>();
        }
 
-       /** Delete empty parent directory up to the A2 target (included). */
-       void deleteEmptyParents(Path targetA2, Path targetParent) throws IOException {
+       /** Delete empty parent directory up to the base directory (included). */
+       void deleteEmptyParents(Path baseDir, Path targetParent) throws IOException {
                if (!Files.isDirectory(targetParent))
                        throw new IllegalArgumentException(targetParent + " must be a directory");
-               boolean isA2target = Files.isSameFile(targetA2, targetParent);
+               boolean isA2target = Files.isSameFile(baseDir, targetParent);
                if (!Files.list(targetParent).iterator().hasNext()) {
                        Files.delete(targetParent);
                        if (isA2target)
                                return;// stop after deleting A2 base
-                       deleteEmptyParents(targetA2, targetParent.getParent());
+                       deleteEmptyParents(baseDir, targetParent.getParent());
                }
        }