You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2014/10/31 19:33:31 UTC

svn commit: r1635837 - in /jackrabbit/commons/filevault/trunk/vault-core/src: main/java/org/apache/jackrabbit/vault/fs/io/Importer.java test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java

Author: tripod
Date: Fri Oct 31 18:33:31 2014
New Revision: 1635837

URL: http://svn.apache.org/r1635837
Log:
JCRVLT-66 Updating an exiting authorizable does not work if on different path (mode=merge)

- fixed for simple use cases

Modified:
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java?rev=1635837&r1=1635836&r2=1635837&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java Fri Oct 31 18:33:31 2014
@@ -52,6 +52,7 @@ import org.apache.jackrabbit.vault.fs.ap
 import org.apache.jackrabbit.vault.fs.api.ImportInfo;
 import org.apache.jackrabbit.vault.fs.api.NodeNameList;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
+import org.apache.jackrabbit.vault.fs.api.PathMapping;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
 import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
@@ -962,12 +963,8 @@ public class Importer {
                     }
                 }
             }
-            // check if node was remapped. currently we just skip them as it's not clear how the filter should be
-            // reapplied or what happens if the remapping links to a tree we already processed.
-            // in this case we don't descend in any children and can clear them right away
-            if (!imp.getRemapped().map(info.path, true).equals(info.path)) {
-                info.children = null;
-            }
+            // remap the child tree in case some of the nodes where moved during import (e.g. authorizable)
+            info = info.remap(imp.getRemapped());
         }
         log.debug("committed {}", info.path);
         return imp;
@@ -1061,7 +1058,7 @@ public class Importer {
 
     private static class TxInfo {
 
-        private final TxInfo parent;
+        private TxInfo parent;
 
         private final String path;
 
@@ -1161,6 +1158,38 @@ public class Importer {
             }
             return root;
         }
+
+        public TxInfo remap(PathMapping mapping) {
+            String mappedPath = mapping.map(path, true);
+            if (mappedPath.equals(path)) {
+                return this;
+            }
+
+            TxInfo ret = new TxInfo(parent, mappedPath);
+
+            // todo: what should we do with the artifacts ?
+            ret.artifacts.addAll(artifacts);
+
+            // todo: do we need to remap the namelist, too?
+            ret.nameList = nameList;
+
+            ret.isIntermediate = isIntermediate;
+
+            if (children != null) {
+                for (TxInfo child: children.values()) {
+                    child = child.remap(mapping);
+                    child.parent = this;
+                    ret.addChild(child);
+                }
+            }
+
+            // ensure that our parent links the new info
+            if (parent.children != null) {
+                parent.children.put(ret.name, ret);
+            }
+
+            return ret;
+        }
     }
 
 }
\ No newline at end of file

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java?rev=1635837&r1=1635836&r2=1635837&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java Fri Oct 31 18:33:31 2014
@@ -163,7 +163,6 @@ public class TestUserContentPackage exte
     }
 
     @Test
-    @Ignore("JCRVLT-65")
     public void installUserA_Profile_Picture_Moved() throws RepositoryException, IOException, PackageException {
         // install default user at package path
         User userA = installUserA(ImportMode.UPDATE, false, false);