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/05/19 16:57:35 UTC

svn commit: r1680309 - in /sling/trunk/contrib/extensions/distribution: core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/ core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/ it/src/test/java/org/apache/sling/...

Author: mpetria
Date: Tue May 19 14:57:35 2015
New Revision: 1680309

URL: http://svn.apache.org/r1680309
Log:
SLING-4727: add customization options for temp folders in vlt package builders

Added:
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionPackageExporterImporterTemporaryFoldersTest.java
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-temp.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-temp.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-temp.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-tempvlt.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/jcrpackages.json
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/packages.json
Modified:
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
    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/VaultDistributionPackageBuilderFactory.java
    sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VltUtils.java
    sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
    sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
    sling/trunk/contrib/extensions/distribution/sample/pom.xml
    sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-vlt.json

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java?rev=1680309&r1=1680308&r2=1680309&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackage.java Tue May 19 14:57:35 2015
@@ -75,13 +75,7 @@ public class FileVaultDistributionPackag
 
     public void delete() {
         try {
-            File file = pkg.getFile();
-
-            close();
-
-            if (file.exists()) {
-                file.delete();
-            }
+            VltUtils.deletePackage(pkg);
         } catch (Throwable e) {
             log.error("cannot delete file", e);
         }

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=1680309&r1=1680308&r2=1680309&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 May 19 14:57:35 2015
@@ -65,19 +65,27 @@ public class FileVaultDistributionPackag
     private AccessControlHandling aclHandling;
 
     private final String[] packageRoots;
+    private final File tempDirectory;
 
-    public FileVaultDistributionPackageBuilder(String type, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots) {
+    public FileVaultDistributionPackageBuilder(String type, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots, String tempFilesFolder) {
         super(type);
         this.packaging = packaging;
         this.importMode = importMode;
         this.aclHandling = aclHandling;
         this.packageRoots = packageRoots;
+
+
+
+        tempDirectory = VltUtils.getTempFolder(tempFilesFolder);
+
+        log.info("using temp directory {}", tempDirectory == null ? tempDirectory : tempDirectory.getPath());
     }
 
     @Override
     protected DistributionPackage createPackageForAdd(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request)
             throws DistributionPackageBuildingException {
         Session session = null;
+        VaultPackage vaultPackage = null;
         try {
             session = getSession(resourceResolver);
 
@@ -88,10 +96,11 @@ public class FileVaultDistributionPackag
             ExportOptions opts = VltUtils.getExportOptions(filter, packageRoots, packageGroup, packageName, VERSION);
 
             log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
-            File tmpFile = File.createTempFile("rp-vlt-create-" + System.nanoTime(), ".zip");
-            VaultPackage vaultPackage = packaging.getPackageManager().assemble(session, opts, tmpFile);
+
+            vaultPackage = VltUtils.createPackage(packaging.getPackageManager(), session, opts, tempDirectory);
             return new FileVaultDistributionPackage(getType(), vaultPackage);
         } catch (Exception e) {
+            VltUtils.deletePackage(vaultPackage);
             throw new DistributionPackageBuildingException(e);
         } finally {
             ungetSession(session);
@@ -102,25 +111,16 @@ public class FileVaultDistributionPackag
     protected DistributionPackage readPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull final InputStream stream)
             throws DistributionPackageReadingException {
         log.debug("reading a stream");
-        DistributionPackage pkg = null;
+        VaultPackage vaultPackage = null;
         try {
-            File tmpFile = File.createTempFile("rp-vlt-read-" + System.nanoTime(), ".zip");
-            FileOutputStream fileStream = new FileOutputStream(tmpFile);
-            IOUtils.copy(stream, fileStream);
-            IOUtils.closeQuietly(fileStream);
-
-            VaultPackage vaultPackage = packaging.getPackageManager().open(tmpFile);
-
-            if (vaultPackage != null) {
-                pkg = new FileVaultDistributionPackage(getType(), vaultPackage);
-            } else {
-                log.warn("stream could not be read as a vlt package");
-            }
+            vaultPackage = VltUtils.readPackage(packaging.getPackageManager(), stream, tempDirectory);
+
+            return new FileVaultDistributionPackage(getType(), vaultPackage);
 
         } catch (Exception e) {
-            throw new DistributionPackageReadingException("could not read / install the package", e);
+            VltUtils.deletePackage(vaultPackage);
+            throw new DistributionPackageReadingException("could not read package", e);
         }
-        return pkg;
     }
 
 
@@ -157,13 +157,11 @@ public class FileVaultDistributionPackag
                 return true;
             }
         } catch (Exception e) {
-            log.error("could not read / install the package", e);
+            log.error("could not install the package", e);
             throw new DistributionPackageReadingException(e);
         } finally {
             ungetSession(session);
         }
         return false;
     }
-
-
 }

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=1680309&r1=1680308&r2=1680309&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 May 19 14:57:35 2015
@@ -92,11 +92,7 @@ public class JcrVaultDistributionPackage
 
     public void delete() {
         try {
-            Node node = jcrPackage.getNode();
-
-            close();
-
-            node.remove();
+            VltUtils.deletePackage(jcrPackage);
             session.save();
         } catch (Throwable e) {
             log.error("Cannot delete package", 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=1680309&r1=1680308&r2=1680309&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 May 19 14:57:35 2015
@@ -19,24 +19,35 @@
 package org.apache.sling.distribution.serialization.impl.vlt;
 
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Properties;
 import java.util.UUID;
 
 import javax.annotation.Nonnull;
+import javax.jcr.Node;
+import javax.jcr.Property;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.commons.JcrUtils;
 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.jackrabbit.vault.util.JcrConstants;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.distribution.DistributionRequest;
 import org.apache.sling.distribution.packaging.DistributionPackage;
@@ -64,8 +75,10 @@ public class JcrVaultDistributionPackage
     private ImportMode importMode;
     private AccessControlHandling aclHandling;
     private final String[] packageRoots;
+    private final String tempPackagesNode;
+    private final File tempDirectory;
 
-    public JcrVaultDistributionPackageBuilder(String type, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots) {
+    public JcrVaultDistributionPackageBuilder(String type, Packaging packaging, ImportMode importMode, AccessControlHandling aclHandling, String[] packageRoots, String tempFilesFolder, String tempPackagesNode) {
         super(type);
 
         this.packaging = packaging;
@@ -73,11 +86,17 @@ public class JcrVaultDistributionPackage
         this.importMode = importMode;
         this.aclHandling = aclHandling;
         this.packageRoots = packageRoots;
+        this.tempPackagesNode = tempPackagesNode;
+
+        this.tempDirectory = VltUtils.getTempFolder(tempFilesFolder);
     }
 
     @Override
     protected DistributionPackage createPackageForAdd(@Nonnull ResourceResolver resourceResolver, @Nonnull DistributionRequest request) throws DistributionPackageBuildingException {
         Session session = null;
+        VaultPackage vaultPackage = null;
+        JcrPackage jcrPackage = null;
+
         try {
             session = getSession(resourceResolver);
 
@@ -89,34 +108,39 @@ public class JcrVaultDistributionPackage
 
             log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
 
-            VaultPackage vaultPackage = packaging.getPackageManager().assemble(session, opts, (File) null);
+            vaultPackage = VltUtils.createPackage(packaging.getPackageManager(), session, opts, tempDirectory);
 
-            JcrPackageManager packageManager = packaging.getPackageManager(session);
-            JcrPackage jcrPackage = packageManager.upload(vaultPackage.getFile(), true, true, null);
-            vaultPackage.close();
+            jcrPackage = uploadPackage(session, vaultPackage);
 
             return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
         } catch (Exception e) {
+            VltUtils.deletePackage(jcrPackage);
             throw new DistributionPackageBuildingException(e);
         } finally {
             ungetSession(session);
+            VltUtils.deletePackage(vaultPackage);
         }
     }
 
     @Override
     protected DistributionPackage readPackageInternal(@Nonnull ResourceResolver resourceResolver, @Nonnull InputStream stream) throws DistributionPackageReadingException {
         Session session = null;
+        VaultPackage vaultPackage = null;
+        JcrPackage jcrPackage = null;
+
         try {
             session = getSession(resourceResolver);
-            JcrPackageManager packageManager = packaging.getPackageManager(session);
+            vaultPackage = VltUtils.readPackage(packaging.getPackageManager(), stream, tempDirectory);
 
-            JcrPackage jcrPackage = packageManager.upload(stream, true);
+            jcrPackage = uploadPackage(session, vaultPackage);
 
             return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
         } catch (Exception e) {
+            VltUtils.deletePackage(jcrPackage);
             throw new DistributionPackageReadingException(e);
         } finally {
             ungetSession(session);
+            VltUtils.deletePackage(vaultPackage);
         }
     }
 
@@ -125,12 +149,9 @@ public class JcrVaultDistributionPackage
         Session session = null;
         try {
             session = getSession(resourceResolver);
-            JcrPackageManager packageManager = packaging.getPackageManager(session);
-
-
 
             String packageName = distributionPackage.getId();
-            JcrPackage jcrPackage = packageManager.open(new PackageId(PACKAGE_GROUP, packageName, VERSION));
+            JcrPackage jcrPackage = openPackage(session, packageName);
 
             ImportOptions importOptions = VltUtils.getImportOptions(aclHandling, importMode);
             jcrPackage.extract(importOptions);
@@ -148,14 +169,10 @@ public class JcrVaultDistributionPackage
         Session session = null;
         try {
             session = getSession(resourceResolver);
-            JcrPackageManager packageManager = packaging.getPackageManager(session);
 
             String packageName = id;
-            JcrPackage jcrPackage = packageManager.open(new PackageId(PACKAGE_GROUP, packageName, VERSION));
+            JcrPackage jcrPackage = openPackage(session, packageName);
 
-            if (jcrPackage == null) {
-                return null;
-            }
             return new JcrVaultDistributionPackage(getType(), jcrPackage, session);
         } catch (RepositoryException e) {
             log.error("cannot ge package with id {}", id, e);
@@ -164,4 +181,67 @@ public class JcrVaultDistributionPackage
             ungetSession(session);
         }
     }
+
+
+    private JcrPackage uploadPackage(Session session, VaultPackage pack) throws IOException, RepositoryException {
+        JcrPackageManager packageManager = packaging.getPackageManager(session);
+
+        Node packageRoot = getPackageRoot(session);
+        PackageId packageId = getPackageId(pack);
+
+        InputStream in = FileUtils.openInputStream(pack.getFile());
+        try {
+            if (packageRoot != null) {
+                JcrPackage jcrPackage = packageManager.create(packageRoot, packageId.getDownloadName());
+                Property data = jcrPackage.getData();
+                data.setValue(in);
+                JcrPackageDefinition def = jcrPackage.getDefinition();
+                def.unwrap(pack, true, false);
+
+                log.debug("package uploaded to {}", jcrPackage.getNode().getPath());
+
+                return jcrPackage;
+            } else {
+                JcrPackage jcrPackage = packageManager.upload(in, true);
+                return jcrPackage;
+            }
+        } finally {
+            IOUtils.closeQuietly(in);
+        }
+    }
+
+    private JcrPackage openPackage(Session session, String packageName) throws RepositoryException {
+        JcrPackageManager packageManager = packaging.getPackageManager(session);
+
+
+        Node packageRoot = getPackageRoot(session);
+        PackageId packageId = new PackageId(PACKAGE_GROUP, packageName, VERSION);
+
+        if (packageRoot != null) {
+            Node packageNode = packageRoot.getNode(packageId.getDownloadName());
+            JcrPackage jcrPackage = packageManager.open(packageNode);
+            return jcrPackage;
+        } else {
+            JcrPackage jcrPackage = packageManager.open(packageId);
+            return jcrPackage;
+        }
+    }
+
+    private PackageId getPackageId(VaultPackage vaultPackage) {
+        Properties props = vaultPackage.getMetaInf().getProperties();
+
+        String version = props.getProperty(VaultPackage.NAME_VERSION);
+        String group = props.getProperty(VaultPackage.NAME_GROUP);
+        String name = props.getProperty(VaultPackage.NAME_NAME);
+
+        return new PackageId(group, name, version);
+    }
+
+    private Node getPackageRoot(Session session) throws RepositoryException {
+        Node packageRoot = null;
+        if (tempPackagesNode != null && session.nodeExists(tempPackagesNode)) {
+            packageRoot = session.getNode(tempPackagesNode);
+        }
+        return packageRoot;
+    }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java?rev=1680309&r1=1680308&r2=1680309&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/VaultDistributionPackageBuilderFactory.java Tue May 19 14:57:35 2015
@@ -89,11 +89,24 @@ public class VaultDistributionPackageBui
     public static final String ACL_HANDLING = "aclHandling";
 
     /**
-     * ACL handling property for file vault package builder
+     * Package roots
      */
     @Property(label = "Package Roots", description = "The package roots to be used for created packages. (this is useful for assembling packages with an user that cannot read above the package root)")
     public static final String PACKAGE_ROOTS = "package.roots";
 
+
+    /**
+     * Temp file folder
+     */
+    @Property(label = "Temp Filesystem Folder", description = "The filesystem folder where the temporary files should be saved.")
+    public static final String TEMP_FS_FOLDER = "tempFsFolder";
+
+    /**
+     * Temp file folder
+     */
+    @Property(label = "Temp JCR Folder", description = "The jcr folder where the temporary files should be saved")
+    public static final String TEMP_JCR_FOLDER = "tempJcrFolder";
+
     @Reference
     private Packaging packaging;
 
@@ -108,6 +121,10 @@ public class VaultDistributionPackageBui
         String importModeString = PropertiesUtil.toString(config.get(IMPORT_MODE), null);
         String aclHandlingString = PropertiesUtil.toString(config.get(ACL_HANDLING), null);
         String[] packageRoots = PropertiesUtil.toStringArray(config.get(PACKAGE_ROOTS), null);
+        String tempFsFolder = PropertiesUtil.toString(config.get(TEMP_FS_FOLDER), null);
+        String tempJcrFolder = PropertiesUtil.toString(config.get(TEMP_JCR_FOLDER), null);
+
+
         packageRoots = SettingsUtils.removeEmptyEntries(packageRoots);
 
         ImportMode importMode = null;
@@ -120,9 +137,9 @@ public class VaultDistributionPackageBui
             aclHandling= AccessControlHandling.valueOf(aclHandlingString.trim());
         }
         if ("filevlt".equals(type)) {
-            packageBuilder = new ResourceSharedDistributionPackageBuilder(new FileVaultDistributionPackageBuilder(name, packaging, importMode, aclHandling, packageRoots));
+            packageBuilder = new ResourceSharedDistributionPackageBuilder(new FileVaultDistributionPackageBuilder(name, packaging, importMode, aclHandling, packageRoots, tempFsFolder));
         } else  {
-            packageBuilder = new ResourceSharedDistributionPackageBuilder(new JcrVaultDistributionPackageBuilder(name, packaging, importMode, aclHandling, packageRoots));
+            packageBuilder = new ResourceSharedDistributionPackageBuilder(new JcrVaultDistributionPackageBuilder(name, packaging, importMode, aclHandling, packageRoots, tempFsFolder, tempJcrFolder));
         }
     }
 

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=1680309&r1=1680308&r2=1680309&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 May 19 14:57:35 2015
@@ -21,6 +21,8 @@ package org.apache.sling.distribution.se
 
 
 
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.util.Text;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
@@ -32,9 +34,19 @@ import org.apache.jackrabbit.vault.fs.fi
 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.PackageManager;
+import org.apache.jackrabbit.vault.packaging.Packaging;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.sling.distribution.DistributionRequest;
 
+import javax.jcr.Node;
+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.List;
 import java.util.Properties;
 
@@ -163,4 +175,73 @@ public class VltUtils {
 
         return opts;
     }
+
+    public static VaultPackage createPackage(PackageManager packageManager, Session session, ExportOptions options, File tempFolder) throws IOException, RepositoryException {
+        File file = File.createTempFile("distr-vault-create-" + System.nanoTime(), ".zip", tempFolder);
+
+        try {
+            VaultPackage vaultPackage = packageManager.assemble(session, options, file);
+            return vaultPackage;
+        } catch (RepositoryException e) {
+            FileUtils.deleteQuietly(file);
+            throw e;
+        }
+    }
+
+    public static VaultPackage readPackage(PackageManager packageManager, InputStream stream, File tempFolder) throws IOException {
+        File file = File.createTempFile("distr-vault-read-" + System.nanoTime(), ".zip", tempFolder);
+        OutputStream out = FileUtils.openOutputStream(file);
+        try {
+            IOUtils.copy(stream, out);
+            return packageManager.open(file);
+        } catch (IOException e) {
+            FileUtils.deleteQuietly(file);
+            throw e;
+        } finally {
+            IOUtils.closeQuietly(stream);
+            IOUtils.closeQuietly(out);
+        }
+    }
+
+    public static void deletePackage(VaultPackage vaultPackage) {
+        if (vaultPackage == null) {
+            return;
+        }
+
+        File file = vaultPackage.getFile();
+        vaultPackage.close();
+
+        FileUtils.deleteQuietly(file);
+    }
+
+    public static void deletePackage(JcrPackage jcrPackage) {
+        if (jcrPackage == null) {
+            return;
+        }
+
+        Node node = jcrPackage.getNode();
+        jcrPackage.close();
+
+        try {
+            if (node != null) {
+                node.remove();
+            }
+        } catch (RepositoryException e) {
+            // do nothing
+        }
+    }
+
+    public static File getTempFolder(String tempFolderPath) {
+        File directory = null;
+        try {
+            directory = new File(tempFolderPath);
+            if (!directory.exists() || !directory.isDirectory()) {
+                directory = null;
+            }
+        } catch (Throwable e) {
+            directory = null;
+        }
+
+        return directory;
+    }
 }

Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java?rev=1680309&r1=1680308&r2=1680309&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/serialization/impl/vlt/FileVaultDistributionPackageBuilderTest.java Tue May 19 14:57:35 2015
@@ -76,7 +76,7 @@ public class FileVaultDistributionPackag
         when(resourceResolver.adaptTo(Session.class)).thenReturn(session);
 
 
-        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null);
+        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null, null);
         DistributionRequest request = new SimpleDistributionRequest(DistributionRequestType.ADD, "/");
         DistributionPackage distributionPackage = fileVaultdistributionPackageBuilder.createPackageForAdd(resourceResolver, request);
         assertNotNull(distributionPackage);
@@ -88,12 +88,19 @@ public class FileVaultDistributionPackag
         PackageManager packageManager = mock(PackageManager.class);
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
-        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null);
+        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null, null);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         InputStream stream = new ByteArrayInputStream("some binary".getBytes("UTF-8"));
-        DistributionPackage distributionPackage = fileVaultdistributionPackageBuilder.readPackageInternal(resourceResolver, stream);
-        assertNull(distributionPackage);
+
+        boolean throwsException  = false;
+        try {
+            DistributionPackage distributionPackage = fileVaultdistributionPackageBuilder.readPackageInternal(resourceResolver, stream);
+        } catch (Exception e) {
+            throwsException = true;
+        }
+
+        assertTrue(throwsException);
     }
 
     @Test
@@ -102,7 +109,7 @@ public class FileVaultDistributionPackag
         PackageManager packageManager = mock(PackageManager.class);
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
-        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null);
+        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null, null);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         String id = "some-id";
@@ -119,7 +126,7 @@ public class FileVaultDistributionPackag
         when(packageManager.open(tempFile)).thenReturn(vaultPackage);
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
-        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null);
+        FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging, null, null, null, null);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);
@@ -150,7 +157,7 @@ public class FileVaultDistributionPackag
         when(packaging.getPackageManager()).thenReturn(packageManager);
 
         FileVaultDistributionPackageBuilder fileVaultdistributionPackageBuilder = new FileVaultDistributionPackageBuilder("filevlt", packaging,
-                ImportMode.MERGE, AccessControlHandling.MERGE, null);
+                ImportMode.MERGE, AccessControlHandling.MERGE, null, null);
 
         ResourceResolver resourceResolver = mock(ResourceResolver.class);
         Session session = mock(Session.class);

Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java?rev=1680309&r1=1680308&r2=1680309&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java Tue May 19 14:57:35 2015
@@ -30,6 +30,7 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
 import static org.apache.sling.distribution.it.DistributionUtils.agentUrl;
+import static org.apache.sling.distribution.it.DistributionUtils.assertEmptyFolder;
 import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
 import static org.apache.sling.distribution.it.DistributionUtils.assertPostResourceWithParameters;
 import static org.apache.sling.distribution.it.DistributionUtils.authorAgentConfigUrl;
@@ -113,23 +114,16 @@ public abstract class DistributionIntegr
 
     @AfterClass
     public static void checkNoPackagesLeft() throws IOException, JSONException {
-        if (authorClient.exists("/var/sling/distribution/packages")) {
-            JSONObject authorJson = getResource(author, "/var/sling/distribution/packages.1.json");
-            Iterator<String> it = authorJson.keys();
-            while (it.hasNext()) {
-                String key = it.next();
-                assertFalse(key.startsWith("distrpackage"));
-            }
-        }
 
-        if (publishClient.exists("/var/sling/distribution/packages")) {
-            JSONObject authorJson = getResource(publish, "/var/sling/distribution/packages.1.json");
-            Iterator<String> it = authorJson.keys();
-            while (it.hasNext()) {
-                String key = it.next();
-                assertFalse(key.startsWith("distrpackage"));
-            }
-        }
+
+        assertEmptyFolder(author, authorClient, "/var/sling/distribution/packages");
+        assertEmptyFolder(author, authorClient, "/etc/packages/sling/distribution");
+        assertEmptyFolder(author, authorClient, "/var/sling/distribution/jcrpackages");
+
+
+        assertEmptyFolder(publish, publishClient, "/var/sling/distribution/packages");
+        assertEmptyFolder(publish, publishClient, "/etc/packages/sling/distribution");
+        assertEmptyFolder(publish, publishClient, "/var/sling/distribution/jcrpackages");
 
 
     }

Added: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionPackageExporterImporterTemporaryFoldersTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionPackageExporterImporterTemporaryFoldersTest.java?rev=1680309&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionPackageExporterImporterTemporaryFoldersTest.java (added)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionPackageExporterImporterTemporaryFoldersTest.java Tue May 19 14:57:35 2015
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.distribution.it;
+
+import org.apache.http.protocol.HTTP;
+import org.apache.sling.distribution.DistributionRequestType;
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
+import static org.apache.sling.distribution.it.DistributionUtils.assertNotExists;
+import static org.apache.sling.distribution.it.DistributionUtils.createRandomNode;
+import static org.apache.sling.distribution.it.DistributionUtils.distribute;
+import static org.apache.sling.distribution.it.DistributionUtils.doExport;
+import static org.apache.sling.distribution.it.DistributionUtils.doImport;
+import static org.apache.sling.distribution.it.DistributionUtils.getChildrenForFolder;
+import static org.junit.Assert.assertEquals;
+
+public class DistributionPackageExporterImporterTemporaryFoldersTest extends DistributionIntegrationTestBase {
+
+
+
+    @Test
+    public void testAddExportImportTemp() throws Exception {
+
+        List<String> jcrPackages =  getChildrenForFolder(publish, "/var/sling/distribution/jcrpackages");
+        assertEquals(0, jcrPackages.size());
+
+        String nodePath = createRandomNode(publishClient, "/content/export_" + System.nanoTime());
+        assertExists(publishClient, nodePath);
+
+        distribute(publish, "temp", DistributionRequestType.ADD, nodePath);
+
+        jcrPackages =  getChildrenForFolder(publish, "/var/sling/distribution/jcrpackages");
+        assertEquals(1, jcrPackages.size());
+
+        publishClient.delete(nodePath);
+        assertNotExists(publishClient, nodePath);
+
+        String content = doExport(publish, "temp", DistributionRequestType.PULL);
+
+        jcrPackages =  getChildrenForFolder(publish, "/var/sling/distribution/jcrpackages");
+        assertEquals(0, jcrPackages.size());
+
+        doImport(publish, "temp", content.getBytes(HTTP.DEFAULT_CONTENT_CHARSET));
+        assertExists(publishClient, nodePath);
+
+    }
+}

Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java?rev=1680309&r1=1680308&r2=1680309&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java Tue May 19 14:57:35 2015
@@ -21,6 +21,7 @@ package org.apache.sling.distribution.it
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.UUID;
 
@@ -269,4 +270,30 @@ public class DistributionUtils {
         return triggerRootUrl() + "/" + triggerName + ".event";
     }
 
+
+    public static void assertEmptyFolder(SlingInstance instance, SlingClient client, String path) throws IOException, JSONException {
+
+        if (client.exists(path)) {
+            List<String> children = getChildrenForFolder(instance, path);
+
+            assertEquals(0, children.size());
+        }
+
+    }
+
+
+    public static List<String> getChildrenForFolder(SlingInstance instance, String path) throws IOException, JSONException {
+        List<String> result = new ArrayList<String>();
+        JSONObject authorJson = getResource(instance, path + ".1.json");
+        Iterator<String> it = authorJson.keys();
+        while (it.hasNext()) {
+            String key = it.next();
+
+            if (!key.contains(":")) {
+                result.add(key);
+            }
+        }
+        return result;
+    }
+
 }

Modified: sling/trunk/contrib/extensions/distribution/sample/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/pom.xml?rev=1680309&r1=1680308&r2=1680309&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/pom.xml (original)
+++ sling/trunk/contrib/extensions/distribution/sample/pom.xml Tue May 19 14:57:35 2015
@@ -67,7 +67,8 @@
                     <instructions>
                         <Bundle-SymbolicName>org.apache.sling.distribution.sample</Bundle-SymbolicName>
                         <Sling-Initial-Content>
-                            SLING-CONTENT/libs/sling/distribution;path:=/libs/sling/distribution;overwrite:=true
+                            SLING-CONTENT/libs/sling/distribution;path:=/libs/sling/distribution;overwrite:=true,
+                            SLING-CONTENT/var/sling/distribution;path:=/var/sling/distribution;overwrite:=true
                         </Sling-Initial-Content>
                     </instructions>
                 </configuration>

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-temp.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-temp.json?rev=1680309&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-temp.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-temp.json Tue May 19 14:57:35 2015
@@ -0,0 +1,10 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "temp",
+
+    "serviceName" : "distributionService",
+
+    "requestAuthorizationStrategy.target" : "(name=privilegeRead)",
+
+    "packageBuilder.target" : "(name=tempvlt)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-temp.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-temp.json?rev=1680309&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-temp.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-temp.json Tue May 19 14:57:35 2015
@@ -0,0 +1,6 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "temp",
+
+    "agent.target": "(name=temp)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-temp.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-temp.json?rev=1680309&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-temp.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.packaging.impl.importer.LocalDistributionPackageImporterFactory-temp.json Tue May 19 14:57:35 2015
@@ -0,0 +1,6 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "temp",
+
+    "packageBuilder.target" : "(name=tempvlt)"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-tempvlt.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-tempvlt.json?rev=1680309&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-tempvlt.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impexp/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-tempvlt.json Tue May 19 14:57:35 2015
@@ -0,0 +1,7 @@
+{
+    "jcr:primaryType": "sling:OsgiConfig",
+    "name": "tempvlt",
+    "type": "jcrvlt",
+    "tempJcrFolder" : "/var/sling/distribution/jcrpackages",
+    "tempFsFolder" : "/var/sling/distribution/packages"
+}
\ No newline at end of file

Modified: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-vlt.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-vlt.json?rev=1680309&r1=1680308&r2=1680309&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-vlt.json (original)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.distribution.serialization.impl.vlt.VaultDistributionPackageBuilderFactory-vlt.json Tue May 19 14:57:35 2015
@@ -1,5 +1,6 @@
 {
     "jcr:primaryType": "sling:OsgiConfig",
     "name": "vlt",
-    "type": "jcrvlt"
+    "type": "jcrvlt",
+    "tempFsFolder": "/Users/mpetria/work/temp"
 }
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/jcrpackages.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/jcrpackages.json?rev=1680309&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/jcrpackages.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/jcrpackages.json Tue May 19 14:57:35 2015
@@ -0,0 +1,3 @@
+{
+  "jcr:primaryType": "sling:Folder"
+}
\ No newline at end of file

Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/packages.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/packages.json?rev=1680309&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/packages.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/var/sling/distribution/packages.json Tue May 19 14:57:35 2015
@@ -0,0 +1,3 @@
+{
+  "jcr:primaryType": "sling:Folder"
+}
\ No newline at end of file