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 mr...@apache.org on 2013/08/05 14:55:27 UTC

svn commit: r1510460 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java

Author: mreutegg
Date: Mon Aug  5 12:55:26 2013
New Revision: 1510460

URL: http://svn.apache.org/r1510460
Log:
OAK-940: Manually specified jcr:frozenUuid overwriting the one assigned by the VersionManager when versioning node 

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java?rev=1510460&r1=1510459&r2=1510460&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionableState.java Mon Aug  5 12:55:26 2013
@@ -429,6 +429,10 @@ class VersionableState {
                                  NodeBuilder dest,
                                  PropertyState prop)
                     throws RepositoryException {
+                if (BASIC_FROZEN_PROPERTIES.contains(prop.getName())) {
+                    // OAK-940: do not overwrite basic frozen properties
+                    return IGNORE;
+                }
                 return getOPV(src, prop);
             }
         }, true);

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java?rev=1510460&r1=1510459&r2=1510460&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/version/VersionableTest.java Mon Aug  5 12:55:26 2013
@@ -17,11 +17,14 @@
 package org.apache.jackrabbit.oak.jcr.version;
 
 import javax.jcr.Node;
+import javax.jcr.Property;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
+import javax.jcr.version.Version;
 import javax.jcr.version.VersionException;
 import javax.jcr.version.VersionManager;
 
+import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.test.AbstractJCRTest;
 
 /**
@@ -63,4 +66,38 @@ public class VersionableTest extends Abs
         VersionManager vMgr = superuser.getWorkspace().getVersionManager();
         vMgr.checkin(node.getPath());
     }
-}
+
+    /**
+     * Test from Jackrabbit: JCR-3635 (OAK-940)
+     *
+     * Tests the case when a node already has a manual set
+     * JcrConstants.JCR_FROZENUUID property and is versioned. The manual set
+     * frozenUuid will overwrite the one that is automatically assigned by the
+     * VersionManager, which should not happen
+     */
+    public void testCopyFrozenUuidProperty() throws Exception {
+        Node firstNode = testRootNode.addNode(nodeName1);
+        firstNode.setPrimaryType(JcrConstants.NT_UNSTRUCTURED);
+        firstNode.addMixin(JcrConstants.MIX_VERSIONABLE);
+        firstNode.getSession().save();
+
+        // create version for the node
+        Version firstNodeVersion = firstNode.checkin();
+        firstNode.checkout();
+
+        Node secondNode = testRootNode.addNode(nodeName2);
+        secondNode.setPrimaryType(JcrConstants.NT_UNSTRUCTURED);
+        secondNode.addMixin(JcrConstants.MIX_VERSIONABLE);
+        Property firstNodeVersionFrozenUuid = firstNodeVersion.getFrozenNode().getProperty(JcrConstants.JCR_FROZENUUID);
+        secondNode.setProperty(JcrConstants.JCR_FROZENUUID, firstNodeVersionFrozenUuid.getValue());
+        secondNode.getSession().save();
+
+        // create version of the second node
+        Version secondNodeVersion = secondNode.checkin();
+        secondNode.checkout();
+
+        // frozenUuid from the second node version node should not be the same as the one from the first node version
+        Property secondBodeVersionFrozenUuid = secondNodeVersion.getFrozenNode().getProperty(JcrConstants.JCR_FROZENUUID);
+        assertFalse(JcrConstants.JCR_FROZENUUID + " should not be the same for two different versions of different nodes! ",
+                secondBodeVersionFrozenUuid.getValue().equals(firstNodeVersionFrozenUuid.getValue()));
+    }}