You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2015/04/07 13:11:27 UTC
svn commit: r1671804 -
/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/
Author: mpetria
Date: Tue Apr 7 11:11:26 2015
New Revision: 1671804
URL: http://svn.apache.org/r1671804
Log:
SLING-4583: requiring less privileges to distribute a subtree
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java?rev=1671804&r1=1671803&r2=1671804&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilder.java Tue Apr 7 11:11:26 2015
@@ -77,10 +77,6 @@ public class FileVaultDistributionPackag
try {
session = getSession(resourceResolver);
- // TODO : no tokens
-
- final String[] paths = request.getPaths();
-
String packageGroup = "sling/distribution";
String packageName = getType() + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java?rev=1671804&r1=1671803&r2=1671804&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackage.java Tue Apr 7 11:11:26 2015
@@ -70,6 +70,7 @@ public class JcrVaultDistributionPackage
public void delete() {
Node node = jcrPackage.getNode();
try {
+ jcrPackage.close();
node.remove();
session.save();
} catch (RepositoryException e) {
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java?rev=1671804&r1=1671803&r2=1671804&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java Tue Apr 7 11:11:26 2015
@@ -1,15 +1,19 @@
package org.apache.sling.distribution.serialization.impl.vlt;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
import org.apache.jackrabbit.vault.fs.io.ImportOptions;
+import org.apache.jackrabbit.vault.packaging.ExportOptions;
import org.apache.jackrabbit.vault.packaging.JcrPackage;
import org.apache.jackrabbit.vault.packaging.JcrPackageDefinition;
import org.apache.jackrabbit.vault.packaging.JcrPackageManager;
import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.Packaging;
+import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.packaging.DistributionPackage;
@@ -22,8 +26,10 @@ import org.slf4j.LoggerFactory;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
+import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.util.UUID;
/**
* a {@link org.apache.sling.distribution.serialization.DistributionPackageBuilder}Â based on Apache Jackrabbit FileVault.
@@ -57,24 +63,21 @@ public class JcrVaultDistributionPackage
Session session = null;
try {
session = getSession(resourceResolver);
- JcrPackageManager packageManager = packaging.getPackageManager(session);
-
- final String[] paths = request.getPaths();
String packageGroup = PACKAGE_GROUP;
String packageName = getType() + "_" + System.currentTimeMillis() + "_" + UUID.randomUUID();
-
WorkspaceFilter filter = VltUtils.createFilter(request);
+ ExportOptions opts = VltUtils.getExportOptions(filter, packageGroup, packageName, VERSION);
- final JcrPackage jcrPackage = packageManager.create(packageGroup, packageName, VERSION);
- final JcrPackageDefinition jcrPackageDefinition = jcrPackage.getDefinition();
+ log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
+ VaultPackage vaultPackage = packaging.getPackageManager().assemble(session, opts, (File) null);
- jcrPackageDefinition.setFilter(filter, true);
+ JcrPackageManager packageManager = packaging.getPackageManager(session);
+ JcrPackage jcrPackage = packageManager.upload(vaultPackage.getFile(), true, true, null);
+ vaultPackage.close();
- log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
- packageManager.assemble(jcrPackage, null);
return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
} catch (Exception e) {
throw new DistributionPackageBuildingException(e);
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java?rev=1671804&r1=1671803&r2=1671804&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java Tue Apr 7 11:11:26 2015
@@ -21,6 +21,7 @@ package org.apache.sling.distribution.se
+import org.apache.jackrabbit.util.Text;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
@@ -96,11 +97,47 @@ public class VltUtils {
inf.setProperties(props);
opts.setMetaInf(inf);
- opts.setRootPath("/");
+
+ String root = getClosestRoot(filter.getFilterSets());
+ opts.setRootPath(root);
+ opts.setMountPath(root);
return opts;
}
+
+ private static String getClosestRoot(List<PathFilterSet> filterSets) {
+
+ String closestRoot = null;
+
+ for (PathFilterSet filterSet : filterSets) {
+ String root = filterSet.getRoot();
+
+ if (closestRoot == null) {
+ closestRoot = root;
+ } else {
+ while(!root.startsWith(closestRoot)) {
+ closestRoot = Text.getRelativeParent(closestRoot, 1);
+ }
+ }
+
+ if (closestRoot.length() < 2) {
+ break;
+ }
+ }
+
+ if (closestRoot != null) {
+ closestRoot = Text.getRelativeParent(closestRoot, 1);
+ }
+
+ if (closestRoot == null || !closestRoot.startsWith("/")) {
+ closestRoot = "/";
+ }
+
+ return closestRoot;
+
+ }
+
public static ImportOptions getImportOptions(AccessControlHandling aclHandling, ImportMode importMode) {
ImportOptions opts = new ImportOptions();
if (aclHandling != null) {