SLING-7733: do not rewrite distributionrequests in the packagebuilder
diff --git a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
index 37e28ca..c9d9ad3 100644
--- a/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
+++ b/src/main/java/org/apache/sling/distribution/packaging/impl/AbstractDistributionPackageBuilder.java
@@ -64,7 +64,9 @@
throws DistributionException {
DistributionPackage distributionPackage;
- request = VltUtils.sanitizeRequest(request);
+ if (!VltUtils.isSupported(request)) {
+ throw new DistributionException("unsupported request " + request);
+ }
if (DistributionRequestType.ADD.equals(request.getRequestType())) {
distributionPackage = createPackageForAdd(resourceResolver, request);
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
index 5547185..c759c36 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultContentSerializer.java
@@ -43,6 +43,7 @@
import org.apache.jackrabbit.vault.packaging.PackageException;
import org.apache.jackrabbit.vault.packaging.Packaging;
import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.common.DistributionException;
import org.apache.sling.distribution.serialization.DistributionContentSerializer;
import org.apache.sling.distribution.serialization.DistributionExportOptions;
@@ -100,11 +101,13 @@
public void exportToStream(ResourceResolver resourceResolver, DistributionExportOptions exportOptions, OutputStream outputStream) throws DistributionException {
Session session = null;
try {
+ DistributionRequest request = VltUtils.sanitizeRequest(exportOptions.getRequest());
+
session = getSession(resourceResolver);
String packageGroup = PACKAGE_GROUP;
String packageName = TYPE + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
- WorkspaceFilter filter = VltUtils.createFilter(exportOptions.getRequest(), nodeFilters, propertyFilters);
+ WorkspaceFilter filter = VltUtils.createFilter(request, nodeFilters, propertyFilters);
ExportOptions opts = VltUtils.getExportOptions(filter, packageRoots, packageGroup, packageName, VERSION, useBinaryReferences, exportPathMapping);
log.debug("assembling package {} user {}", packageGroup + '/' + packageName + "-" + VERSION, resourceResolver.getUserID());
diff --git a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
index e883860..4c0bc30 100644
--- a/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
+++ b/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
@@ -378,6 +378,20 @@
return result;
}
+ public static boolean isSupported(DistributionRequest request) {
+ DistributionRequestType requestType = request.getRequestType();
+
+ if (DistributionRequestType.DELETE.equals(requestType)) {
+ for (String path : request.getPaths()) {
+ // vlt cannot properly install delete of rep:policy subnodes
+ if (VltUtils.findParent(path, "rep:policy") != null) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
public static DistributionRequest sanitizeRequest(DistributionRequest request) {
DistributionRequestType requestType = request.getRequestType();