Fix bundle version in fragment
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 14 Sep 2023 05:50:16 +0000 (07:50 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 14 Sep 2023 05:50:16 +0000 (07:50 +0200)
src/org/argeo/build/Make.java

index 4f22815f1d4cd5295c20823f309ebb3d080fc097..9ebbfd462f10c8f0052c065b0c19e871ba1cbdb8 100644 (file)
@@ -396,18 +396,18 @@ public class Make {
 
        /** Package a single bundle. */
        void createBundle(String branch, String bundle, String category) throws IOException {
-               final Path source;
+               final Path bundleSourceBase;
                if (!Files.exists(execDirectory.resolve(bundle))) {
                        logger.log(WARNING,
                                        "Bundle " + bundle + " not found in " + execDirectory + ", assuming this is this directory.");
-                       source = execDirectory;
+                       bundleSourceBase = execDirectory;
                } else {
-                       source = execDirectory.resolve(bundle);
+                       bundleSourceBase = execDirectory.resolve(bundle);
                }
-               Path srcP = source.resolve("src");
+               Path srcP = bundleSourceBase.resolve("src");
 
                Path compiled = buildBase.resolve(bundle);
-               String bundleSymbolicName = source.getFileName().toString();
+               String bundleSymbolicName = bundleSourceBase.getFileName().toString();
 
                // Metadata
                Properties properties = new Properties();
@@ -424,7 +424,7 @@ public class Make {
                                }
                }
 
-               Path bndBnd = source.resolve("bnd.bnd");
+               Path bndBnd = bundleSourceBase.resolve("bnd.bnd");
                if (Files.exists(bndBnd))
                        try (InputStream in = Files.newInputStream(bndBnd)) {
                                properties.load(in);
@@ -487,7 +487,7 @@ public class Make {
                        });
 
                        // add resources
-                       Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
+                       Files.walkFileTree(bundleSourceBase, new SimpleFileVisitor<Path>() {
                                @Override
                                public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
                                        // skip output directory if it happens to be within the sources
@@ -495,7 +495,7 @@ public class Make {
                                                return FileVisitResult.SKIP_SUBTREE;
 
                                        // skip excluded patterns
-                                       Path relativeP = source.relativize(dir);
+                                       Path relativeP = bundleSourceBase.relativize(dir);
                                        for (PathMatcher exclude : excludes)
                                                if (exclude.matches(relativeP))
                                                        return FileVisitResult.SKIP_SUBTREE;
@@ -505,7 +505,7 @@ public class Make {
 
                                @Override
                                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
-                                       Path relativeP = source.relativize(file);
+                                       Path relativeP = bundleSourceBase.relativize(file);
                                        for (PathMatcher exclude : excludes)
                                                if (exclude.matches(relativeP))
                                                        return FileVisitResult.CONTINUE;
@@ -553,7 +553,7 @@ public class Make {
                        }
 
                        // add legal notices and licenses
-                       for (Path p : listLegalFilesToInclude(source).values()) {
+                       for (Path p : listLegalFilesToInclude(bundleSourceBase).values()) {
                                jarOut.putNextEntry(new JarEntry(p.getFileName().toString()));
                                Files.copy(p, jarOut);
                        }
@@ -564,42 +564,48 @@ public class Make {
                                        : a2srcOutput.resolve(category);
                        Files.createDirectories(a2srcJarDirectory);
                        Path srcJarP = a2srcJarDirectory.resolve(compiled.getFileName() + "." + major + "." + minor + ".src.jar");
-                       Manifest srcManifest = new Manifest();
-                       srcManifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
-                       srcManifest.getMainAttributes().putValue("Bundle-SymbolicName", bundleSymbolicName + ".src");
-                       srcManifest.getMainAttributes().putValue("Bundle-Version",
-                                       manifest.getMainAttributes().getValue("Bundle-Version").toString());
-
-                       boolean isJsBundle = bundleSymbolicName.endsWith(".js");
-                       if (!isJsBundle) {
-                               srcManifest.getMainAttributes().putValue("Eclipse-SourceBundle",
-                                               bundleSymbolicName + ";version=\"" + manifest.getMainAttributes().getValue("Bundle-Version"));
-
-                               try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) {
-                                       copySourcesToJar(srcP, srcJarOut, "");
-                                       // add legal notices and licenses
-                                       for (Path p : listLegalFilesToInclude(source).values()) {
-                                               srcJarOut.putNextEntry(new JarEntry(p.getFileName().toString()));
-                                               Files.copy(p, srcJarOut);
-                                       }
+                       createSourceBundle(bundleSymbolicName, manifest, bundleSourceBase, srcP, srcJarP);
+               }
+       }
+
+       /** Create a separate bundle containing the sources. */
+       void createSourceBundle(String bundleSymbolicName, Manifest manifest, Path bundleSourceBase, Path srcP,
+                       Path srcJarP) throws IOException {
+               Manifest srcManifest = new Manifest();
+               srcManifest.getMainAttributes().put(Attributes.Name.MANIFEST_VERSION, "1.0");
+               srcManifest.getMainAttributes().putValue("Bundle-SymbolicName", bundleSymbolicName + ".src");
+               srcManifest.getMainAttributes().putValue("Bundle-Version",
+                               manifest.getMainAttributes().getValue("Bundle-Version").toString());
+
+               boolean isJsBundle = bundleSymbolicName.endsWith(".js");
+               if (!isJsBundle) {
+                       srcManifest.getMainAttributes().putValue("Eclipse-SourceBundle",
+                                       bundleSymbolicName + ";version=\"" + manifest.getMainAttributes().getValue("Bundle-Version"));
+
+                       try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) {
+                               copySourcesToJar(srcP, srcJarOut, "");
+                               // add legal notices and licenses
+                               for (Path p : listLegalFilesToInclude(bundleSourceBase).values()) {
+                                       srcJarOut.putNextEntry(new JarEntry(p.getFileName().toString()));
+                                       Files.copy(p, srcJarOut);
                                }
-                       } else {// JavaScript source maps
-                               srcManifest.getMainAttributes().putValue("Fragment-Host",
-                                               bundleSymbolicName + ";version=\"" + manifest.getMainAttributes().getValue("Bundle-Version"));
-                               try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) {
-                                       Files.walkFileTree(source, new SimpleFileVisitor<Path>() {
-                                               @Override
-                                               public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
-                                                       Path relativeP = source.relativize(file);
-                                                       if (!file.getFileName().toString().endsWith(".map"))
-                                                               return FileVisitResult.CONTINUE;
-                                                       JarEntry entry = new JarEntry(relativeP.toString());
-                                                       srcJarOut.putNextEntry(entry);
-                                                       Files.copy(file, srcJarOut);
+                       }
+               } else {// JavaScript source maps
+                       srcManifest.getMainAttributes().putValue("Fragment-Host", bundleSymbolicName + ";bundle-version=\""
+                                       + manifest.getMainAttributes().getValue("Bundle-Version"));
+                       try (JarOutputStream srcJarOut = new JarOutputStream(Files.newOutputStream(srcJarP), srcManifest)) {
+                               Files.walkFileTree(bundleSourceBase, new SimpleFileVisitor<Path>() {
+                                       @Override
+                                       public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
+                                               Path relativeP = bundleSourceBase.relativize(file);
+                                               if (!file.getFileName().toString().endsWith(".map"))
                                                        return FileVisitResult.CONTINUE;
-                                               }
-                                       });
-                               }
+                                               JarEntry entry = new JarEntry(relativeP.toString());
+                                               srcJarOut.putNextEntry(entry);
+                                               Files.copy(file, srcJarOut);
+                                               return FileVisitResult.CONTINUE;
+                                       }
+                               });
                        }
                }
        }