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