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/04/30 10:34:39 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: SLING-8381 - Converter produces broken hull subpackages

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 b85d162  SLING-8381 - Converter produces broken hull subpackages
b85d162 is described below

commit b85d162afa7e62adc52d2e56e387f437b14b769d
Author: stripodi <st...@simos-mbp>
AuthorDate: Tue Apr 30 12:34:32 2019 +0200

    SLING-8381 - Converter produces broken hull subpackages
    
    initial fix implementation
---
 .../cpconverter/vltpkg/VaultPackageAssembler.java  |  9 ++++++-
 .../vltpkg/VaultPackageAssemblerTest.java          | 28 ++++++++++++++++++----
 2 files changed, 32 insertions(+), 5 deletions(-)

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 08d4e81..941bf27 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
@@ -28,6 +28,7 @@ import java.util.Properties;
 import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
@@ -43,6 +44,8 @@ import org.codehaus.plexus.archiver.util.DefaultFileSet;
 
 public final class VaultPackageAssembler implements EntryHandler {
 
+    private static final String JCR_ROOT_DIR_NAME = "jcr_root";
+
     private static final String META_INF_VAULT_DIRECTORY = "META-INF/vault/";
 
     private static final String VAULT_PROPERTIES_FILE = META_INF_VAULT_DIRECTORY + "properties.xml";
@@ -59,7 +62,9 @@ public final class VaultPackageAssembler implements EntryHandler {
 
     public static VaultPackageAssembler create(VaultPackage vaultPackage) {
         File storingDirectory = new File(TMP_DIR, vaultPackage.getFile().getName() + "-deflated");
-        storingDirectory.mkdirs();
+        // avoid any possible Stream is not a content package. Missing 'jcr_root' error
+        File jcrRootDirectory = new File(storingDirectory, JCR_ROOT_DIR_NAME);
+        jcrRootDirectory.mkdirs();
 
         PackageProperties packageProperties = vaultPackage.getProperties();
 
@@ -119,6 +124,8 @@ public final class VaultPackageAssembler implements EntryHandler {
     public void mergeFilters(WorkspaceFilter filter) {
         for (PathFilterSet pathFilterSet : filter.getFilterSets()) {
             if (!OSGI_BUNDLE_PATTERN.matcher(pathFilterSet.getRoot()).matches()) {
+                // make sure (empty sub-)content-packages override existing content
+                pathFilterSet.setImportMode(ImportMode.MERGE);
                 this.filter.add(pathFilterSet);
             }
         }
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
index 011a516..9d613b5 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/VaultPackageAssemblerTest.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.feature.cpconverter.vltpkg;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
 import java.io.File;
@@ -26,9 +27,11 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
 import org.apache.commons.io.FileUtils;
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
+import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.jackrabbit.vault.packaging.impl.PackageManagerImpl;
-import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -61,12 +64,28 @@ public class VaultPackageAssemblerTest {
 
     @Test
     public void packageResource() throws Exception {
-        assembler.addEntry(resourceLocation, getClass().getResourceAsStream("../handlers/" + resourceLocation));
+        if (resourceLocation != null) {
+            assembler.addEntry(resourceLocation, getClass().getResourceAsStream("../handlers/" + resourceLocation));
+        }
         File contentPackage = assembler.createPackage(testDirectory);
 
         ZipFile zipFile = new ZipFile(contentPackage);
-        ZipEntry entry = zipFile.getEntry(resourceLocation);
-        assertNotNull(entry);
+        ZipEntry resourceEntry;
+        if (resourceLocation != null) {
+            resourceEntry = zipFile.getEntry(resourceLocation);
+        } else {
+            resourceEntry = zipFile.getEntry("jcr_root");
+        }
+        assertNotNull(resourceEntry);
+
+        DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
+        ZipEntry filtersEntry = zipFile.getEntry("META-INF/vault/filter.xml");
+        filter.load(zipFile.getInputStream(filtersEntry));
+
+        for (PathFilterSet filterSet : filter.getFilterSets()) {
+            assertEquals(ImportMode.MERGE, filterSet.getImportMode());
+        }
+
         zipFile.close();
     }
 
@@ -79,6 +98,7 @@ public class VaultPackageAssemblerTest {
         VaultPackageAssembler assembler = VaultPackageAssembler.create(vaultPackage);
 
         return Arrays.asList(new Object[][] {
+            { null, assembler },
             { "jcr_root/.content.xml", assembler },
             { "jcr_root/asd/.content.xml", assembler },
             { "jcr_root/asd/public/license.txt", assembler }