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/11/09 08:02:35 UTC

[jackrabbit-filevault] 01/01: JCRVLT-569 never delete existing nodes with import mode != replace

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

kwin pushed a commit to branch bugfix/JCRVLT-569-don't-remove-nodes-during-merge
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git

commit 7724d6e7de25b94d5abafeb4e6b428edf16298ff
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Tue Nov 9 09:02:26 2021 +0100

    JCRVLT-569 never delete existing nodes with import mode != replace
---
 .../org/apache/jackrabbit/vault/fs/io/Importer.java   |  9 +++++++--
 .../vault/packaging/integration/ImportModeIT.java     | 19 +++++++++++++++++++
 .../META-INF/vault/filter.xml                         |  8 ++++++++
 .../META-INF/vault/nodetypes.cnd                      |  8 ++++++++
 .../META-INF/vault/properties.xml                     | 18 ++++++++++++++++++
 .../jcr_root/.content.xml                             | 17 +++++++++++++++++
 .../jcr_root/testroot/.content.xml                    |  4 ++++
 7 files changed, 81 insertions(+), 2 deletions(-)

diff --git a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
index 776bbee..7a5fb2f 100644
--- a/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
+++ b/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
@@ -48,6 +48,7 @@ import org.apache.jackrabbit.spi.commons.namespace.SessionNamespaceResolver;
 import org.apache.jackrabbit.vault.fs.api.Artifact;
 import org.apache.jackrabbit.vault.fs.api.ArtifactType;
 import org.apache.jackrabbit.vault.fs.api.ImportInfo;
+import org.apache.jackrabbit.vault.fs.api.ImportMode;
 import org.apache.jackrabbit.vault.fs.api.NodeNameList;
 import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.PathMapping;
@@ -912,8 +913,12 @@ public class Importer {
                         aclManagement.clearACL(node.getParent());
                     }
                 } else {
-                    imp.onDeleted(info.path);
-                    node.remove();
+                    if (filter.getImportMode(info.path) == ImportMode.REPLACE) {
+                        imp.onDeleted(info.path);
+                        node.remove();
+                    } else {
+                        imp.onNop(info.path);
+                    }
                 }
             }
         } else if (info.artifacts.getPrimaryData() !=null && info.artifacts.size() == 1) {
diff --git a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java
index 79a085a..34baad2 100644
--- a/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java
+++ b/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/ImportModeIT.java
@@ -297,6 +297,25 @@ public class ImportModeIT extends IntegrationTestBase {
         assertNodeExists("/testroot/merge_properties/jcr:content");
     }
 
+    @Test
+    public void testFilterRootNotCoveredByAggregate() throws RepositoryException, IOException, PackageException {
+        Node parent = admin.getRootNode().addNode("testroot");
+        setUpNode(parent, "replace");
+        setUpNode(parent, "merge");
+        setUpNode(parent, "update");
+        setUpNode(parent, "merge_properties");
+        setUpNode(parent, "update_properties");
+        
+        admin.save();
+        extractVaultPackageStrict("/test-packages/import_modes_test_missing_artifacts.zip");
+        // node in repo removed with replace, not removed for all other import modes
+        assertNodeMissing("/testroot/replace");
+        assertNodeExists("/testroot/merge");
+        assertNodeExists("/testroot/update");
+        assertNodeExists("/testroot/merge_properties");
+        assertNodeExists("/testroot/update_properties");
+    }
+
     private void setUpNode(Node parent, String name) throws RepositoryException {
         Node node = parent.addNode(name);
         node.setProperty("propertyold", "old");
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/filter.xml b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/filter.xml
new file mode 100644
index 0000000..572c30b
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/filter.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<workspaceFilter version="1.0">
+    <filter root="/testroot/replace" mode="replace"/>
+    <filter root="/testroot/merge" mode="merge"/>
+    <filter root="/testroot/update" mode="update"/>
+    <filter root="/testroot/merge_properties" mode="merge_properties"/>
+    <filter root="/testroot/update_properties" mode="update_properties"/>
+</workspaceFilter>
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/nodetypes.cnd b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/nodetypes.cnd
new file mode 100644
index 0000000..5afdfb7
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/nodetypes.cnd
@@ -0,0 +1,8 @@
+<'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
+
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/properties.xml b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/properties.xml
new file mode 100644
index 0000000..c606e19
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/META-INF/vault/properties.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
+<properties>
+<comment>FileVault Package Properties</comment>
+<entry key="createdBy">admin</entry>
+<entry key="name">import-modes-test</entry>
+<entry key="lastModified">2011-11-15T09:45:14.664+01:00</entry>
+<entry key="lastModifiedBy">admin</entry>
+<entry key="created">2011-11-15T09:45:14.685+01:00</entry>
+<entry key="buildCount">1</entry>
+<entry key="version"/>
+<entry key="dependencies"/>
+<entry key="packageFormatVersion">2</entry>
+<entry key="description"/>
+<entry key="lastWrapped">2011-11-15T09:45:14.664+01:00</entry>
+<entry key="group"/>
+<entry key="lastWrappedBy">admin</entry>
+</properties>
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/jcr_root/.content.xml b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/jcr_root/.content.xml
new file mode 100644
index 0000000..e546f29
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/jcr_root/.content.xml
@@ -0,0 +1,17 @@
+<?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="/index.html">
+    <rep:policy/>
+    <jcr:system/>
+    <var/>
+    <libs/>
+    <etc/>
+    <apps/>
+    <content/>
+    <tmp/>
+    <home/>
+    <testroot/>
+</jcr:root>
\ No newline at end of file
diff --git a/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/jcr_root/testroot/.content.xml b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/jcr_root/testroot/.content.xml
new file mode 100644
index 0000000..57bca0f
--- /dev/null
+++ b/vault-core/src/test/resources/test-packages/import_modes_test_missing_artifacts.zip/jcr_root/testroot/.content.xml
@@ -0,0 +1,4 @@
+<?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:primaryType="sling:Folder">
+</jcr:root>