You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2021/05/28 16:09:46 UTC

[sling-org-apache-sling-feature-cpconverter] branch issues/SLING-10433 created (now 4bc010b)

This is an automated email from the ASF dual-hosted git repository.

pauls pushed a change to branch issues/SLING-10433
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git.


      at 4bc010b  SLING-10433: wait until we processed all packages with creating and deploying the final content packages so that we can remove all mutable content package dependencies.

This branch includes the following new commits:

     new 4bc010b  SLING-10433: wait until we processed all packages with creating and deploying the final content packages so that we can remove all mutable content package dependencies.

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[sling-org-apache-sling-feature-cpconverter] 01/01: SLING-10433: wait until we processed all packages with creating and deploying the final content packages so that we can remove all mutable content package dependencies.

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch issues/SLING-10433
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git

commit 4bc010b60fb5b144c125e11bbc010ceada4cbf65
Author: Karl Pauls <ka...@gmail.com>
AuthorDate: Fri May 28 18:09:33 2021 +0200

    SLING-10433: wait until we processed all packages with creating and deploying the final content packages so that we can remove all mutable content package dependencies.
---
 .../ContentPackage2FeatureModelConverter.java      | 51 +++++++++++++++-------
 .../cpconverter/handlers/BundleEntryHandler.java   |  3 +-
 .../cpconverter/vltpkg/VaultPackageAssembler.java  |  8 ++--
 .../BundleEntryHandleSlingInitialContentTest.java  |  3 +-
 4 files changed, 43 insertions(+), 22 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index 3c9f1a4..f907416 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -275,18 +275,13 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
                 logger.info("Converting content-package '{}'...", vaultPackage.getId());
 
                 traverse(vaultPackage);
-
-                // make sure
-
-                mainPackageAssembler.updateDependencies(mutableContentsIds);
-
                 // attach all unmatched resources as new content-package
 
                 File contentPackageArchive = mainPackageAssembler.createPackage();
 
                 // deploy the new zip content-package to the local mvn bundles dir
 
-                processContentPackageArchive(contentPackageArchive, null);
+                processContentPackageArchive(contentPackageArchive, mainPackageAssembler,null);
 
                 // finally serialize the Feature Model(s) file(s)
 
@@ -308,6 +303,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
             }
         }
 
+        deployPackages();
         mutableContentsIds.clear();
 
         emitters.stream().forEach(e -> e.end());
@@ -357,8 +353,6 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
 
         // scan the detected package, first
         traverse(vaultPackage);
-
-        clonedPackage.updateDependencies(mutableContentsIds);
         
         //set dependency to parent package if the parent package is an application package & subpackage is embedded
         if (isEmbeddedPackage && !isContainerPackage) {
@@ -371,7 +365,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
         File contentPackageArchive = clonedPackage.createPackage();
 
         // deploy the new content-package to the local mvn bundles dir and attach it to the feature
-        processContentPackageArchive(contentPackageArchive, runMode);
+        processContentPackageArchive(contentPackageArchive, clonedPackage, runMode);
 
         // restore the previous assembler
         mainPackageAssembler = handler;
@@ -379,7 +373,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
         emitters.stream().forEach(e -> e.endSubPackage());
     }
 
-    public void processContentPackageArchive(@NotNull File contentPackageArchive,
+    public void processContentPackageArchive(@NotNull File contentPackageArchive, @NotNull VaultPackageAssembler assembler,
                                              @Nullable String runMode) throws Exception {
         try (VaultPackage vaultPackage = open(contentPackageArchive)) {
             PackageType packageType = detectPackageType(vaultPackage);
@@ -413,15 +407,40 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
                                     mvnPackageId.getArtifactId(), vaultPackage.getId(), unreferencedArtifactsDeployer.getBaseDirectory());
                         break;
                     case REFERENCE:
-                        artifactsDeployer.deploy(new FileArtifactWriter(contentPackageArchive), mvnPackageId);
-                        featuresManager.addArtifact(runMode, mvnPackageId);
+                        deploy(assembler, mvnPackageId, runMode);
                 }
             } else {
-                // deploy the new content-package to the local mvn bundles dir
-                getArtifactsDeployer().deploy(new FileArtifactWriter(contentPackageArchive), mvnPackageId);
-                getFeaturesManager().addArtifact(runMode, mvnPackageId);
+                deploy(assembler, mvnPackageId, runMode);
+            }
+        }
+    }
+
+    public void deployPackages() throws Exception {
+        try {
+            deployTasks.forEach(Runnable::run);
+        } catch (RuntimeException ex) {
+            if (ex.getCause() instanceof Exception) {
+                throw (Exception) ex;
             }
+            throw ex;
         }
+        deployTasks.clear();
+    }
+
+    private List<Runnable> deployTasks = new ArrayList<>();
+
+    private void deploy(VaultPackageAssembler assembler, ArtifactId mvnPackageId, String runMode) {
+        getFeaturesManager().addArtifact(runMode, mvnPackageId);
+        deployTasks.add(() -> {
+            assembler.updateDependencies(mutableContentsIds);
+            try {
+                File finalContentPackageArchive = assembler.createPackage();
+                // deploy the new content-package to the local mvn bundles dir
+                getArtifactsDeployer().deploy(new FileArtifactWriter(finalContentPackageArchive), mvnPackageId);
+            } catch (Exception ex) {
+                throw new RuntimeException(ex);
+            }
+        });
     }
 
     protected boolean isSubContentPackageIncluded(@NotNull String path) {
@@ -483,7 +502,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
         if (version.endsWith(VaultPackageAssembler.VERSION_SUFFIX)) {
             version = version.substring(0, version.length() - VaultPackageAssembler.VERSION_SUFFIX.length());
         }
-        if (version == null || version.isEmpty()) {
+        if (version.isEmpty()) {
             version = DEFAULT_VERSION;
         }
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java
index 0075671..f0601b7 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandler.java
@@ -417,8 +417,7 @@ public final class BundleEntryHandler extends AbstractRegexEntryHandler {
     void finalizePackageAssembly(@NotNull Map<PackageType, VaultPackageAssembler> packageAssemblers, @NotNull ContentPackage2FeatureModelConverter converter, @Nullable String runMode) throws Exception {
         for (java.util.Map.Entry<PackageType, VaultPackageAssembler> entry : packageAssemblers.entrySet()) {
             File packageFile = entry.getValue().createPackage(false);
-            converter.processContentPackageArchive(packageFile, runMode);
-            Files.delete(packageFile.toPath());
+            converter.processContentPackageArchive(packageFile, entry.getValue(), runMode);
         }
     }
 
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
index 065f10b..6023bec 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssembler.java
@@ -123,9 +123,11 @@ public class VaultPackageAssembler implements EntryHandler {
             originalPackageProperties = originalPackageProperties.entrySet().stream().filter(new RemoveInstallHooksPredicate()).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
         }
         properties.putAll(originalPackageProperties);
-        properties.setProperty(PackageProperties.NAME_VERSION,
-                               vaultPackage.getId().getVersion().toString()
-                                                             + VERSION_SUFFIX);
+        String version = vaultPackage.getId().getVersion().toString();
+        if (!version.endsWith(VERSION_SUFFIX)) {
+            version += VERSION_SUFFIX;
+        }
+        properties.setProperty(PackageProperties.NAME_VERSION, version);
 
         Set<Dependency> dependencies = getDependencies(vaultPackage);
 
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java
index 77aaa70..dab710a 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java
@@ -65,6 +65,7 @@ public class BundleEntryHandleSlingInitialContentTest extends AbstractBundleEntr
         handler.setSlingInitialContentPolicy(SlingInitialContentPolicy.EXTRACT_AND_REMOVE);
         handler.handle("/jcr_root/apps/gav/install/io.wcm.handler.media-1.11.6.jar", archive, entry, converter);
 
+        converter.deployPackages();
         // verify generated bundle
         try (JarFile jarFile = new JarFile(new File(targetFolder, "io.wcm.handler.media-1.11.6-cp2fm-converted.jar"))) {
             String bundleVersion = jarFile.getManifest().getMainAttributes().getValue(Constants.BUNDLE_VERSION);
@@ -97,7 +98,7 @@ public class BundleEntryHandleSlingInitialContentTest extends AbstractBundleEntr
         handler.setSlingInitialContentPolicy(SlingInitialContentPolicy.EXTRACT_AND_REMOVE);
         handler.handle("/jcr_root/apps/gav/install/composum-nodes-config-2.5.3.jar", archive, entry, converter);
         // verify no additional content package created (as it only contains the configuration which should end up in the feature model only)
-        Mockito.verify(converter, Mockito.never()).processContentPackageArchive(Mockito.any(), Mockito.isNull());
+        Mockito.verify(converter, Mockito.never()).processContentPackageArchive(Mockito.any(), Mockito.any(), Mockito.isNull());
         // modified bundle
         Mockito.verify(featuresManager).addArtifact(null, ArtifactId.fromMvnId("com.composum.nodes:composum-nodes-config:2.5.3-cp2fm-converted"), null);
         // need to use ArgumentCaptur to properly compare string arrays