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/03/29 15:03:59 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: SLING-8336 - [cp2fm] filter.xml files not properly merged

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 e5c3880  SLING-8336 - [cp2fm] filter.xml files not properly merged
e5c3880 is described below

commit e5c3880a879b701aad7513a99b9153645748fe00
Author: Simo Tripodi <st...@adobe.com>
AuthorDate: Fri Mar 29 16:03:52 2019 +0100

    SLING-8336 - [cp2fm] filter.xml files not properly merged
---
 .../ContentPackage2FeatureModelConverter.java      | 16 ++++-------
 .../cpconverter/vltpkg/VaultPackageAssembler.java  | 31 +++++++++++++++++++---
 .../ContentPackage2FeatureModelConverterTest.java  |  1 +
 3 files changed, 34 insertions(+), 14 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 32c0197..6fde8d4 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -21,16 +21,13 @@ import java.io.FileWriter;
 import java.util.Dictionary;
 import java.util.Enumeration;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Objects;
 import java.util.ServiceLoader;
-import java.util.Set;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
-import org.apache.jackrabbit.vault.packaging.Dependency;
 import org.apache.jackrabbit.vault.packaging.PackageManager;
 import org.apache.jackrabbit.vault.packaging.PackageProperties;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
@@ -77,8 +74,6 @@ public class ContentPackage2FeatureModelConverter {
 
     private final Map<String, Feature> runModes = new HashMap<>();
 
-    private final Set<String> dependencies = new HashSet<>();
-
     private final RegexBasedResourceFilter filter = new RegexBasedResourceFilter();
 
     private BundlesDeployer artifactDeployer;
@@ -319,8 +314,13 @@ public class ContentPackage2FeatureModelConverter {
         Objects.requireNonNull(contentPackage, "Impossible to process a null vault package");
 
         try (VaultPackage vaultPackage = packageManager.open(contentPackage, strictValidation)) {
+            // scan the detected package, first
             process(vaultPackage);
 
+            // merge filters to the main new package
+            mainPackageAssembler.mergeFilters(vaultPackage.getMetaInf().getFilter());
+
+            // add the metadata-only package one to the main package
             File clonedPackage = VaultPackageAssembler.create(vaultPackage).createPackage();
             mainPackageAssembler.addEntry(path, clonedPackage);
         }
@@ -333,12 +333,6 @@ public class ContentPackage2FeatureModelConverter {
             throw new IllegalStateException("Target Feature not initialized yet, please make sure convert() method was invoked first.");
         }
 
-        dependencies.remove(vaultPackage.getId().toString());
-
-        for (Dependency dependency : vaultPackage.getDependencies()) {
-            dependencies.add(dependency.toString());
-        }
-
         Archive archive = vaultPackage.getArchive();
         try {
             archive.open(strictValidation);
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 d5ec573..b46ec61 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
@@ -27,8 +27,12 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Properties;
+import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
+import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
 import org.apache.jackrabbit.vault.packaging.PackageProperties;
@@ -45,12 +49,16 @@ public final class VaultPackageAssembler implements EntryHandler {
 
     private static final String VAULT_PROPERTIES_FILE = META_INF_VAULT_DIRECTORY + "properties.xml";
 
+    private static final String VAULT_FILTER_FILE = META_INF_VAULT_DIRECTORY + "filter.xml";
+
     private static final String NAME_PATH = "path";
 
     private static final String[] INCLUDE_RESOURCES = { "definition/.content.xml", "config.xml", "settings.xml" };
 
     private static final File TMP_DIR = new File(System.getProperty("java.io.tmpdir"));
 
+    private static final Pattern OSGI_BUNDLE_PATTERN = Pattern.compile("(jcr_root)?/apps/[^/]+/install(\\.([^/]+))?/.+\\.jar");
+
     public static VaultPackageAssembler create(VaultPackage vaultPackage) {
         File storingDirectory = new File(TMP_DIR, vaultPackage.getFile().getName() + "-deflated");
         storingDirectory.mkdirs();
@@ -82,9 +90,13 @@ public final class VaultPackageAssembler implements EntryHandler {
             }
         }
 
-        return new VaultPackageAssembler(storingDirectory, properties);
+        VaultPackageAssembler assembler = new VaultPackageAssembler(storingDirectory, properties);
+        assembler.mergeFilters(vaultPackage.getMetaInf().getFilter());
+        return assembler;
     }
 
+    private final DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+
     private final File storingDirectory;
 
     private final Properties properties;
@@ -102,14 +114,20 @@ public final class VaultPackageAssembler implements EntryHandler {
 
     /**
      * This class can not be instantiated from outside
-     *
-     * @param properties
      */
     private VaultPackageAssembler(File storingDirectory, Properties properties) {
         this.storingDirectory = storingDirectory;
         this.properties = properties;
     }
 
+    public void mergeFilters(WorkspaceFilter filter) {
+        for (PathFilterSet pathFilterSet : filter.getFilterSets()) {
+            if (!OSGI_BUNDLE_PATTERN.matcher(pathFilterSet.getRoot()).matches()) {
+                this.filter.add(pathFilterSet);
+            }
+        }
+    }
+
     public void addEntry(String path, Archive archive, Entry entry) throws IOException {
         try (InputStream input = archive.openInputStream(entry)) {
             addEntry(path, input);
@@ -146,6 +164,13 @@ public final class VaultPackageAssembler implements EntryHandler {
             properties.storeToXML(fos, null);
         }
 
+        // generate the Vault filter XML file
+        File xmlFilter = new File(storingDirectory, VAULT_FILTER_FILE);
+        try (InputStream input = filter.getSource();
+                FileOutputStream output = new FileOutputStream(xmlFilter)) {
+            IOUtils.copy(input, output);
+        }
+
         // copy the required resources
 
         for (String resource : INCLUDE_RESOURCES) {
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 0514504..08ec0b2 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -150,6 +150,7 @@ public class ContentPackage2FeatureModelConverterTest {
                 "META-INF/vault/properties.xml",
                 "META-INF/vault/config.xml",
                 "META-INF/vault/settings.xml",
+                "META-INF/vault/filter.xml",
                 "META-INF/vault/definition/.content.xml",
                 "jcr_root/etc/packages/asd/test-bundles.zip",
                 "jcr_root/etc/packages/asd/test-configurations.zip",