You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2008/02/05 11:12:56 UTC
svn commit: r618599 - in /jackrabbit/branches/1.4:
jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeNonVersionableSubNodeTest.java
Author: jukka
Date: Tue Feb 5 02:12:55 2008
New Revision: 618599
URL: http://svn.apache.org/viewvc?rev=618599&view=rev
Log:
1.4: Merged revisions 612604 and 612772 (JCR-1046)
Modified:
jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
jackrabbit/branches/1.4/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeNonVersionableSubNodeTest.java
Modified: jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java?rev=618599&r1=618598&r2=618599&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java Tue Feb 5 02:12:55 2008
@@ -3680,11 +3680,14 @@
NodeImpl srcNode = doMergeTest(srcSession, failedIds, bestEffort);
if (srcNode == null) {
- // leave, iterate over children
+ // leave, iterate over children, but ignore non-versionable child
+ // nodes (see JCR-1046)
NodeIterator iter = getNodes();
while (iter.hasNext()) {
NodeImpl n = (NodeImpl) iter.nextNode();
- n.internalMerge(srcSession, failedIds, bestEffort, removeExisting, replaceExisting);
+ if (n.isNodeType(NameConstants.MIX_VERSIONABLE)) {
+ n.internalMerge(srcSession, failedIds, bestEffort, removeExisting, replaceExisting);
+ }
}
return;
}
Modified: jackrabbit/branches/1.4/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeNonVersionableSubNodeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/1.4/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeNonVersionableSubNodeTest.java?rev=618599&r1=618598&r2=618599&view=diff
==============================================================================
--- jackrabbit/branches/1.4/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeNonVersionableSubNodeTest.java (original)
+++ jackrabbit/branches/1.4/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/version/MergeNonVersionableSubNodeTest.java Tue Feb 5 02:12:55 2008
@@ -64,52 +64,62 @@
*/
public void testMergeNodeNonVersionableSubNodeUpdate() throws RepositoryException {
// modify non versionable subnode so we can check if it's updated after merge
- String nvSubNodePath = nodeName1 + "/" + nodeName2 + "/" + nodeName3;
- Node nvSubNode = testRootNodeW2.getNode(nvSubNodePath);
- nvSubNode.setProperty(propertyName1, CHANGED_STRING);
- superuserW2.save();
-
- // versionable ancestor to merge in second workspace
- Node nodeToMerge = testRootNodeW2.getNode(nodeName1);
-
- // make sure the ancestor will get status 'update' on merge: V is predeccessor of V'
- nodeToMerge.checkout();
- nodeToMerge.checkin();
+ String changedString = CHANGED_STRING + System.currentTimeMillis();
+ String nvSubNodePath = nodeName2 + "/" + nodeName3;
- nodeToMerge.checkout();
- nodeToMerge.merge(workspace.getName(), true);
+ // versionable ancestor to merge in first workspace (N)
+ Node n = testRootNodeW2.getNode(nodeName1);
- // corresponding node to nvSubNode in default workspace
- Node correspondingSubNode = testRootNode.getNode(nvSubNodePath);
+ // versionable ancestor to merge in second workspace (N')
+ Node np = testRootNodeW2.getNode(nodeName1);
- // test if modification on non-v node is done according to corresponding node.
- assertTrue(nvSubNode.getProperty(propertyName1).getString().equals(correspondingSubNode.getName()));
+ // checkout N and make change
+ n.checkout();
+ Node nvSubNode = n.getNode(nvSubNodePath);
+ nvSubNode.setProperty(propertyName1, changedString);
+ n.save();
+ n.checkin();
+
+ // merge change into N'
+ np.merge(workspaceW2.getName(), true);
+
+ // corresponding node to nvSubNode in 2nd workspace
+ Node nvSubNodeP = np.getNode(nvSubNodePath);
+
+ // test if modification on N was merged into N' subnode
+ assertTrue(nvSubNodeP.getProperty(propertyName1).getString().equals(changedString));
}
/**
* Node.merge(): nonversionable subNode N: is left unchanged if the nearest
* versionable ancestor has state leave.<br>
*/
- public void disable_testMergeNodeNonVersionableSubNodeLeave() throws RepositoryException {
+ public void testMergeNodeNonVersionableSubNodeLeave() throws RepositoryException {
// modify non versionable subnode so we can check if it's updated after merge
- String nvSubNodePath = nodeName1 + "/" + nodeName2 + "/" + nodeName3;
- Node nvSubNode = testRootNodeW2.getNode(nvSubNodePath);
- nvSubNode.setProperty(propertyName1, CHANGED_STRING);
- superuserW2.save();
-
- // versionable ancestor to merge in second workspace
- Node nodeToMerge = testRootNodeW2.getNode(nodeName1);
-
- // make sure the ancestor will get status 'leave' on merge: V is successor of V'
- Node correspondingNodeToMerge = testRootNode.getNode(nodeName1);
- correspondingNodeToMerge.checkout();
- correspondingNodeToMerge.checkin();
+ String changedString = CHANGED_STRING + System.currentTimeMillis();
+ String nvSubNodePath = nodeName2 + "/" + nodeName3;
+
+ // versionable ancestor to merge in first workspace (N)
+ Node n = testRootNodeW2.getNode(nodeName1);
+
+ // versionable ancestor to merge in second workspace (N')
+ Node np = testRootNodeW2.getNode(nodeName1);
+
+ // checkout N' and make change
+ np.checkout();
+ Node nvSubNodeP = np.getNode(nvSubNodePath);
+ nvSubNodeP.setProperty(propertyName1, changedString);
+ np.save();
+ np.checkin();
+
+ // merge into N'
+ np.merge(workspaceW2.getName(), true);
- nodeToMerge.checkout();
- nodeToMerge.merge(workspace.getName(), true);
+ // corresponding node to nvSubNode in 2nd workspace
+ Node nvSubNode = np.getNode(nvSubNodePath);
- // test if modification on non-v node is unchanged.
- assertTrue(nvSubNode.getProperty(propertyName1).getString().equals(CHANGED_STRING));
+ // test if modification on N' was not modified
+ assertTrue(nvSubNode.getProperty(propertyName1).getString().equals(changedString));
}
/**