You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by si...@apache.org on 2019/09/17 12:54:22 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: SLING-8716 - [cp2fm] content-packages have to be handled under /apps/*/install/* path

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

simonetripodi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git


The following commit(s) were added to refs/heads/master by this push:
     new 25b43e9  SLING-8716 - [cp2fm] content-packages have to be handled under /apps/*/install/* path
25b43e9 is described below

commit 25b43e9f53250dc9e038018cdc945d0dd26b8f5b
Author: Simo Tripodi <st...@adobe.com>
AuthorDate: Tue Sep 17 14:54:12 2019 +0200

    SLING-8716 - [cp2fm] content-packages have to be handled under
    /apps/*/install/* path
---
 .../ContentPackage2FeatureModelConverter.java      |  9 ++++----
 .../handlers/AbstractContentPackageHandler.java    | 25 +++++++++++++++++++---
 .../handlers/ContentPackageEntryHandler.java       |  4 ++--
 .../VersionResolverContentPackageEntryHandler.java |  2 +-
 .../ContentPackage2FeatureModelConverterTest.java  |  2 +-
 .../handlers/ContentPackageEntryHandlerTest.java   |  6 ++++++
 6 files changed, 37 insertions(+), 11 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 df52819..48a4ca7 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -219,7 +219,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
 
                 // deploy the new zip content-package to the local mvn bundles dir
 
-                processContentPackageArchive(contentPackageArchive, mvnPackageId, vaultPackage.getId());
+                processContentPackageArchive(contentPackageArchive, null, mvnPackageId, vaultPackage.getId());
 
                 // finally serialize the Feature Model(s) file(s)
 
@@ -267,7 +267,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
         idPackageMapping.remove(pack.getId());
     }
 
-    public void processSubPackage(String path, VaultPackage vaultPackage) throws Exception {
+    public void processSubPackage(String path, String runMode, VaultPackage vaultPackage) throws Exception {
         requireNonNull(path, "Impossible to process a null vault package");
         requireNonNull(vaultPackage, "Impossible to process a null vault package");
 
@@ -296,7 +296,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, mvnPackageId, originalPackageId);
+        processContentPackageArchive(contentPackageArchive, runMode, mvnPackageId, originalPackageId);
 
         // restore the previous assembler
         mainPackageAssembler = handler;
@@ -305,6 +305,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
     }
 
     private void processContentPackageArchive(File contentPackageArchive,
+                                              String runMode,
                                               ArtifactId mvnPackageId,
                                               PackageId originalPackageId) throws Exception {
         try (VaultPackage vaultPackage = open(contentPackageArchive)) {
@@ -323,7 +324,7 @@ public class ContentPackage2FeatureModelConverter extends BaseVaultPackageScanne
             if (PackageType.CONTENT != packageType || !dropContent) {
                 // deploy the new content-package to the local mvn bundles dir and attach it to the feature
                 artifactsDeployer.deploy(new FileArtifactWriter(contentPackageArchive), mvnPackageId);
-                featuresManager.addArtifact(null, mvnPackageId);
+                featuresManager.addArtifact(runMode, mvnPackageId);
             } else {
                 mutableContentsIds.put(originalPackageId, getDependencies(vaultPackage));
                 logger.info("Dropping package of PackageType.CONTENT {} (content-package id: {})",
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java
index 60fc01c..4853fd2 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractContentPackageHandler.java
@@ -20,12 +20,14 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.regex.Matcher;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
+import org.codehaus.plexus.util.StringUtils;
 
 public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHandler {
 
@@ -34,7 +36,7 @@ public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHa
     private final File temporaryDir = new File(System.getProperty("java.io.tmpdir"), "sub-content-packages");
 
     public AbstractContentPackageHandler() {
-        super("/jcr_root/etc/packages/.+\\.zip");
+        super("/jcr_root/(?:etc/packages|apps/.+/install(?:\\.([^/]+))?)/.+.zip");
         temporaryDir.mkdirs();
     }
 
@@ -66,13 +68,30 @@ public abstract class AbstractContentPackageHandler extends AbstractRegexEntryHa
             logger.debug("Sub-content package '{}' successfully extracted to {} ", entry.getName(), temporaryContentPackage);
         }
 
+        Matcher matcher = getPattern().matcher(path);
+        String runMode = null;
+        // we are pretty sure it matches, here
+        if (!matcher.matches()) {
+            throw new IllegalStateException("Something went terribly wrong: pattern '"
+                                            + getPattern().pattern()
+                                            + "' should have matched already with path '"
+                                            + path
+                                            + "' but it does not, currently");
+        }
+
+        if (StringUtils.isNotBlank(matcher.group(1))) {
+            // there is a specified RunMode
+            runMode = matcher.group(1);
+            logger.debug("Runmode {} was extracted from path {}", runMode, path);
+        }
+
         try (VaultPackage vaultPackage = converter.open(temporaryContentPackage)) {
-            processSubPackage(path, vaultPackage, converter);
+            processSubPackage(path, runMode, vaultPackage, converter);
         }
 
         logger.info("Sub-content package '{}' processing is over", entry.getName());
     }
 
-    protected abstract void processSubPackage(String path, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter) throws Exception;
+    protected abstract void processSubPackage(String path, String runMode, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter) throws Exception;
 
 }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java
index 2fde1a0..573d01b 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandler.java
@@ -22,9 +22,9 @@ import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter
 public final class ContentPackageEntryHandler extends AbstractContentPackageHandler {
 
     @Override
-    protected void processSubPackage(String path, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter)
+    protected void processSubPackage(String path, String runMode, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter)
             throws Exception {
-        converter.processSubPackage(path, contentPackage);
+        converter.processSubPackage(path, runMode, contentPackage);
     }
 
 }
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java
index dc55464..e4e9a8e 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/VersionResolverContentPackageEntryHandler.java
@@ -39,7 +39,7 @@ public final class VersionResolverContentPackageEntryHandler extends AbstractCon
     }
 
     @Override
-    protected void processSubPackage(String path, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter)
+    protected void processSubPackage(String path, String runMode, VaultPackage contentPackage, ContentPackage2FeatureModelConverter converter)
             throws Exception {
 
         boolean addPackage = false;
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
index f14a13e..7107947 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -121,7 +121,7 @@ public class ContentPackage2FeatureModelConverterTest {
 
     @Test(expected = NullPointerException.class)
     public void processRequiresNotNullPackage() throws Exception {
-        converter.processSubPackage("", null);
+        converter.processSubPackage("", null, null);
     }
 
     @Test
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandlerTest.java
index a8d60ca..c6b4699 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ContentPackageEntryHandlerTest.java
@@ -45,6 +45,12 @@ public final class ContentPackageEntryHandlerTest {
     @Test
     public void matches() {
         assertTrue(contentPackageEntryhandler.matches("/jcr_root/etc/packages/asd/v6/sample/asd.content-1.0.zip"));
+        assertTrue(contentPackageEntryhandler.matches("/jcr_root/apps/showcase/install/sample/asd.content-1.0.zip"));
+    }
+
+    @Test
+    public void runModeMatches() {
+        assertTrue(contentPackageEntryhandler.matches("/jcr_root/apps/showcase/install.staging/sample/asd.content-1.0.zip"));
     }
 
 }