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());
+    }
 }


Reply via email to