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>