You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/06/28 06:28:45 UTC

[jackrabbit-filevault] branch master updated: JCRVLT-542 do not modify primary types for import mode != REPLACE (#153)

This is an automated email from the ASF dual-hosted git repository.

kwin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git


The following commit(s) were added to refs/heads/master by this push:
     new 6904c23  JCRVLT-542 do not modify primary types for import mode != REPLACE (#153)
6904c23 is described below

commit 6904c23b94fa8d06b7986038c3efbf49cfc05d1b
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Mon Jun 28 08:28:38 2021 +0200

    JCRVLT-542 do not modify primary types for import mode != REPLACE (#153)
    
    Correctly register modification of primary type for mode REPLACE
    
    Co-authored-by: Dominik Suess <su...@adobe.com>
---
 .../vault/fs/impl/io/FolderArtifactHandler.java    |  4 +-
 .../integration/FolderArtifactHandlerIT.java       | 20 +++++-
 .../META-INF/vault/config.xml                      | 77 ++++++++++++++++++++++
 .../META-INF/vault/definition/.content.xml         | 25 +++++++
 .../META-INF/vault/filter.xml                      |  4 ++
 .../META-INF/vault/nodetypes.cnd                   | 12 ++++
 .../META-INF/vault/properties.xml                  | 17 +++++
 .../jcr_root/.content.xml                          | 16 +++++
 .../jcr_root/home/groups/.content.xml              |  4 ++
 .../jcr_root/home/groups/test/.content.xml         |  4 ++
 .../groups/test/lXZzTxX_ZZkvjixvqJON/.content.xml  |  7 ++
 11 files changed, 186 insertions(+), 4 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
index 9dd27d0..c8131b8 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/FolderArtifactHandler.java
@@ -105,7 +105,7 @@ public class FolderArtifactHandler extends AbstractArtifactHandler {
             }
 
             Node node = parent.getNode(dir.getRelativePath());
-            if (wspFilter.contains(node.getPath()) && !nodeType.equals(node.getPrimaryNodeType().getName())) {
+            if (wspFilter.contains(node.getPath()) && wspFilter.getImportMode(node.getPath())==ImportMode.REPLACE && !nodeType.equals(node.getPrimaryNodeType().getName())) {
                 modifyPrimaryType(node, info);
             }
             NodeIterator iter = node.getNodes();
@@ -159,7 +159,7 @@ public class FolderArtifactHandler extends AbstractArtifactHandler {
             }
         }
         node.setPrimaryType(nodeType);
-       
+        info.onModified(node.getPath());
     }
 
     private void ensureCheckedOut(Node node, ImportInfoImpl info) throws RepositoryException {
diff --git a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/FolderArtifactHandlerIT.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/FolderArtifactHandlerIT.java
index 17fd40c..16712aa 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/FolderArtifactHandlerIT.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/FolderArtifactHandlerIT.java
@@ -80,7 +80,7 @@ public class FolderArtifactHandlerIT extends IntegrationTestBase {
     public void testCreatingIntermediateNodesWithDefaultType() throws RepositoryException, IOException, PackageException {
         // create node "/var/foo" with node type "nt:unstructured"
         Node rootNode = admin.getRootNode();
-        Node testNode = rootNode.addNode("var", "nt:unstructured");
+        rootNode.addNode("var", "nt:unstructured");
         admin.save();
         try (VaultPackage vltPackage = extractVaultPackageStrict("/test-packages/folder-without-docview-element.zip")) {
             assertNodeHasPrimaryType("/var/foo", "nt:unstructured");
@@ -91,7 +91,7 @@ public class FolderArtifactHandlerIT extends IntegrationTestBase {
     public void testCreatingIntermediateNodesWithFallbackType() throws RepositoryException, IOException, PackageException {
         // create node "/var/foo" with node type "nt:unstructured"
         Node rootNode = admin.getRootNode();
-        Node testNode = rootNode.addNode("var", "nt:folder");
+        rootNode.addNode("var", "nt:folder");
         admin.save();
         assertNodeHasPrimaryType("/var", "nt:folder");
         try (VaultPackage vltPackage = extractVaultPackage("/test-packages/folder-without-docview-element.zip")) {
@@ -99,4 +99,20 @@ public class FolderArtifactHandlerIT extends IntegrationTestBase {
             assertNodeHasPrimaryType("/var/foo", "nt:folder");
         }
     }
+
+    // JCRVLT-542
+    @Test
+    public void testRootTypeOnMerge() throws RepositoryException, IOException, PackageException {
+        Node rootNode = admin.getRootNode();
+        Node homeNode = rootNode.getNode("home");
+        homeNode.addNode("groups", "rep:AuthorizableFolder");
+        admin.save();
+        assertNodeHasPrimaryType("/home", "rep:AuthorizableFolder");
+        assertNodeHasPrimaryType("/home/groups", "rep:AuthorizableFolder");
+        // /home/groups is being installed w/o any nodetype but filter is on mode=merge so no change expected
+        try (VaultPackage vltPackage = extractVaultPackage("/test-packages/test_nodetype_on_merge.zip")) {
+            assertNodeHasPrimaryType("/home", "rep:AuthorizableFolder");
+            assertNodeHasPrimaryType("/home/groups", "rep:AuthorizableFolder");
+        }
+    }
 }
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/config.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/config.xml
new file mode 100644
index 0000000..941af6c
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/config.xml
@@ -0,0 +1,77 @@
+<vaultfs version="1.1">
+    <!--
+        Defines the content aggregation. The order of the defined aggregates
+        is important for finding the correct aggregator.
+    -->
+    <aggregates>
+        <!--
+            Defines an aggregate that handles nt:file and nt:resource nodes.
+        -->
+        <aggregate type="file" title="File Aggregate"/>
+
+        <!--
+            Defines an aggregate that handles file/folder like nodes. It matches
+            all nt:hierarchyNode nodes that have or define a jcr:content
+            child node and excludes child nodes that are nt:hierarchyNodes.
+        -->
+        <aggregate type="filefolder" title="File/Folder Aggregate"/>
+
+        <!--
+            Defines an aggregate that handles nt:nodeType nodes and serializes
+            them into .cnd notation.
+        -->
+        <aggregate type="nodetype" title="Node Type Aggregate" />
+
+        <!--
+            Defines an aggregate that defines full coverage for certain node
+            types that cannot be covered by the default aggregator.
+        -->
+        <aggregate type="full" title="Full Coverage Aggregate">
+            <matches>
+                <include nodeType="rep:AccessControl" respectSupertype="true" />
+                <include nodeType="rep:Policy" respectSupertype="true" />
+                <include nodeType="cq:Widget" respectSupertype="true" />
+                <include nodeType="cq:EditConfig" respectSupertype="true" />
+                <include nodeType="cq:WorkflowModel" respectSupertype="true" />
+                <include nodeType="vlt:FullCoverage" respectSupertype="true" />
+                <include nodeType="mix:language" respectSupertype="true" />
+                <include nodeType="sling:OsgiConfig" respectSupertype="true" />
+            </matches>
+        </aggregate>
+
+        <!--
+            Defines an aggregate that handles nt:folder like nodes.
+        -->
+        <aggregate type="generic" title="Folder Aggregate">
+            <matches>
+                <include nodeType="nt:folder" respectSupertype="true" />
+            </matches>
+            <contains>
+                <exclude isNode="true" />
+            </contains>
+        </aggregate>
+
+        <!--
+            Defines the default aggregate
+        -->
+        <aggregate type="generic" title="Default Aggregator" isDefault="true">
+            <matches>
+                <!-- all -->
+            </matches>
+            <contains>
+                <exclude nodeType="nt:hierarchyNode" respectSupertype="true" />
+            </contains>
+        </aggregate>
+
+    </aggregates>
+
+    <!--
+      defines the input handlers
+    -->
+    <handlers>
+        <handler type="folder"/>
+        <handler type="file"/>
+        <handler type="nodetype"/>
+        <handler type="generic"/>
+    </handlers>
+</vaultfs>
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/definition/.content.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/definition/.content.xml
new file mode 100644
index 0000000..87746d9
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/definition/.content.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:vlt="http://www.day.com/jcr/vault/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:nt="http://www.jcp.org/jcr/nt/1.0"
+    jcr:created="{Date}2011-06-07T14:32:17.432-07:00"
+    jcr:createdBy="admin"
+    jcr:description=""
+    jcr:lastModified="{Date}2011-06-07T14:32:17.432-07:00"
+    jcr:lastModifiedBy="admin"
+    jcr:primaryType="vlt:PackageDefinition"
+    buildCount="1"
+    cqVersion="5.3"
+    group="my_packages"
+    lastUnwrapped="{Date}2011-06-07T14:32:17.432-07:00"
+    lastUnwrappedBy="admin"
+    lastWrapped="{Date}2011-06-07T14:32:17.432-07:00"
+    lastWrappedBy="admin"
+    name="tmp_foo"
+    version="">
+    <filter jcr:primaryType="nt:unstructured">
+        <f0
+            jcr:primaryType="nt:unstructured"
+            mode="replace"
+            root="/tmp/foo"
+            rules="[]"/>
+    </filter>
+</jcr:root>
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/filter.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/filter.xml
new file mode 100644
index 0000000..520dc14
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/filter.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspaceFilter version="1.0">
+    <filter root="/home" mode="merge"/>
+</workspaceFilter>
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/nodetypes.cnd b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/nodetypes.cnd
new file mode 100644
index 0000000..56fe420
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/nodetypes.cnd
@@ -0,0 +1,12 @@
+<'sling'='http://sling.apache.org/jcr/sling/1.0'>
+<'nt'='http://www.jcp.org/jcr/nt/1.0'>
+
+[sling:Folder] > nt:folder
+  - * (undefined)
+  - * (undefined) multiple
+  + * (nt:base) = sling:Folder version
+
+[sling:OrderedFolder] > sling:Folder
+  orderable
+  + * (nt:base) = sling:OrderedFolder version
+
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/properties.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/properties.xml
new file mode 100644
index 0000000..bae9fb9
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/META-INF/vault/properties.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<comment>Testpackage for folder nodeType on filters with mode merge</comment>
+<entry key="createdBy">admin</entry>
+<entry key="name">test_nodetype_on_merge</entry>
+<entry key="lastModified">2011-06-07T14:32:17.432-07:00</entry>
+<entry key="lastModifiedBy">admin</entry>
+<entry key="created">2011-06-07T14:32:17.502-07:00</entry>
+<entry key="buildCount">1</entry>
+<entry key="version"/>
+<entry key="dependencies"/>
+<entry key="packageFormatVersion">2</entry>
+<entry key="description"/>
+<entry key="group">my_packages</entry>
+<entry key="path">/etc/packages/my_packages/test_nodetype_on_merge</entry>
+</properties>
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/.content.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/.content.xml
new file mode 100644
index 0000000..c269eee
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/.content.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+    jcr:mixinTypes="[rep:AccessControllable]"
+    jcr:primaryType="rep:root"
+    sling:resourceType="sling:redirect"
+    sling:target="/welcome.html">
+    <home/>
+    <rep:policy/>
+    <jcr:system/>
+    <etc/>
+    <apps/>
+    <libs/>
+    <content/>
+    <var/>
+    <tmp/>
+</jcr:root>
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/.content.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/.content.xml
new file mode 100644
index 0000000..b74bb7e
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/.content.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+    jcr:primaryType="rep:AuthorizableFolder"/>
+
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/test/.content.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/test/.content.xml
new file mode 100644
index 0000000..b74bb7e
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/test/.content.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+    jcr:primaryType="rep:AuthorizableFolder"/>
+
diff --git a/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/test/lXZzTxX_ZZkvjixvqJON/.content.xml b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/test/lXZzTxX_ZZkvjixvqJON/.content.xml
new file mode 100644
index 0000000..6b657a2
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/test_nodetype_on_merge.zip/jcr_root/home/groups/test/lXZzTxX_ZZkvjixvqJON/.content.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<jcr:root xmlns:jcr="http://www.jcp.org/jcr/1.0" xmlns:rep="internal"
+    jcr:mixinTypes="[rep:AccessControllable]"
+    jcr:primaryType="rep:Group"
+    jcr:uuid="9628ffae-cf05-3138-8185-2cb572d50d45"
+    rep:authorizableId="testgroup"
+    rep:principalName="testgroup"/>