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",