You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by st...@apache.org on 2016/04/01 14:53:34 UTC

svn commit: r1737367 - in /jackrabbit/oak/branches/1.0/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java

Author: stefanegli
Date: Fri Apr  1 12:53:34 2016
New Revision: 1737367

URL: http://svn.apache.org/viewvc?rev=1737367&view=rev
Log:
OAK-4153 : fix for compareAgainstBaseState when removing last child while adding more than 1 new child - merged from trunk/OAK-4153-3.patch

Modified:
    jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
    jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java

Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java?rev=1737367&r1=1737366&r2=1737367&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentNodeState.java Fri Apr  1 12:53:34 2016
@@ -555,28 +555,29 @@ public class SegmentNodeState extends Re
                 }
             }
         } else if (beforeChildName != Template.MANY_CHILD_NODES) {
+            boolean beforeChildRemoved = true;
+            NodeState beforeChild =
+                    beforeTemplate.getChildNode(beforeChildName, beforeId);
             for (ChildNodeEntry entry
                     : afterTemplate.getChildNodeEntries(afterId)) {
                 String childName = entry.getName();
                 NodeState afterChild = entry.getNodeState();
                 if (beforeChildName.equals(childName)) {
-                    NodeState beforeChild =
-                            beforeTemplate.getChildNode(beforeChildName, beforeId);
-                    if (beforeChild.exists()) {
-                        if (!fastEquals(afterChild, beforeChild)
-                                && !diff.childNodeChanged(
-                                        childName, beforeChild, afterChild)) {
-                            return false;
-                        }
-                    } else {
-                        if (!diff.childNodeAdded(childName, afterChild)) {
-                            return false;
-                        }
+                    beforeChildRemoved = false;
+                    if (!fastEquals(afterChild, beforeChild)
+                            && !diff.childNodeChanged(
+                                    childName, beforeChild, afterChild)) {
+                        return false;
                     }
                 } else if (!diff.childNodeAdded(childName, afterChild)) {
                     return false;
                 }
             }
+            if (beforeChildRemoved) {
+                if (!diff.childNodeDeleted(beforeChildName, beforeChild)) {
+                    return false;
+                }
+            }
         } else {
             MapRecord afterMap = afterTemplate.getChildNodeMap(afterId);
             MapRecord beforeMap = beforeTemplate.getChildNodeMap(beforeId);

Modified: jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java?rev=1737367&r1=1737366&r2=1737367&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompareAgainstBaseStateTest.java Fri Apr  1 12:53:34 2016
@@ -152,4 +152,20 @@ public class CompareAgainstBaseStateTest
         verify(diff);
     }
 
+    @Test
+    public void testChildNodeDeletedAndMultipleAdded() {
+        NodeState before = builder.getNodeState();
+        builder.getChildNode("baz").remove();
+        builder.child("x");
+        builder.child("y");
+        NodeState after = builder.getNodeState();
+
+        expect(diff.childNodeDeleted("baz", before.getChildNode("baz"))).andReturn(true);
+        expect(diff.childNodeAdded("x", after.getChildNode("x"))).andReturn(true);
+        expect(diff.childNodeAdded("y", after.getChildNode("x"))).andReturn(true);
+        replay(diff);
+
+        after.compareAgainstBaseState(before, diff);
+        verify(diff);
+    }
 }