Author: mreutegg
Date: Wed Dec 18 17:15:22 2013
New Revision: 1552036

URL: http://svn.apache.org/r1552036
Log:
OAK-1118: Removing and readding mix:versionable fails if node is referenceable

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
    jackrabbit/oak/trunk/oak-jcr/pom.xml
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/MixinTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java?rev=1552036&r1=1552035&r2=1552036&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadWriteVersionManager.java
 Wed Dec 18 17:15:22 2013
@@ -147,6 +147,10 @@ class ReadWriteVersionManager extends Re
 
             // jcr:rootVersion child node
             createVersion(node, versionable);
+        } else if (!versionable.hasProperty(JCR_VERSIONHISTORY)) {
+            // connect versionable node with existing history
+            connectHistory(node.getChildNode(JCR_ROOTVERSION),
+                    uuidFromNode(node), versionable);
         }
         return node;
     }
@@ -373,6 +377,25 @@ class ReadWriteVersionManager extends Re
     }
 
     /**
+     * Connects a versionable node with the root version of an existing version
+     * history.
+     *
+     * @param rootVersion the root version of a version history.
+     * @param vHistoryUUID the uuid of the version history node.
+     * @param versionable the versionable node.
+     */
+    private void connectHistory(@Nonnull NodeBuilder rootVersion,
+                                @Nonnull String vHistoryUUID,
+                                @Nonnull NodeBuilder versionable) {
+        String rootVersionUUID = uuidFromNode(rootVersion);
+        versionable.setProperty(JCR_ISCHECKEDOUT, true, Type.BOOLEAN);
+        versionable.setProperty(JCR_VERSIONHISTORY, vHistoryUUID, 
Type.REFERENCE);
+        versionable.setProperty(JCR_BASEVERSION, rootVersionUUID, 
Type.REFERENCE);
+        versionable.setProperty(JCR_PREDECESSORS,
+                Collections.singleton(rootVersionUUID), Type.REFERENCES);
+    }
+
+    /**
      * <i>Copied from Apache Jackrabbit Core</i>
      * <p>
      * Calculates the name of the new version that will be created by a

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1552036&r1=1552035&r2=1552036&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Wed Dec 18 17:15:22 2013
@@ -168,9 +168,6 @@
       org.apache.jackrabbit.core.query.ShareableNodeTest#testName              
                      <!-- OAK-118 -->
       org.apache.jackrabbit.core.query.ShareableNodeTest#testPathConstraint    
                      <!-- OAK-118 -->
       org.apache.jackrabbit.oak.jcr.query.QueryTest#fnNameEncoding             
                      <!-- OAK-1000 -->
-
-      <!-- Node Types -->
-      
org.apache.jackrabbit.oak.jcr.nodetype.MixinTest#testRemoveAddMixVersionable1   
               <!-- OAK-1118 -->
     </known.issues>
   </properties>
 

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/MixinTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/MixinTest.java?rev=1552036&r1=1552035&r2=1552036&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/MixinTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/nodetype/MixinTest.java
 Wed Dec 18 17:15:22 2013
@@ -118,7 +118,6 @@ public class MixinTest extends AbstractJ
         assertFalse(vhId.equals(node.getVersionHistory().getUUID()));
     }
 
-    // FIXME: OAK-1118
     public void testRemoveAddMixVersionable1() throws Exception {
         Node node = testRootNode.addNode(nodeName1);
         node.addMixin(mixReferenceable);
@@ -130,6 +129,6 @@ public class MixinTest extends AbstractJ
         node.addMixin(mixVersionable);
         superuser.save();
 
-        assertFalse(vhId.equals(node.getVersionHistory().getUUID()));
+        assertEquals(vhId, node.getVersionHistory().getUUID());
     }
 }
\ No newline at end of file


Reply via email to