Author: stillalex
Date: Thu Jun 22 10:19:18 2017
New Revision: 1799559
URL: http://svn.apache.org/viewvc?rev=1799559&view=rev
Log:
OAK-6379 NPE in MergingNodeStateDiff on DELETE_DELETED_PROPERTY
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerOursTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerTheirsTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java?rev=1799559&r1=1799558&r2=1799559&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/commit/MergingNodeStateDiff.java
Thu Jun 22 10:19:18 2017
@@ -164,13 +164,11 @@ public final class MergingNodeStateDiff
private void applyPropertyResolution(Resolution resolution, ConflictType
conflictType, String name, PropertyState ours) {
NodeBuilder conflictMarker = getConflictMarker(conflictType);
if (resolution == Resolution.OURS) {
- if (DELETE_CHANGED_PROPERTY == conflictType) {
+ if (DELETE_CHANGED_PROPERTY == conflictType ||
DELETE_DELETED_PROPERTY == conflictType) {
target.removeProperty(name);
- }
- else {
+ } else {
target.setProperty(ours);
}
-
}
NodeBuilder baseClean =
conflictMarker.getChildNode(ConflictAnnotatingRebaseDiff.BASE);
if (baseClean.exists()) {
@@ -185,10 +183,9 @@ public final class MergingNodeStateDiff
private void applyResolution(Resolution resolution, ConflictType
conflictType, String name, NodeState ours) {
NodeBuilder conflictMarker = getConflictMarker(conflictType);
if (resolution == Resolution.OURS) {
- if (DELETE_CHANGED_NODE == conflictType) {
+ if (DELETE_CHANGED_NODE == conflictType || DELETE_DELETED_NODE ==
conflictType) {
removeChild(target, name);
- }
- else {
+ } else {
addChild(target, name, ours);
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerOursTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerOursTest.java?rev=1799559&r1=1799558&r2=1799559&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerOursTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerOursTest.java
Thu Jun 22 10:19:18 2017
@@ -74,7 +74,7 @@ public class DefaultThreeWayConflictHand
}
@Test
- public void testAddExistingProperties() throws CommitFailedException {
+ public void testAddExistingProperty() throws CommitFailedException {
theirRoot.getTree("/").setProperty("p", THEIR_VALUE);
theirRoot.getTree("/").setProperty("q", THEIR_VALUE);
ourRoot.getTree("/").setProperty("p", OUR_VALUE);
@@ -119,6 +119,18 @@ public class DefaultThreeWayConflictHand
}
@Test
+ public void testDeleteDeletedProperty() throws CommitFailedException {
+ theirRoot.getTree("/").removeProperty("a");
+ ourRoot.getTree("/").removeProperty("a");
+
+ theirRoot.commit();
+ ourRoot.commit();
+
+ PropertyState p = ourRoot.getTree("/").getProperty("a");
+ assertNull(p);
+ }
+
+ @Test
public void testDeleteChangedProperty() throws CommitFailedException {
theirRoot.getTree("/").setProperty("a", THEIR_VALUE);
ourRoot.getTree("/").removeProperty("a");
@@ -168,4 +180,15 @@ public class DefaultThreeWayConflictHand
assertFalse(n.exists());
}
+ @Test
+ public void testDeleteDeletedNode() throws CommitFailedException {
+ theirRoot.getTree("/x").remove();
+ ourRoot.getTree("/x").remove();
+
+ theirRoot.commit();
+ ourRoot.commit();
+
+ assertFalse(ourRoot.getTree("/x").exists());
+ }
+
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerTheirsTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerTheirsTest.java?rev=1799559&r1=1799558&r2=1799559&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerTheirsTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/core/DefaultThreeWayConflictHandlerTheirsTest.java
Thu Jun 22 10:19:18 2017
@@ -74,7 +74,7 @@ public class DefaultThreeWayConflictHand
}
@Test
- public void testAddExistingProperties() throws CommitFailedException {
+ public void testAddExistingProperty() throws CommitFailedException {
theirRoot.getTree("/").setProperty("p", THEIR_VALUE);
theirRoot.getTree("/").setProperty("q", THEIR_VALUE);
ourRoot.getTree("/").setProperty("p", OUR_VALUE);
@@ -118,6 +118,18 @@ public class DefaultThreeWayConflictHand
}
@Test
+ public void testDeleteDeletedProperty() throws CommitFailedException {
+ theirRoot.getTree("/").removeProperty("a");
+ ourRoot.getTree("/").removeProperty("a");
+
+ theirRoot.commit();
+ ourRoot.commit();
+
+ PropertyState p = ourRoot.getTree("/").getProperty("a");
+ assertNull(p);
+ }
+
+ @Test
public void testDeleteChangedProperty() throws CommitFailedException {
theirRoot.getTree("/").setProperty("a", THEIR_VALUE);
ourRoot.getTree("/").removeProperty("a");
@@ -168,4 +180,14 @@ public class DefaultThreeWayConflictHand
assertEquals(THEIR_VALUE, n.getProperty("p").getValue(STRING));
}
+ @Test
+ public void testDeleteDeletedNode() throws CommitFailedException {
+ theirRoot.getTree("/x").remove();
+ ourRoot.getTree("/x").remove();
+
+ theirRoot.commit();
+ ourRoot.commit();
+
+ assertFalse(ourRoot.getTree("/x").exists());
+ }
}